fusuma-plugin-remap 0.5.0 → 0.6.0

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: bf0c73f3292a88f1488fc06d1c45c5bca19250df7e257063dcc78dbd74a78fb6
4
- data.tar.gz: a78d663ef4cf53629c6b0d9dec965b1494e782814691564f5ce917bb02262e6e
3
+ metadata.gz: eb8fcbe6eb272ae081100e9faa67846308cc7a9adb4cfbff7af5b693ffbcbd3e
4
+ data.tar.gz: 310ff2f96642be97fda21211d8ca7ed87aa2b8682a2cf70797882c9168e4df0b
5
5
  SHA512:
6
- metadata.gz: 9c79bdd354f1188569afd8fe45d7b4e42b5d2463307c8ef26ed74191113d8b38a639ab7c846223a6d30821cc012bb82a1a3b17eeb5d61e8198eb8abe76b785c4
7
- data.tar.gz: 3c915a96eb1f285c294e368f25390864534c3ed0ba792a42722083f9796cb3717042e45a8adea477363aa805e38a66996c49820f5aa88636659e72cf6a6485ba
6
+ metadata.gz: 97b927263c174f2ffc7edf3648510a77c34433523b58373aa4e533a21fe2c2198c181922352c1044717fabdc02d3a093b0a8e091ab0b3e6ba003970151395d67
7
+ data.tar.gz: 8adf8cb9f59083639f0439a5107a0c8afd7f386aaef572db8f6bb85589585aad8aa939f12613120ced49f100a67646379227b728bed9ee80ad12d171039cd460
data/README.md CHANGED
@@ -65,12 +65,26 @@ remap:
65
65
  SPACE: BTN_LEFT
66
66
  ```
67
67
 
68
- ## Emergency stop keybind for virtual keyboard
68
+ ## Emergency Stop Keybind for Virtual Keyboard
69
69
 
70
- This is a special keybind for emergency stop.
71
- If you press following keybind, physical keyboard will be ungrabbed and Fusuma process will be terminated.
70
+ This plugin includes a special keybind for emergency stop. Pressing this key combination will ungrab the physical keyboard and terminate the Fusuma process. This feature is particularly useful in situations where the plugin or system becomes unresponsive.
72
71
 
73
- <kbd>RIGHTCTRL</kbd> <kbd>LEFTCTRL</kbd>
72
+ ### How to Use
73
+ To execute the emergency stop, press the following key combination(default):
74
+ - <kbd>RIGHTCTRL</kbd> → <kbd>LEFTCTRL</kbd>
75
+
76
+ ### Configuration Example
77
+ You can configure the emergency stop key in your Fusuma configuration file (`~/.config/fusuma/config.yml`) as follows:
78
+
79
+ ```yaml
80
+ plugin:
81
+ inputs:
82
+ remap_keyboard_input:
83
+ emergency_ungrab_keys: RIGHTCTRL+LEFTCTRL # keybind
84
+ ```
85
+
86
+ This configuration allows you to specify which keys will trigger the emergency stop functionality.
87
+ It is important to verify this keybind to ensure a swift response during unexpected situations.
74
88
 
75
89
  ## Contributing
76
90
 
@@ -13,6 +13,7 @@ module Fusuma
13
13
 
14
14
  def config_param_types
15
15
  {
16
+ emergency_ungrab_keys: [String],
16
17
  keyboard_name_patterns: [Array, String],
17
18
  touchpad_name_patterns: [Array, String]
18
19
  }
@@ -47,7 +48,7 @@ module Fusuma
47
48
 
48
49
  def setup_remapper
49
50
  config = {
50
-
51
+ emergency_ungrab_keys: config_params(:emergency_ungrab_keys),
51
52
  keyboard_name_patterns: config_params(:keyboard_name_patterns),
52
53
  touchpad_name_patterns: config_params(:touchpad_name_patterns)
53
54
  }
@@ -2,6 +2,7 @@ plugin:
2
2
  inputs:
3
3
  remap_keyboard_input:
4
4
  keyboard_name_patterns: ["keyboard", "Keyboard", "KEYBOARD"]
5
+ emergency_ungrab_keys: RIGHTCTRL+LEFTCTRL
5
6
  buffers:
6
7
  keypress_buffer:
7
8
  source: remap_keyboard_input
@@ -103,9 +103,7 @@ module Fusuma
103
103
  MultiLogger.info("Reload keyboards: #{source_keyboards.map(&:device_name)}")
104
104
 
105
105
  set_trap(source_keyboards)
106
- # TODO: Extract to a configuration file or make it optional
107
- # it should stop other remappers
108
- set_emergency_ungrab_keybinds("RIGHTCTRL", "LEFTCTRL")
106
+ set_emergency_ungrab_keys(@config[:emergency_ungrab_keys])
109
107
  grab_keyboards(source_keyboards)
110
108
  rescue => e
111
109
  MultiLogger.error "Failed to reload keyboards: #{e.message}"
@@ -174,9 +172,9 @@ module Fusuma
174
172
  wait_release_all_keys(keyboard)
175
173
  begin
176
174
  keyboard.grab
177
- MultiLogger.info "Grabbed #{keyboard.device_name}"
175
+ MultiLogger.info "Grabbed keyboard: #{keyboard.device_name}"
178
176
  rescue Errno::EBUSY
179
- MultiLogger.error "Failed to grab #{keyboard.device_name}"
177
+ MultiLogger.error "Failed to grab keyboard: #{keyboard.device_name}"
180
178
  end
181
179
  end
182
180
  end
@@ -205,14 +203,31 @@ module Fusuma
205
203
  end
206
204
 
207
205
  # Emergency stop keybind for virtual keyboard
208
- def set_emergency_ungrab_keybinds(first_key, second_key)
209
- first_keycode = find_code_from_key(first_key)
210
- second_keycode = find_code_from_key(second_key)
211
- MultiLogger.info "Emergency ungrab keybind: #{first_key} + #{second_key}"
206
+ def set_emergency_ungrab_keys(keybind_string)
207
+ keybinds = keybind_string&.split("+")
208
+ # TODO: Extract to a configuration file or make it optional
209
+ # it should stop other remappers
210
+ if keybinds&.size != 2
211
+ MultiLogger.error "Invalid emergency ungrab keybinds: #{keybinds}"
212
+ MultiLogger.error "Please set two keys separated by '+'"
213
+ MultiLogger.error <<~YAML
214
+ plugin:
215
+ inputs:
216
+ remap_keyboard_input:
217
+ emergency_ungrab_keys: RIGHTCTRL+LEFTCTRL
218
+ YAML
219
+
220
+ exit 1
221
+ end
222
+
223
+ MultiLogger.info "Emergency ungrab keybind: #{keybinds[0]}+#{keybinds[1]}"
224
+
225
+ first_keycode = find_code_from_key(keybinds[0])
226
+ second_keycode = find_code_from_key(keybinds[1])
212
227
 
213
228
  @emergency_stop = lambda do |prev, current|
214
229
  if (prev&.code == first_keycode && prev.value != 0) && (current.code == second_keycode && current.value != 0)
215
- MultiLogger.info "Emergency ungrab keybind: #{first_key} + #{second_key}"
230
+ MultiLogger.info "Emergency ungrab keybind is pressed: #{keybinds[0]}+#{keybinds[1]}"
216
231
  @destroy.call
217
232
  end
218
233
  end
@@ -278,7 +293,7 @@ module Fusuma
278
293
  def released_all_keys?(device)
279
294
  # key status if all bytes are 0, the key is not pressed
280
295
  bytes = device.read_ioctl_with(Revdev::EVIOCGKEY)
281
- bytes.unpack("C*").all? { |byte| byte == 0 }
296
+ bytes.unpack("C*").all?(0)
282
297
  end
283
298
 
284
299
  def wait_release_all_keys(device, &block)
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Remap
6
- VERSION = "0.5.0"
6
+ VERSION = "0.6.0"
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.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-09-02 00:00:00.000000000 Z
11
+ date: 2024-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fusuma