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