lib/fusuma/plugin/executors/sendkey_executor.rb in fusuma-plugin-sendkey-0.7.1 vs lib/fusuma/plugin/executors/sendkey_executor.rb in fusuma-plugin-sendkey-0.8.0

- old
+ new

@@ -3,12 +3,17 @@ require_relative "../sendkey/keyboard" module Fusuma module Plugin module Executors - # Control Window or Workspaces by executing wctrl + # Execute to send key event to device class SendkeyExecutor < Executor + def initialize + @device_name = config_params(:device_name) + super + end + def execute_keys [:sendkey] end def config_param_types @@ -20,25 +25,14 @@ # fork and execute sendkey command # @param event [Event] # @return [nil] def execute(event) MultiLogger.info(sendkey: search_param(event)) - pid = fork do - Process.daemon(true) - _execute(event) - end - - Process.detach(pid) - end - - # execute sendkey command - # @param event [Event] - # @return [nil] - def _execute(event) keyboard.type( param: search_param(event), - keep: search_keypress(event) + keep: search_keypress(event), + clear: clearmodifiers(event) ) end # check executable # @param event [Event] @@ -50,27 +44,38 @@ end private def keyboard - @keyboard ||= begin - name_pattren = config_params(:device_name) - Sendkey::Keyboard.new(name_pattern: name_pattren) - end + @keyboard ||= Sendkey::Keyboard.new(name_pattern: @device_name) end def search_param(event) index = Config::Index.new([*event.record.index.keys, :sendkey]) Config.search(index) end + # search keypress from config for keep modifiers when sendkey # @param event [Event] # @return [String] def search_keypress(event) + # if fusuma_virtual_keyboard exists, don't have to keep modifiers + return "" if keyboard.use_virtual_keyboard? + keys = event.record.index.keys keypress_index = keys.find_index { |k| k.symbol == :keypress } code = keypress_index && keys[keypress_index + 1].symbol code.to_s + end + + # clearmodifiers from config + # @param event [Event] + # @return [String, TrueClass, Symbole] + def clearmodifiers(event) + @clearmodifiers ||= {} + index = event.record.index + @clearmodifiers[index.cache_key] ||= + Config.search(Config::Index.new([*index.keys, "clearmodifiers"])) || :none end end end end end