fusuma-plugin-remap 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aaaa77e6fd8c9cee0a54568993df26b41d6f51cdb23863c09880e904c915ff5b
4
- data.tar.gz: fc5192209c0a3b277b1acbb7172c99d7271ec7597738b4e26a9066050674e25e
3
+ metadata.gz: fb42159c757f56d2da9af424bfc088719bc22c965ad72bed52bc9bd81ad86e9f
4
+ data.tar.gz: cdddfbf418ecb85c1ad0cd3991d04ca5f022833ce4b344b1e9e37594c6c82ae9
5
5
  SHA512:
6
- metadata.gz: f25bc7503fb3cafc2f58266e859c26f3a298063e0fa29047883297164150eddabcc5a83504dd61a2245b5adcb8f0bb1d142a07d883d59f81b5358585a8f6b1b4
7
- data.tar.gz: 80477884b33eab4ead8bb591da4c9c59c048622608a7870746c3c33a945cbccb03efa0510aaa61618f575d73c083aa4a755078bf9147bb631d57f5da38d46306
6
+ metadata.gz: d8255feb9082b3f8e18962b8edfe73ba44ebb61d53f159ebeeadf6fda53ca796cbce18f100d4efdb8dcf3c8290920458c30ccffb924973b8a6a9eb0c855db555
7
+ data.tar.gz: c24ca94224d7aadb892af07c62fe689ff74e07b38ff09cc0a15b6755d1aa3092a2255c553aff93f6c6c4401220456ec665776fd9eb5b57da3e102816929f9182
data/README.md CHANGED
@@ -37,26 +37,6 @@ $ sudo udevadm control --reload-rules && sudo udevadm trigger
37
37
  $ sudo gem install fusuma-plugin-remap
38
38
  ```
39
39
 
40
- ### Set plugin properties
41
-
42
- Open `~/.config/fusuma/config.yml` and add the following code at the bottom in primary context(first section separated by `---`).
43
-
44
- ```yaml
45
- plugin:
46
- inputs:
47
- remap_keyboard_input:
48
- keyboard_name_patterns: xremap # (optional) specifiy other source keyboard name
49
- buffers:
50
- keypress_buffer:
51
- source: remap_keyboard_input # (required) use buffer of fusuma-plugin-keypress
52
- executors:
53
- sendkey_executor:
54
- device_name: fusuma_virtual_keyboard # (optional) when you use fusuma-plugin-sendkey
55
-
56
- ---
57
-
58
- ```
59
-
60
40
  ## Properties
61
41
 
62
42
  ### Remap
@@ -20,8 +20,11 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.required_ruby_version = ">= 2.5.1"
24
- spec.add_dependency "fusuma", "~> 3.0"
23
+ spec.required_ruby_version = ">= 2.7"
24
+ # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all&section=main
25
+ # support focal (20.04LTS) 2.7
26
+
27
+ spec.add_dependency "fusuma", ">= 3.1"
25
28
  spec.add_dependency "fusuma-plugin-keypress", "~> 0.5"
26
29
  spec.add_dependency "msgpack"
27
30
  spec.add_dependency "revdev"
@@ -51,15 +51,15 @@ module Fusuma
51
51
  private
52
52
 
53
53
  def setup_remapper
54
+ source_keyboards = KeyboardSelector.new(config_params(:keyboard_name_patterns)).select
55
+ internal_touchpad = TouchpadSelector.new(config_params(:touchpad_name_patterns)).select.first
56
+ MultiLogger.info(source_keyboards: source_keyboards.map(&:device_name), internal_touchpad: internal_touchpad.device_name)
57
+
54
58
  layer_manager = Remap::LayerManager.instance
55
59
 
56
60
  # physical keyboard input event
57
61
  @keyboard_reader, keyboard_writer = IO.pipe
58
62
 
59
- source_keyboards = KeyboardSelector.new(config_params(:keyboard_name_patterns)).select
60
- internal_touchpad = TouchpadSelector.new(config_params(:touchpad_name_patterns)).select.first
61
- MultiLogger.info(source_keyboards: source_keyboards.map(&:device_name), internal_touchpad: internal_touchpad.device_name)
62
-
63
63
  @pid = fork do
64
64
  layer_manager.writer.close
65
65
  @keyboard_reader.close
@@ -96,11 +96,7 @@ module Fusuma
96
96
  # @return [Array<Revdev::EventDevice>]
97
97
  def select
98
98
  devices = if @names
99
- Fusuma::Device.all.select do |d|
100
- Array(@names).any? do |name|
101
- d.name =~ /#{name}/
102
- end
103
- end
99
+ Fusuma::Device.all.select { |d| Array(@names).any? { |name| d.name =~ /#{name}/ } }
104
100
  else
105
101
  # available returns only touchpad devices
106
102
  Fusuma::Device.available
@@ -0,0 +1,10 @@
1
+ plugin:
2
+ inputs:
3
+ remap_keyboard_input:
4
+ keyboard_name_patterns: ["keyboard", "Keyboard", "KEYBOARD"]
5
+ buffers:
6
+ keypress_buffer:
7
+ source: remap_keyboard_input
8
+ executors:
9
+ sendkey_executor:
10
+ device_name: fusuma_virtual_keyboard
@@ -1,9 +1,9 @@
1
1
  require "revdev"
2
2
  require "msgpack"
3
3
  require "set"
4
- require_relative "./layer_manager"
4
+ require_relative "layer_manager"
5
5
 
6
- require_relative "./ruinput_device_patched"
6
+ require_relative "ruinput_device_patched"
7
7
 
8
8
  module Fusuma
9
9
  module Plugin
@@ -79,7 +79,8 @@ module Fusuma
79
79
 
80
80
  remapped_event = InputEvent.new(nil, input_event.type, find_code_from_key(remapped), input_event.value)
81
81
 
82
- # When Set.delete? fails, it means that the key was pressed before remapping started and was released.
82
+ # Workaround to solve the problem that the remapped key remains pressed
83
+ # when the key pressed before remapping is released after remapping
83
84
  unless record_virtual_keyboard_event?(remapped, remapped_event.value)
84
85
  # set original key before remapping
85
86
  remapped_event.code = input_event.code
@@ -94,14 +95,20 @@ module Fusuma
94
95
  end
95
96
  end
96
97
 
97
- # @param [Revdev::InputEvent] event
98
- # @return [void]
98
+ private
99
+
100
+ # record virtual keyboard event
101
+ # @param [String] remapped_value remapped key name
102
+ # @param [Integer] event_value event value
103
+ # @return [Boolean] false if the key was pressed before remapping started and was released
104
+ # @return [Boolean] true if the key was not pressed before remapping started
99
105
  def record_virtual_keyboard_event?(remapped_value, event_value)
100
106
  case event_value
101
107
  when 0
102
108
  @pressed_virtual_keys.delete?(remapped_value)
103
109
  when 1
104
110
  @pressed_virtual_keys.add?(remapped_value)
111
+ true # Always return true because the remapped key may be the same
105
112
  else
106
113
  # 2 is repeat
107
114
  true
@@ -129,7 +136,13 @@ module Fusuma
129
136
 
130
137
  def grab_keyboards
131
138
  @source_keyboards.each do |keyboard|
132
- wait_release_all_keys(keyboard) && keyboard.grab
139
+ wait_release_all_keys(keyboard)
140
+ begin
141
+ keyboard.grab
142
+ MultiLogger.info "Grabbed #{keyboard.device_name}"
143
+ rescue Errno::EBUSY
144
+ MultiLogger.error "Failed to grab #{keyboard.device_name}"
145
+ end
133
146
  end
134
147
  end
135
148
 
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Remap
6
- VERSION = "0.2.0"
6
+ VERSION = "0.3.1"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusuma-plugin-remap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-20 00:00:00.000000000 Z
11
+ date: 2023-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fusuma
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '3.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.0'
26
+ version: '3.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: fusuma-plugin-keypress
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +100,7 @@ files:
100
100
  - exe/fusuma-remap
101
101
  - fusuma-plugin-remap.gemspec
102
102
  - lib/fusuma/plugin/inputs/remap_keyboard_input.rb
103
+ - lib/fusuma/plugin/inputs/remap_keyboard_input.yml
103
104
  - lib/fusuma/plugin/remap.rb
104
105
  - lib/fusuma/plugin/remap/layer_manager.rb
105
106
  - lib/fusuma/plugin/remap/remapper.rb
@@ -118,14 +119,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
119
  requirements:
119
120
  - - ">="
120
121
  - !ruby/object:Gem::Version
121
- version: 2.5.1
122
+ version: '2.7'
122
123
  required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  requirements:
124
125
  - - ">="
125
126
  - !ruby/object:Gem::Version
126
127
  version: '0'
127
128
  requirements: []
128
- rubygems_version: 3.3.26
129
+ rubygems_version: 3.4.10
129
130
  signing_key:
130
131
  specification_version: 4
131
132
  summary: A Fusuma plugin for remapping keyboard events into virtual input devices.