class Fusuma::Plugin::Parsers::KeypressParser

Generate KeypressRecord from libinput_command_input

Constants

AVAILABLE_KEYS
DEFAULT_SOURCE

Public Instance Methods

parse_record(record) click to toggle source

@param record [String] @return [Records::Gesture, nil]

# File lib/fusuma/plugin/parsers/keypress_parser.rb, line 24
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

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

    return unless AVAILABLE_KEYS.include?(code)

    Events::Records::KeypressRecord.new(status: status, code: code)
  end
end
tag() click to toggle source
# File lib/fusuma/plugin/parsers/keypress_parser.rb, line 48
def tag
  'keypress_parser'
end