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

Version Path
fusuma-plugin-keypress-0.4.2 lib/fusuma/plugin/parsers/keypress_parser.rb
fusuma-plugin-keypress-0.4.1 lib/fusuma/plugin/parsers/keypress_parser.rb
fusuma-plugin-keypress-0.4.0 lib/fusuma/plugin/parsers/keypress_parser.rb
fusuma-plugin-keypress-0.4.0.pre2 lib/fusuma/plugin/parsers/keypress_parser.rb