Class: Fusuma::Plugin::Parsers::KeypressParser

Inherits:
Parser
  • Object
show all
Defined in:
lib/fusuma/plugin/parsers/keypress_parser.rb

Overview

Generate KeypressRecord from libinput_command_input

Constant Summary collapse

DEFAULT_SOURCE =
"libinput_command_input"

Instance Method Summary collapse

Instance Method Details

#parse_record(record) ⇒ Records::Gesture?

Parameters:

  • record (String)

Returns:

  • (Records::Gesture, nil)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fusuma/plugin/parsers/keypress_parser.rb', line 12

def parse_record(record)
  line = record.to_s

  # NOTE: example of line
  # event4   KEYBOARD_KEY      +4.81s      KEY_LEFTSHIFT (42) pressed
  # event4   KEYBOARD_KEY      +4.90s      KEY_LEFTSHIFT (42) released
  # event4   KEYBOARD_KEY      +7.39s      KEY_CAPSLOCK (58) pressed
  # event4   KEYBOARD_KEY      +7.52s      KEY_CAPSLOCK (58) released
  # event4   KEYBOARD_KEY      +8.98s      KEY_LEFTCTRL (29) pressed
  # event4   KEYBOARD_KEY      +9.14s      KEY_LEFTCTRL (29) released
  # event4   KEYBOARD_KEY      +29.581s    KEY_2 (3) released

  case line
  when /KEYBOARD_KEY.+(\d+\.\d+)s.*KEY_([[:alnum:]_]+)\s.*(pressed|released)/
    matched = Regexp.last_match
    # time = matched[1]   # 4.81
    code = matched[2] # LEFTSHIFT
    status = matched[3] # pressed

    Events::Records::KeypressRecord.new(status: status, code: code)
  end
end

#tagObject



35
36
37
# File 'lib/fusuma/plugin/parsers/keypress_parser.rb', line 35

def tag
  "keypress_parser"
end