fusuma 1.9.0 → 1.10.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 +4 -4
- data/CHANGELOG.md +14 -3
- data/README.md +131 -69
- data/bin/console +15 -0
- data/lib/fusuma/libinput_command.rb +33 -9
- data/lib/fusuma/plugin/filters/libinput_timeout_filter.rb +21 -0
- data/lib/fusuma/plugin/inputs/libinput_command_input.rb +19 -2
- data/lib/fusuma/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 655c4a7bf0a13e28b0334d0edbc59ec29ff69b925f4495ac7f554fd1f995503f
|
|
4
|
+
data.tar.gz: a4678c0c54de5adf34606c82f46ebb7cc0339df7e0f7fb5fbcbb2042cc6a8e6e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 69a35cbdcecd922e11b590851c3b10b42a84af66ccc8d7c02f5dba9a240747cde283bd069a778b7e503be6b0558927df3897283e7730ac3ac003c185de1a5f51
|
|
7
|
+
data.tar.gz: 0c68f21dd7647dc846e44a71bb2cff71a46bebb2551448cf0e759727e7381258efd43ca26eb00a7580410d2d9093c03a42a3af3ccea62332167468235083de8d
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v1.9.0](https://github.com/iberianpig/fusuma/tree/v1.9.0) (2020-03-30)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.8.0...v1.9.0)
|
|
6
|
+
|
|
7
|
+
**Closed issues:**
|
|
8
|
+
|
|
9
|
+
- Touchpad is filtered in listed devices [\#156](https://github.com/iberianpig/fusuma/issues/156)
|
|
10
|
+
|
|
3
11
|
## [v1.8.0](https://github.com/iberianpig/fusuma/tree/v1.8.0) (2020-03-28)
|
|
4
12
|
|
|
5
13
|
[Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.7.0...v1.8.0)
|
|
@@ -151,8 +159,8 @@
|
|
|
151
159
|
**Merged pull requests:**
|
|
152
160
|
|
|
153
161
|
- Interval and threshold specific for a trigger [\#92](https://github.com/iberianpig/fusuma/pull/92) ([irq](https://github.com/irq))
|
|
154
|
-
- Fix spelling: Elementary to elementary [\#90](https://github.com/iberianpig/fusuma/pull/90) ([ryonakano](https://github.com/ryonakano))
|
|
155
162
|
- Assigning commands [\#73](https://github.com/iberianpig/fusuma/pull/73) ([iberianpig](https://github.com/iberianpig))
|
|
163
|
+
- Relax the device name regex [\#9](https://github.com/iberianpig/fusuma/pull/9) ([z0rc](https://github.com/z0rc))
|
|
156
164
|
|
|
157
165
|
## [v0.9.2](https://github.com/iberianpig/fusuma/tree/v0.9.2) (2018-07-19)
|
|
158
166
|
|
|
@@ -284,6 +292,11 @@
|
|
|
284
292
|
- parse\_finger\_directions: undefined method `tr' for nil:NilClass \(NoMethodError\) [\#29](https://github.com/iberianpig/fusuma/issues/29)
|
|
285
293
|
- Error after upgrading to libinput 1.6.0 [\#26](https://github.com/iberianpig/fusuma/issues/26)
|
|
286
294
|
|
|
295
|
+
**Merged pull requests:**
|
|
296
|
+
|
|
297
|
+
- Fix spelling: Elementary to elementary [\#90](https://github.com/iberianpig/fusuma/pull/90) ([ryonakano](https://github.com/ryonakano))
|
|
298
|
+
- Added interval options to config. [\#36](https://github.com/iberianpig/fusuma/pull/36) ([joshuatshaffer](https://github.com/joshuatshaffer))
|
|
299
|
+
|
|
287
300
|
## [v0.2.7](https://github.com/iberianpig/fusuma/tree/v0.2.7) (2017-02-04)
|
|
288
301
|
|
|
289
302
|
[Full Changelog](https://github.com/iberianpig/fusuma/compare/v0.2.6...v0.2.7)
|
|
@@ -294,7 +307,6 @@
|
|
|
294
307
|
|
|
295
308
|
**Merged pull requests:**
|
|
296
309
|
|
|
297
|
-
- Added interval options to config. [\#36](https://github.com/iberianpig/fusuma/pull/36) ([joshuatshaffer](https://github.com/joshuatshaffer))
|
|
298
310
|
- update parser [\#30](https://github.com/iberianpig/fusuma/pull/30) ([iberianpig](https://github.com/iberianpig))
|
|
299
311
|
|
|
300
312
|
## [v0.2.6](https://github.com/iberianpig/fusuma/tree/v0.2.6) (2017-01-22)
|
|
@@ -370,7 +382,6 @@
|
|
|
370
382
|
**Merged pull requests:**
|
|
371
383
|
|
|
372
384
|
- Match left and right actions [\#10](https://github.com/iberianpig/fusuma/pull/10) ([z0rc](https://github.com/z0rc))
|
|
373
|
-
- Relax the device name regex [\#9](https://github.com/iberianpig/fusuma/pull/9) ([z0rc](https://github.com/z0rc))
|
|
374
385
|
|
|
375
386
|
## [v0.1.3](https://github.com/iberianpig/fusuma/tree/v0.1.3) (2016-11-01)
|
|
376
387
|
|
data/README.md
CHANGED
|
@@ -7,9 +7,18 @@ This gem makes your linux able to recognize swipes or pinchs and assign commands
|
|
|
7
7
|
|
|
8
8
|
襖(Fusuma) means sliding door used to partition off rooms in a Japanese house.
|
|
9
9
|
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
- Easy installation with RubyGems
|
|
13
|
+
- Defining Gestures and Actions in YAML
|
|
14
|
+
- Sensitivity setting (threshold, interval) for gesture recognition
|
|
15
|
+
- Automatic device addition for reconnecting external touchpads
|
|
16
|
+
- Extension of gesture recognition by [plugin system](https://github.com/iberianpig/fusuma/#fusuma-plugins)
|
|
17
|
+
|
|
10
18
|
## Installation
|
|
11
19
|
|
|
12
20
|
### 1. Grant permission to read the touchpad device
|
|
21
|
+
|
|
13
22
|
**IMPORTANT**: You **MUST** be a member of the **INPUT** group to read touchpad by Fusuma.
|
|
14
23
|
|
|
15
24
|
```bash
|
|
@@ -19,6 +28,7 @@ $ sudo gpasswd -a $USER input
|
|
|
19
28
|
Then, You **MUST** **REBOOT** to assign this group.
|
|
20
29
|
|
|
21
30
|
### 2. Install libinput-tools
|
|
31
|
+
|
|
22
32
|
You need `libinput` release 1.0 or later.
|
|
23
33
|
|
|
24
34
|
```bash
|
|
@@ -26,6 +36,7 @@ $ sudo apt-get install libinput-tools
|
|
|
26
36
|
```
|
|
27
37
|
|
|
28
38
|
### 3. Install Ruby
|
|
39
|
+
|
|
29
40
|
Fusuma runs in Ruby, so you must install it first.
|
|
30
41
|
|
|
31
42
|
```bash
|
|
@@ -41,6 +52,7 @@ $ sudo gem install fusuma
|
|
|
41
52
|
### 5. Install xdotool (optional)
|
|
42
53
|
|
|
43
54
|
For sending shortcuts:
|
|
55
|
+
|
|
44
56
|
```bash
|
|
45
57
|
$ sudo apt-get install xdotool
|
|
46
58
|
```
|
|
@@ -49,7 +61,6 @@ $ sudo apt-get install xdotool
|
|
|
49
61
|
|
|
50
62
|
Ensure the touchpad events are being sent to the GNOME desktop by running the following command:
|
|
51
63
|
|
|
52
|
-
|
|
53
64
|
```bash
|
|
54
65
|
$ gsettings set org.gnome.desktop.peripherals.touchpad send-events enabled
|
|
55
66
|
```
|
|
@@ -76,12 +87,25 @@ $ mkdir -p ~/.config/fusuma # create config directory
|
|
|
76
87
|
$ nano ~/.config/fusuma/config.yml # edit config file.
|
|
77
88
|
```
|
|
78
89
|
|
|
90
|
+
|
|
91
|
+
### Available gestures
|
|
92
|
+
|
|
93
|
+
* `swipe:`
|
|
94
|
+
* support `3:`, `4:` fingers
|
|
95
|
+
* support `left:`, `right:`, `up:`, `down:` directions
|
|
96
|
+
* `pinch:`
|
|
97
|
+
* support `2:`, `3:`, `4:` fingers
|
|
98
|
+
* support `in:`, `out:` directions
|
|
99
|
+
* `rotate:`
|
|
100
|
+
* support `2:`, `3:`, `4:` fingers
|
|
101
|
+
* support `clockwise:`,`counterclockwise:` directions
|
|
102
|
+
|
|
79
103
|
### About YAML Basic Syntax
|
|
80
|
-
* Comments in YAML begins with the (#) character.
|
|
81
|
-
* Comments must be separated from other tokens by whitespaces.
|
|
82
|
-
* Indentation of whitespace is used to denote structure.
|
|
83
|
-
* Tabs are not included as indentation for YAML files.
|
|
84
104
|
|
|
105
|
+
- Comments in YAML begins with the `#` character.
|
|
106
|
+
- Comments must be separated from other tokens by whitespaces.
|
|
107
|
+
- Indentation of whitespace is used to denote structure.
|
|
108
|
+
- Tabs are not included as indentation for YAML files.
|
|
85
109
|
|
|
86
110
|
### Example: Gesture Mapping for Ubuntu
|
|
87
111
|
|
|
@@ -89,46 +113,48 @@ https://github.com/iberianpig/fusuma/wiki/Ubuntu
|
|
|
89
113
|
|
|
90
114
|
```yaml
|
|
91
115
|
swipe:
|
|
92
|
-
3:
|
|
93
|
-
left:
|
|
94
|
-
command:
|
|
95
|
-
right:
|
|
96
|
-
command:
|
|
97
|
-
up:
|
|
98
|
-
command:
|
|
99
|
-
down:
|
|
100
|
-
command:
|
|
116
|
+
3:
|
|
117
|
+
left:
|
|
118
|
+
command: "xdotool key alt+Right" # History forward
|
|
119
|
+
right:
|
|
120
|
+
command: "xdotool key alt+Left" # History back
|
|
121
|
+
up:
|
|
122
|
+
command: "xdotool key super" # Activity
|
|
123
|
+
down:
|
|
124
|
+
command: "xdotool key super" # Activity
|
|
101
125
|
4:
|
|
102
|
-
left:
|
|
103
|
-
command:
|
|
104
|
-
right:
|
|
105
|
-
command:
|
|
106
|
-
up:
|
|
107
|
-
command:
|
|
108
|
-
down:
|
|
109
|
-
command:
|
|
126
|
+
left:
|
|
127
|
+
command: "xdotool key ctrl+alt+Down" # Switch to next workspace
|
|
128
|
+
right:
|
|
129
|
+
command: "xdotool key ctrl+alt+Up" # Switch to previous workspace
|
|
130
|
+
up:
|
|
131
|
+
command: "xdotool key ctrl+alt+Down" # Switch to next workspace
|
|
132
|
+
down:
|
|
133
|
+
command: "xdotool key ctrl+alt+Up" # Switch to previous workspace
|
|
110
134
|
pinch:
|
|
111
135
|
in:
|
|
112
|
-
command:
|
|
136
|
+
command: "xdotool keydown ctrl click 4 keyup ctrl" # Zoom in
|
|
113
137
|
out:
|
|
114
|
-
command:
|
|
138
|
+
command: "xdotool keydown ctrl click 5 keyup ctrl" # Zoom out
|
|
115
139
|
```
|
|
116
140
|
|
|
117
141
|
### More Example of config.yml
|
|
118
|
-
The following wiki pages can be edited by everyone.
|
|
119
142
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
143
|
+
The following wiki pages can be edited by everyone.
|
|
144
|
+
|
|
145
|
+
- [Ubuntu](https://github.com/iberianpig/fusuma/wiki/Ubuntu)
|
|
146
|
+
- [elementary OS](https://github.com/iberianpig/fusuma/wiki/elementary-OS)
|
|
147
|
+
- [i3](https://github.com/iberianpig/fusuma/wiki/i3)
|
|
148
|
+
- [KDE to mimic MacOS](https://github.com/iberianpig/fusuma/wiki/KDE-to-mimic-MacOS)
|
|
149
|
+
- [POP OS with Cinnamon](https://github.com/iberianpig/fusuma/wiki/POP-OS-with-Cinnamon)
|
|
150
|
+
- [PopOS Default Gnome](https://github.com/iberianpig/fusuma/wiki/PopOS-Default-Gnome)
|
|
151
|
+
- [Ubuntu OS to mimic Mac a little](https://github.com/iberianpig/fusuma/wiki/Ubuntu-OS-to-mimic-Mac-a-little)
|
|
127
152
|
|
|
128
153
|
If you have a nice configuration, please share `~/.config/fusuma/config.yml` with everyone.
|
|
129
154
|
|
|
130
155
|
### Threshold and Interval
|
|
131
|
-
|
|
156
|
+
|
|
157
|
+
if `command:` properties are blank, the swipe/pinch doesn't execute command.
|
|
132
158
|
|
|
133
159
|
`threshold:` is sensitivity to swipe/pinch. Default value is 1.
|
|
134
160
|
If the swipe's threshold is `0.5`, shorten swipe-length by half.
|
|
@@ -136,13 +162,51 @@ If the swipe's threshold is `0.5`, shorten swipe-length by half.
|
|
|
136
162
|
`interval:` is delay between swipes/pinches. Default value is 1.
|
|
137
163
|
If the swipe's interval is `0.5`, shorten swipe-interval by half to recognize a next swipe.
|
|
138
164
|
|
|
139
|
-
###
|
|
140
|
-
|
|
141
|
-
|
|
165
|
+
### Example of `threshold:` / `interval:` settings
|
|
166
|
+
|
|
167
|
+
```yaml
|
|
168
|
+
swipe:
|
|
169
|
+
3:
|
|
170
|
+
left:
|
|
171
|
+
command: 'xdotool key alt+Right' # threshold: 0.5, interval: 0.75
|
|
172
|
+
threshold: 0.5
|
|
173
|
+
right:
|
|
174
|
+
command: 'xdotool key alt+Left' # threshold: 0.5, interval: 0.75
|
|
175
|
+
threshold: 0.5
|
|
176
|
+
up:
|
|
177
|
+
command: 'xdotool key super' # threshold: 1, interval: 0.75
|
|
178
|
+
down:
|
|
179
|
+
command: 'xdotool key super' # threshold: 1, interval: 0.75
|
|
180
|
+
pinch:
|
|
181
|
+
2:
|
|
182
|
+
in:
|
|
183
|
+
command: "xdotool keydown ctrl click 4 keyup ctrl" # threshold: 0.5, interval: 0.5
|
|
184
|
+
2:
|
|
185
|
+
out:
|
|
186
|
+
command: "xdotool keydown ctrl click 5 keyup ctrl" # threshold: 0.5, interval: 0.5
|
|
187
|
+
|
|
188
|
+
threshold:
|
|
189
|
+
pinch: 0.5
|
|
190
|
+
|
|
191
|
+
interval:
|
|
192
|
+
swipe: 0.75
|
|
193
|
+
pinch: 0.5
|
|
194
|
+
```
|
|
142
195
|
|
|
143
|
-
|
|
144
|
-
|
|
196
|
+
There are three priorities of `threshold:` and `interval:`.
|
|
197
|
+
The individual `threshold:` and `interval:` settings (under "direction") have a higher priority than the global one (under "root")
|
|
145
198
|
|
|
199
|
+
1. child elements in the direction (left/right/down/up → threshold/interval)
|
|
200
|
+
1. root child elements (threshold/interval → swipe/pinch)
|
|
201
|
+
1. default value (= 1)
|
|
202
|
+
|
|
203
|
+
### `command:` property for assigning commands
|
|
204
|
+
|
|
205
|
+
On fusuma version 0.4 `command:` property is available!
|
|
206
|
+
You can assign any command each gestures.
|
|
207
|
+
|
|
208
|
+
**`shortcut:` property is deprecated**, **it was removed on fusuma version 1.0**.
|
|
209
|
+
You need to replace to `command:` property.
|
|
146
210
|
|
|
147
211
|
```diff
|
|
148
212
|
swipe:
|
|
@@ -157,35 +221,35 @@ swipe:
|
|
|
157
221
|
|
|
158
222
|
### About xdotool
|
|
159
223
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
* Available keys' hint (https://github.com/jordansissel/xdotool/issues/212#issuecomment-406156157)
|
|
224
|
+
- xdotool manual (https://github.com/jordansissel/xdotool/blob/master/xdotool.pod)
|
|
225
|
+
- Available keys' hint (https://github.com/jordansissel/xdotool/issues/212#issuecomment-406156157)
|
|
163
226
|
|
|
164
227
|
**NOTE: xdotool has some issues**
|
|
165
228
|
|
|
166
|
-
|
|
229
|
+
- Gestures take a few seconds to react(https://github.com/iberianpig/fusuma/issues/113)
|
|
167
230
|
|
|
168
231
|
#### Alternatives to xdotool
|
|
169
232
|
|
|
170
|
-
|
|
171
|
-
* Emulates keyboard events
|
|
172
|
-
* Wayland compatible
|
|
233
|
+
- [fusuma-plugin-sendkey](https://github.com/iberianpig/fusuma-plugin-sendkey)
|
|
173
234
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
235
|
+
- Emulates keyboard events
|
|
236
|
+
- Low latency
|
|
237
|
+
- Wayland compatible
|
|
177
238
|
|
|
178
|
-
|
|
239
|
+
- `xte`
|
|
240
|
+
- [xte(1) - Linux man page](https://linux.die.net/man/1/xte)
|
|
241
|
+
- install with `sudo apt xautomation`
|
|
179
242
|
|
|
180
|
-
|
|
181
|
-
* `-d`, `--daemon` : Daemonize process
|
|
182
|
-
* `-l`, `--list-devices` : List available devices
|
|
183
|
-
* `-v`, `--verbose` : Show details about the results of running fusuma
|
|
184
|
-
* `--device="Device name"` : Open the given device only (DEPRECATED)
|
|
185
|
-
* `--version` : Show fusuma version
|
|
243
|
+
## Options
|
|
186
244
|
|
|
187
|
-
|
|
245
|
+
- `-c`, `--config=path/to/file` : Use an alternative config file
|
|
246
|
+
- `-d`, `--daemon` : Daemonize process
|
|
247
|
+
- `-l`, `--list-devices` : List available devices
|
|
248
|
+
- `-v`, `--verbose` : Show details about the results of running fusuma
|
|
249
|
+
- `--device="Device name"` : Open the given device only (DEPRECATED)
|
|
250
|
+
- `--version` : Show fusuma version
|
|
188
251
|
|
|
252
|
+
### Specify touchpads by device name
|
|
189
253
|
Set the following options to recognize multi-touch gestures only for the specified touchpad device.
|
|
190
254
|
|
|
191
255
|
```yaml
|
|
@@ -193,10 +257,12 @@ plugin:
|
|
|
193
257
|
filters:
|
|
194
258
|
libinput_device_filter:
|
|
195
259
|
keep_device_names:
|
|
196
|
-
- "
|
|
260
|
+
- "BUILT-IN TOUCHPAD NAME"
|
|
261
|
+
- "EXTERNAL TOUCHPAD NAME"
|
|
197
262
|
```
|
|
198
263
|
|
|
199
264
|
## Autostart (gnome-session-properties)
|
|
265
|
+
|
|
200
266
|
1. Check the path where you installed fusuma with `$ which fusuma`
|
|
201
267
|
2. Open `$ gnome-session-properties`
|
|
202
268
|
3. Add Fusuma and enter the location where the above path was checked in the command input field
|
|
@@ -206,9 +272,9 @@ plugin:
|
|
|
206
272
|
|
|
207
273
|
Following features are provided as plugins.
|
|
208
274
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
275
|
+
- Adding new gestures or combinations
|
|
276
|
+
- Features for specific Linux distributions
|
|
277
|
+
- Setting different gestures per applications
|
|
212
278
|
|
|
213
279
|
### Installation of fusuma plugins
|
|
214
280
|
|
|
@@ -219,7 +285,7 @@ Fusuma plugins are provided with the `fusuma-plugin-XXXXX` naming convention and
|
|
|
219
285
|
### Available plugins
|
|
220
286
|
|
|
221
287
|
| Name | About |
|
|
222
|
-
|
|
288
|
+
| ------------------------------------------------------------------------------ | --------------------------------------------- |
|
|
223
289
|
| [fusuma-plugin-sendkey](https://github.com/iberianpig/fusuma-plugin-sendkey) | Emulates keyboard events |
|
|
224
290
|
| [fusuma-plugin-wmctrl](https://github.com/iberianpig/fusuma-plugin-wmctrl) | Manages Window and Workspace |
|
|
225
291
|
| [fusuma-plugin-keypress](https://github.com/iberianpig/fusuma-plugin-keypress) | Detects gestures while pressing multiple keys |
|
|
@@ -227,9 +293,8 @@ Fusuma plugins are provided with the `fusuma-plugin-XXXXX` naming convention and
|
|
|
227
293
|
|
|
228
294
|
## Tutorial Video
|
|
229
295
|
|
|
230
|
-
[](http://www.youtube.com/watch?v=bn11Iwvf29I "Multitouch Touchpad Gestures in Linux with Fusuma")
|
|
231
|
-
[Multitouch Touchpad Gestures in Linux with Fusuma](http://www.youtube.com/watch?v=bn11Iwvf29I) by [Eric Adams](https://www.youtube.com/user/igster75)
|
|
232
|
-
|
|
296
|
+
[](http://www.youtube.com/watch?v=bn11Iwvf29I "Multitouch Touchpad Gestures in Linux with Fusuma")
|
|
297
|
+
[Multitouch Touchpad Gestures in Linux with Fusuma](http://www.youtube.com/watch?v=bn11Iwvf29I) by [Eric Adams](https://www.youtube.com/user/igster75)
|
|
233
298
|
|
|
234
299
|
## Support
|
|
235
300
|
|
|
@@ -237,16 +302,13 @@ I'm a Freelance Engineer in Japan and working on these products after finishing
|
|
|
237
302
|
Currently, my open-source contribution times is not enough.
|
|
238
303
|
If you like my work and want to contribute and become a sponsor, I will be able to focus on my projects.
|
|
239
304
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
305
|
+
- [GitHub Sponsors](https://github.com/sponsors/iberianpig) (Zero fee!)
|
|
306
|
+
- [Patreon](https://www.patreon.com/iberianpig)
|
|
243
307
|
|
|
244
308
|
## Contributing
|
|
245
309
|
|
|
246
310
|
Bug reports and pull requests are welcome on GitHub at https://github.com/iberianpig/fusuma. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
|
247
311
|
|
|
248
|
-
|
|
249
312
|
## License
|
|
250
313
|
|
|
251
314
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
|
252
|
-
|
data/bin/console
CHANGED
|
@@ -8,5 +8,20 @@ require 'fusuma'
|
|
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
|
9
9
|
|
|
10
10
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
11
|
+
|
|
12
|
+
def reload!(print = true)
|
|
13
|
+
puts 'Reloading ...' if print
|
|
14
|
+
# Main project directory.
|
|
15
|
+
root_dir = File.expand_path('..', __dir__)
|
|
16
|
+
# Directories within the project that should be reloaded.
|
|
17
|
+
reload_dirs = %w[lib]
|
|
18
|
+
# Loop through and reload every file in all relevant project directories.
|
|
19
|
+
reload_dirs.each do |dir|
|
|
20
|
+
Dir.glob("#{root_dir}/#{dir}/**/*.rb").each { |f| load(f) }
|
|
21
|
+
end
|
|
22
|
+
# Return true when complete.
|
|
23
|
+
true
|
|
24
|
+
end
|
|
25
|
+
|
|
11
26
|
require 'pry'
|
|
12
27
|
Pry.start
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'open3'
|
|
4
|
+
require 'timeout'
|
|
4
5
|
|
|
5
6
|
module Fusuma
|
|
6
7
|
# Execute libinput command
|
|
7
8
|
class LibinputCommand
|
|
8
|
-
def initialize(libinput_options: [])
|
|
9
|
+
def initialize(libinput_options: [], commands: {})
|
|
10
|
+
@debug_events_command = commands[:debug_events_command]
|
|
11
|
+
@list_devices_command = commands[:list_devices_command]
|
|
9
12
|
@libinput_options = libinput_options
|
|
10
13
|
end
|
|
11
14
|
|
|
@@ -13,6 +16,9 @@ module Fusuma
|
|
|
13
16
|
# use `libinput list-devices` and `libinput debug-events` from 1.8.
|
|
14
17
|
NEW_CLI_OPTION_VERSION = 1.8
|
|
15
18
|
|
|
19
|
+
DEFAULT_WAIT_TIME = 0.3
|
|
20
|
+
TIMEOUT_MESSAGE = 'LIBINPUT TIMEOUT'
|
|
21
|
+
|
|
16
22
|
# @return [Boolean]
|
|
17
23
|
def new_cli_option_available?
|
|
18
24
|
Gem::Version.new(version) >= Gem::Version.new(NEW_CLI_OPTION_VERSION)
|
|
@@ -35,12 +41,17 @@ module Fusuma
|
|
|
35
41
|
|
|
36
42
|
# @yieldparam [String] gives a line in libinput debug-events output to the block
|
|
37
43
|
def debug_events
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
+
MultiLogger.debug(debug_events: debug_events_with_options)
|
|
45
|
+
Open3.popen3(debug_events_with_options) do |_i, o, _e, _w|
|
|
46
|
+
loop do
|
|
47
|
+
line = begin
|
|
48
|
+
Timeout.timeout(wait_time) do
|
|
49
|
+
o.readline.chomp
|
|
50
|
+
end
|
|
51
|
+
rescue Timeout::Error
|
|
52
|
+
TIMEOUT_MESSAGE
|
|
53
|
+
end
|
|
54
|
+
yield(line)
|
|
44
55
|
end
|
|
45
56
|
end
|
|
46
57
|
end
|
|
@@ -59,7 +70,9 @@ module Fusuma
|
|
|
59
70
|
end
|
|
60
71
|
|
|
61
72
|
def list_devices_command
|
|
62
|
-
if
|
|
73
|
+
if @list_devices_command
|
|
74
|
+
@list_devices_command
|
|
75
|
+
elsif new_cli_option_available?
|
|
63
76
|
'libinput list-devices'
|
|
64
77
|
else
|
|
65
78
|
'libinput-list-devices'
|
|
@@ -67,15 +80,26 @@ module Fusuma
|
|
|
67
80
|
end
|
|
68
81
|
|
|
69
82
|
def debug_events_command
|
|
70
|
-
if
|
|
83
|
+
if @debug_events_command
|
|
84
|
+
@debug_events_command
|
|
85
|
+
elsif new_cli_option_available?
|
|
71
86
|
'libinput debug-events'
|
|
72
87
|
else
|
|
73
88
|
'libinput-debug-events'
|
|
74
89
|
end
|
|
75
90
|
end
|
|
76
91
|
|
|
92
|
+
def debug_events_with_options
|
|
93
|
+
prefix = 'stdbuf -oL --'
|
|
94
|
+
"#{prefix} #{debug_events_command} #{@libinput_options.join(' ')}".strip
|
|
95
|
+
end
|
|
96
|
+
|
|
77
97
|
private
|
|
78
98
|
|
|
99
|
+
def wait_time
|
|
100
|
+
DEFAULT_WAIT_TIME
|
|
101
|
+
end
|
|
102
|
+
|
|
79
103
|
# which in ruby: Checking if program exists in $PATH from ruby
|
|
80
104
|
# (https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby)
|
|
81
105
|
# Cross-platform way of finding an executable in the $PATH.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative './filter.rb'
|
|
4
|
+
require_relative '../../libinput_command.rb'
|
|
5
|
+
|
|
6
|
+
module Fusuma
|
|
7
|
+
module Plugin
|
|
8
|
+
module Filters
|
|
9
|
+
# Filter device log
|
|
10
|
+
class LibinputTimeoutFilter < Filter
|
|
11
|
+
DEFAULT_SOURCE = 'libinput_command_input'
|
|
12
|
+
|
|
13
|
+
# @return [TrueClass] when keeping it
|
|
14
|
+
# @return [FalseClass] when discarding it
|
|
15
|
+
def keep?(record)
|
|
16
|
+
record.to_s == LibinputCommand::TIMEOUT_MESSAGE
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative '../../libinput_command.rb'
|
|
3
4
|
require_relative './input.rb'
|
|
4
5
|
|
|
5
6
|
module Fusuma
|
|
@@ -13,12 +14,20 @@ module Fusuma
|
|
|
13
14
|
'enable-dwt': [TrueClass, FalseClass],
|
|
14
15
|
'enable-tap': [TrueClass, FalseClass],
|
|
15
16
|
'show-keycodes': [TrueClass, FalseClass],
|
|
16
|
-
'verbose': [TrueClass, FalseClass]
|
|
17
|
+
'verbose': [TrueClass, FalseClass],
|
|
18
|
+
'libinput-debug-events': [String],
|
|
19
|
+
'libinput-list-devices': [String]
|
|
17
20
|
}
|
|
18
21
|
end
|
|
19
22
|
|
|
20
23
|
def run
|
|
21
|
-
LibinputCommand.new(
|
|
24
|
+
LibinputCommand.new(
|
|
25
|
+
libinput_options: libinput_options,
|
|
26
|
+
commands: {
|
|
27
|
+
debug_events_command: debug_events_command,
|
|
28
|
+
list_devices_command: list_devices_command
|
|
29
|
+
}
|
|
30
|
+
).debug_events do |line|
|
|
22
31
|
yield event(record: line)
|
|
23
32
|
end
|
|
24
33
|
end
|
|
@@ -37,6 +46,14 @@ module Fusuma
|
|
|
37
46
|
verbose
|
|
38
47
|
].compact
|
|
39
48
|
end
|
|
49
|
+
|
|
50
|
+
def debug_events_command
|
|
51
|
+
config_params(:'libinput-debug-events')
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def list_devices_command
|
|
55
|
+
config_params(:'libinput-list-devices')
|
|
56
|
+
end
|
|
40
57
|
end
|
|
41
58
|
end
|
|
42
59
|
end
|
data/lib/fusuma/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fusuma
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- iberianpig
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-05-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -218,6 +218,7 @@ files:
|
|
|
218
218
|
- lib/fusuma/plugin/executors/executor.rb
|
|
219
219
|
- lib/fusuma/plugin/filters/filter.rb
|
|
220
220
|
- lib/fusuma/plugin/filters/libinput_device_filter.rb
|
|
221
|
+
- lib/fusuma/plugin/filters/libinput_timeout_filter.rb
|
|
221
222
|
- lib/fusuma/plugin/inputs/input.rb
|
|
222
223
|
- lib/fusuma/plugin/inputs/libinput_command_input.rb
|
|
223
224
|
- lib/fusuma/plugin/manager.rb
|