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