lib/fusuma/plugin/sendkey/keyboard.rb in fusuma-plugin-sendkey-0.5.1 vs lib/fusuma/plugin/sendkey/keyboard.rb in fusuma-plugin-sendkey-0.6.0.pre

- old
+ new

@@ -1,11 +1,11 @@ # frozen_string_literal: true require 'revdev' require 'fusuma/device' -require_relative './device.rb' +require_relative './device' module Fusuma module Plugin module Sendkey # Emulate Keyboard @@ -23,16 +23,18 @@ end attr_reader :device # @param param [String] - def type(param:) + # @param keep [String] + def type(param:, keep: '') return unless param.is_a?(String) - keycodes = split_param(param) + keep_keycodes = split_param(keep) + keycodes = split_param(param) - keep_keycodes - clear_modifiers + clear_modifiers(keep_keycodes) keycodes.each { |keycode| key_event(keycode: keycode, press: true) } key_sync(press: true) keycodes.reverse.map { |keycode| key_event(keycode: keycode, press: false) } key_sync(press: false) end @@ -97,13 +99,14 @@ def keycode_const(keycode) Object.const_get "LinuxInput::#{keycode}" end - def clear_modifiers + def clear_modifiers(keycodes) modifiers = %w[ CAPSLOCK LEFTALT LEFTCTRL LEFTMETA LEFTSHIFT RIGHTALT RIGHTCTRL RIGHTSHIFT ] - modifiers.each { |code| key_event(keycode: key_prefix(code), press: false) } + .map { |code| key_prefix(code) } + (modifiers - keycodes).each { |code| key_event(keycode: code, press: false) } end private def find_device(name_pattern:)