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:)