fusuma-plugin-remap 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.