lib/fusuma/plugin/executors/sendkey_executor.rb in fusuma-plugin-sendkey-0.5.1 vs lib/fusuma/plugin/executors/sendkey_executor.rb in fusuma-plugin-sendkey-0.6.0.pre
- old
+ new
@@ -1,8 +1,8 @@
# frozen_string_literal: true
-require_relative '../sendkey/keyboard.rb'
+require_relative '../sendkey/keyboard'
module Fusuma
module Plugin
module Executors
# Control Window or Workspaces by executing wctrl
@@ -11,23 +11,33 @@
{
'device_name': String
}
end
- # execute sendkey command
+ # 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)
- keyboard.type(param: search_param(event))
+ _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)
+ )
+ end
+
# check executable
# @param event [Event]
# @return [TrueClass, FalseClass]
def executable?(event)
event.tag.end_with?('_detector') &&
@@ -37,17 +47,26 @@
private
def keyboard
@keyboard ||= begin
- name_pattren = config_params(:device_name)
- Sendkey::Keyboard.new(name_pattern: name_pattren)
- end
+ name_pattren = config_params(:device_name)
+ Sendkey::Keyboard.new(name_pattern: name_pattren)
+ end
end
def search_param(event)
index = Config::Index.new([*event.record.index.keys, :sendkey])
Config.search(index)
+ end
+
+ # @param event [Event]
+ # @return [String]
+ def search_keypress(event)
+ 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
end
end
end
end