Sha256: dedbb5ead9245c681ae6de00c59632642f1e481a6deb2eabcdcfe7da5593dc94
Contents?: true
Size: 1.56 KB
Versions: 4
Compression:
Stored size: 1.56 KB
Contents
# frozen_string_literal: true module Fusuma module Plugin module Parsers # Generate KeypressRecord from libinput_command_input class KeypressParser < Parser DEFAULT_SOURCE = 'libinput_command_input' AVAILABLE_KEYS = %w[ CAPSLOCK LEFTALT LEFTCTRL LEFTMETA LEFTSHIFT RIGHTALT RIGHTCTRL RIGHTSHIFT RIGHTMETA ].freeze # @param record [String] # @return [Records::Gesture, nil] 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 def tag 'keypress_parser' end end end end end
Version data entries
4 entries across 4 versions & 1 rubygems