lib/fusuma/plugin/sendkey/device.rb in fusuma-plugin-sendkey-0.2.1 vs lib/fusuma/plugin/sendkey/device.rb in fusuma-plugin-sendkey-0.3.0

- old
+ new

@@ -5,59 +5,32 @@ module Fusuma module Plugin module Sendkey # handle Evdev device class Device - attr_reader :device_id def initialize(path: nil) return if path && (@evdev = Evdev.new(path)) (0..99).lazy.find do |i| - begin - evdev = Evdev.new("/dev/input/event#{i}") - @evdev = evdev if evdev.supports_event?(convert_keycode('LEFTALT')) - rescue Errno::ENOENT # No such file or directory - false - # TODO: rescue Errno::EACCES - end + evdev = Evdev.new("/dev/input/event#{i}") + # NOTE: find keyboard device + @evdev = evdev if evdev.supports_event?('KEY_LEFTALT') + rescue Errno::ENOENT # No such file or directory + false + # TODO: rescue Errno::EACCES end end def path raise 'Keyboard is not found' if @evdev.nil? @path ||= @evdev.file.path end - def support?(code) - keycode = convert_keycode(code) + def support?(keycode) @evdev.supports_event?(keycode) rescue NameError - candidates = search_codes(code: code) - - warn "Did you mean? #{candidates.join(' / ')}" unless candidates.empty? - false - end - - def search_codes(code: nil) - query = code&.upcase - LinuxInput.constants - .select { |c| c[/KEY_.*#{query}.*/] } - .select { |c| @evdev.supports_event?(c) } - .map { |c| c.to_s.gsub('KEY_', '') } - end - - def emulate(code:, press: true) - keycode = convert_keycode(code) - v = press ? 1 : 0 - "evemu-event #{path} --type EV_KEY --code #{keycode} --value #{v} --sync" - end - - private - - def convert_keycode(code) - "KEY_#{code.upcase}" end end end end end