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 +4 -4
- data/lib/fusuma/plugin/remap/keyboard_remapper.rb +47 -21
- data/lib/fusuma/plugin/remap/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5eb6be3cd4ee3e56a0fa412b29381e336c0b25207ca42d716a8a124cf907a5f8
|
4
|
+
data.tar.gz: d3b19a185e0cc03b7abcb00be6a8d7f63340827dafd1136adc941671457b2a80
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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},
|
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
|
98
|
-
#
|
99
|
-
|
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
|
-
#
|
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]
|
147
|
-
|
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
|
-
|
152
|
-
|
153
|
-
pressed_virtual_keys.
|
154
|
-
|
155
|
-
|
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("+")
|
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.
|
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-
|
11
|
+
date: 2025-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fusuma
|