fusuma-plugin-remap 0.11.1 → 0.11.2

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: c1a6f601df78486fb3bf89f9c7902fe9fd46e45c33e2807eff9f0c4b5a38ec45
4
- data.tar.gz: 50ca1d1da716e62d9ed9cc3973b201f9b8c93b00b5e313559bc5d7d4a73bfd3d
3
+ metadata.gz: 5eb6be3cd4ee3e56a0fa412b29381e336c0b25207ca42d716a8a124cf907a5f8
4
+ data.tar.gz: d3b19a185e0cc03b7abcb00be6a8d7f63340827dafd1136adc941671457b2a80
5
5
  SHA512:
6
- metadata.gz: 881a29098c368a60f0d4469d77b1ffc118d0c9eb2df02d2b7c492ba356f30ab0ad740a73bfa96e229a1fd16d46a7a839139c7b4077e26fb30b092d0c142ca28c
7
- data.tar.gz: 50dd4b8c9554ee17e338a5ded7248d1b4f9215d03ca5d19d5e2c8d97731687b42b1edb2105d7ebf7539ac2718bb3d3085db4c800db26cad54426be93fe854643
6
+ metadata.gz: 593c365c6ef1ffc67a3865e188baeb8c59fa69a37aaaa3f75bad64b251d77d9abd9f914f2b90739f59dffc40b94dbb29c50fb894b8a524ba5820980ba364d8e6
7
+ data.tar.gz: 4cbd18fda7bfa3a05622f82cb4d558e7d00ea4b6d1a97c7c6617003eec64e1b6cb6caabd3fcfff91ef9c6c5c957b7681004c4a234f5c3a5e75a6878ba05526ca
@@ -12,6 +12,7 @@ module Fusuma
12
12
  include Revdev
13
13
 
14
14
  VIRTUAL_KEYBOARD_NAME = "fusuma_virtual_keyboard"
15
+ DEFAULT_EMERGENCY_KEYBIND = "RIGHTCTRL+LEFTCTRL".freeze
15
16
 
16
17
  # Key conversion tables for better performance and readability
17
18
  KEYMAP = Revdev.constants.select { |c| c.start_with?("KEY_", "BTN_") }
@@ -80,25 +81,39 @@ module Fusuma
80
81
  end
81
82
 
82
83
  remapped = current_mapping.fetch(input_key.to_sym, nil)
83
- if remapped.nil?
84
+ case remapped
85
+ when String, Symbol
86
+ # Remapped to another key - continue processing below
87
+ when Hash
88
+ # Command execution (e.g., {:SENDKEY=>"LEFTCTRL+BTN_LEFT", :CLEARMODIFIERS=>true})
89
+ # Skip input event processing and let Fusuma's Executor handle this
90
+ next
91
+ when nil
92
+ # Not remapped - write original key event as-is
84
93
  uinput_keyboard.write_input_event(input_event)
85
94
  next
95
+ else
96
+ # Invalid remapping configuration
97
+ MultiLogger.warn("Invalid remapped value - type: #{remapped.class}, key: #{input_key}")
98
+ next
86
99
  end
87
100
 
88
101
  remapped_code = key_to_code(remapped)
89
102
  if remapped_code.nil?
90
- MultiLogger.warn("Invalid remapped key: #{remapped}, skipping...")
103
+ MultiLogger.warn("Invalid remapped value - unknown key: #{remapped}, input: #{input_key}")
91
104
  uinput_keyboard.write_input_event(input_event)
92
105
  next
93
106
  end
94
107
 
95
108
  remapped_event = InputEvent.new(nil, input_event.type, remapped_code, input_event.value)
96
109
 
97
- # Workaround to solve the problem that the remapped key remains pressed
98
- # when the key pressed before remapping is released after remapping
99
- unless record_virtual_keyboard_event?(remapped, remapped_event.value)
100
- # set original key before remapping
110
+ # Workaround: If a key was pressed before remapping started and is being released,
111
+ # use the original key code to ensure proper key release
112
+ if should_use_original_key?(remapped, remapped_event.value)
101
113
  remapped_event.code = input_event.code
114
+ else
115
+ # Only update virtual key state if we're using the remapped key
116
+ update_virtual_key_state(remapped, remapped_event.value)
102
117
  end
103
118
 
104
119
  # remap to command will be nil
@@ -140,21 +155,34 @@ module Fusuma
140
155
  @pressed_virtual_keys ||= Set.new
141
156
  end
142
157
 
143
- # record virtual keyboard event
158
+ # Update virtual keyboard key state
159
+ # @param [String] remapped_value remapped key name
160
+ # @param [Integer] event_value event value (0: release, 1: press, 2: repeat)
161
+ # @return [void]
162
+ def update_virtual_key_state(remapped_value, event_value)
163
+ case event_value
164
+ when 0 # key release
165
+ pressed_virtual_keys.delete(remapped_value)
166
+ when 1 # key press
167
+ pressed_virtual_keys.add(remapped_value)
168
+ # when 2 is repeat - no state change needed
169
+ end
170
+ end
171
+
172
+ # Check if we should use the original key code instead of remapped key
173
+ # This handles the case where a key was pressed before remapping started
174
+ # and is released after remapping
144
175
  # @param [String] remapped_value remapped key name
145
- # @param [Integer] event_value event value
146
- # @return [Boolean] false if the key was pressed before remapping started and was released
147
- # @return [Boolean] true if the key was not pressed before remapping started
148
- def record_virtual_keyboard_event?(remapped_value, event_value)
176
+ # @param [Integer] event_value event value (0: release, 1: press, 2: repeat)
177
+ # @return [Boolean] true if we should use original key code
178
+ def should_use_original_key?(remapped_value, event_value)
149
179
  case event_value
150
- when 0
151
- pressed_virtual_keys.delete?(remapped_value)
152
- when 1
153
- pressed_virtual_keys.add?(remapped_value)
154
- true # Always return true because the remapped key may be the same
155
- else
156
- # 2 is repeat
157
- true
180
+ when 0 # key release
181
+ # If the key was not in our pressed set, it means it was pressed
182
+ # before remapping started, so we should use original key
183
+ !pressed_virtual_keys.include?(remapped_value)
184
+ when 1, 2 # key press or repeat
185
+ false # Always use remapped key for press/repeat events
158
186
  end
159
187
  end
160
188
 
@@ -224,8 +252,6 @@ module Fusuma
224
252
  Signal.trap(:TERM) { @destroy.call(1) }
225
253
  end
226
254
 
227
- DEFAULT_EMERGENCY_KEYBIND = "RIGHTCTRL+LEFTCTRL".freeze
228
-
229
255
  # Emergency stop keybind for virtual keyboard
230
256
  def set_emergency_ungrab_keys(keybind_string)
231
257
  keybinds = keybind_string&.split("+")
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Remap
6
- VERSION = "0.11.1"
6
+ VERSION = "0.11.2"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusuma-plugin-remap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.11.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-09-10 00:00:00.000000000 Z
11
+ date: 2025-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fusuma