fusuma 1.8.0 → 1.11.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: a67f3ff722cd13d72966f7be8d0292485fcbdc3e72e83914222f762deb4ab37a
4
- data.tar.gz: c315fe56fd0d005dd8629ef39cb4405b53bf2e98cba6c1517de750415cf9dd7a
3
+ metadata.gz: bd9b74b06494e85c0caf6250e0dfeed80c37187098982b4f32c2dd8e727732fb
4
+ data.tar.gz: eb8c3d19693570b77b26519d7296856480342eec3eba0205ed970e01a4b46a16
5
5
  SHA512:
6
- metadata.gz: a76b5174dd2a568db4b391797fbcb1c3e239a041f69c9399b49969de81b072b3ebf09829182e30829231ca38f52ff84c6966d807b1616eb3ccce6c43e564ad7a
7
- data.tar.gz: 811f35941e58962311d9d67448b25d422760f7779678f377c3cbd35b4e89dc197dfb2ee237ac033e654312f1c25261bc8dc1d00fb2d466b3594b4b348fd66b04
6
+ metadata.gz: abe0b55ab9f332d3f67c423b0890135973d57a4cf8b7d6fafc7b01b44874c2489b6752fcb7a66d0b0a625c612879e35ce7d11b6a3b5ce485711b84e8f45e5279
7
+ data.tar.gz: 323c35769c6f9827f8a94532a4dd10a25facf6bc6858d85b2b6540a6d78064e9003d4ccb83f4914f214aa6523cea8878b5f63abbe113211b1b0900ce0e203521
@@ -0,0 +1,9 @@
1
+ Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:
2
+
3
+ - [ ] Make sure to open an issue as a [bug/issue](https://github.com/iberianpig/fusuma/issues) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea.
4
+
5
+ - [ ] Follow the instructions in [CONTRIBUTING](https://github.com/iberianpig/fusuma/blob/master/CONTRIBUTING.md). Most importantly, ensure the tests and linter pass by running `bundle exec rspec` and `bundle exec rubocop`.
6
+
7
+ - [ ] Update code documentation if necessary.
8
+
9
+ closes: #<issue_number_goes_here>
@@ -14,3 +14,24 @@ Layout/LineLength:
14
14
  Exclude:
15
15
  - "fusuma.gemspec"
16
16
  - "**/*_spec.rb"
17
+
18
+ # For rubocop < 1.0.0
19
+ Style/HashEachMethods:
20
+ Enabled: true
21
+
22
+ # For rubocop < 1.0.0
23
+ Style/HashTransformKeys:
24
+ Enabled: true
25
+
26
+ # For rubocop < 1.0.0
27
+ Style/HashTransformValues:
28
+ Enabled: true
29
+
30
+ # For compatible ruby 2.3
31
+ Style/RedundantBegin:
32
+ Enabled: false
33
+
34
+ Lint/RaiseException:
35
+ Enabled: true
36
+ Lint/StructNewOverride:
37
+ Enabled: true
@@ -1,8 +1,68 @@
1
1
  # Changelog
2
2
 
3
- ## [Unreleased](https://github.com/iberianpig/fusuma/tree/HEAD)
3
+ ## [v1.11.0](https://github.com/iberianpig/fusuma/tree/v1.11.0) (2020-07-25)
4
4
 
5
- [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.7.0...HEAD)
5
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.10.2...v1.11.0)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Feature/yaml check [\#193](https://github.com/iberianpig/fusuma/pull/193) ([iberianpig](https://github.com/iberianpig))
10
+
11
+ ## [v1.10.2](https://github.com/iberianpig/fusuma/tree/v1.10.2) (2020-07-23)
12
+
13
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.10.1...v1.10.2)
14
+
15
+ **Closed issues:**
16
+
17
+ - Gestures from libinput are not recognised [\#192](https://github.com/iberianpig/fusuma/issues/192)
18
+ - Vertical 4 finger swipe and rotation not recognised [\#189](https://github.com/iberianpig/fusuma/issues/189)
19
+ - Pinch in gesture not recognized in Popos 20.04 \(Ubuntu 20.04\) [\#184](https://github.com/iberianpig/fusuma/issues/184)
20
+ - Fusuma crashes while switching between workspaces on KDE Plasma [\#181](https://github.com/iberianpig/fusuma/issues/181)
21
+ - Window Prev/Next moves desktop environment when no active window [\#178](https://github.com/iberianpig/fusuma/issues/178)
22
+ - Add ydotool to docs. [\#177](https://github.com/iberianpig/fusuma/issues/177)
23
+ - Can't use alternative .config.yml [\#176](https://github.com/iberianpig/fusuma/issues/176)
24
+ - Fusuma stops working sometimes [\#175](https://github.com/iberianpig/fusuma/issues/175)
25
+ - Pinch \(2, in\) does not work. [\#174](https://github.com/iberianpig/fusuma/issues/174)
26
+
27
+ **Merged pull requests:**
28
+
29
+ - 177. Add ydootool to docs. [\#179](https://github.com/iberianpig/fusuma/pull/179) ([mattdemarillac](https://github.com/mattdemarillac))
30
+
31
+ ## [v1.10.1](https://github.com/iberianpig/fusuma/tree/v1.10.1) (2020-05-15)
32
+
33
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.10.0...v1.10.1)
34
+
35
+ **Closed issues:**
36
+
37
+ - Some gestures are not always recognized [\#172](https://github.com/iberianpig/fusuma/issues/172)
38
+ - Unable to reprogram Pinch [\#171](https://github.com/iberianpig/fusuma/issues/171)
39
+
40
+ ## [v1.10.0](https://github.com/iberianpig/fusuma/tree/v1.10.0) (2020-05-04)
41
+
42
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.9.0...v1.10.0)
43
+
44
+ **Closed issues:**
45
+
46
+ - Each action took about 2 secs to react [\#167](https://github.com/iberianpig/fusuma/issues/167)
47
+ - ruby2.7 [\#164](https://github.com/iberianpig/fusuma/issues/164)
48
+ - Zoom-in not really usable on Vivaldi [\#159](https://github.com/iberianpig/fusuma/issues/159)
49
+ - Reversed directions with no alternatives [\#133](https://github.com/iberianpig/fusuma/issues/133)
50
+
51
+ **Merged pull requests:**
52
+
53
+ - Implement timeout event [\#169](https://github.com/iberianpig/fusuma/pull/169) ([iberianpig](https://github.com/iberianpig))
54
+
55
+ ## [v1.9.0](https://github.com/iberianpig/fusuma/tree/v1.9.0) (2020-03-30)
56
+
57
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.8.0...v1.9.0)
58
+
59
+ **Closed issues:**
60
+
61
+ - Touchpad is filtered in listed devices [\#156](https://github.com/iberianpig/fusuma/issues/156)
62
+
63
+ ## [v1.8.0](https://github.com/iberianpig/fusuma/tree/v1.8.0) (2020-03-28)
64
+
65
+ [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.7.0...v1.8.0)
6
66
 
7
67
  **Implemented enhancements:**
8
68
 
@@ -12,6 +72,11 @@
12
72
 
13
73
  - When xdotool acts crazy. Workaround should be clearly informed. [\#146](https://github.com/iberianpig/fusuma/issues/146)
14
74
 
75
+ **Merged pull requests:**
76
+
77
+ - Fix cops [\#158](https://github.com/iberianpig/fusuma/pull/158) ([iberianpig](https://github.com/iberianpig))
78
+ - Add ruby 2.7 to .travis.yml [\#157](https://github.com/iberianpig/fusuma/pull/157) ([iberianpig](https://github.com/iberianpig))
79
+
15
80
  ## [v1.7.0](https://github.com/iberianpig/fusuma/tree/v1.7.0) (2020-03-25)
16
81
 
17
82
  [Full Changelog](https://github.com/iberianpig/fusuma/compare/v1.6.0...v1.7.0)
@@ -0,0 +1,72 @@
1
+ # Contributing to Fusuma
2
+
3
+ 1. Fork the repo, develop and test your code changes.
4
+ 2. Send a pull request.
5
+
6
+ ## Setup
7
+
8
+ In order to use the Fusuma console and run the project's tests,
9
+ there is a small amount of setup:
10
+
11
+ 1. Install Ruby. Fusuma requires Ruby 2.3+. You may choose to
12
+ manage your Ruby and gem installations with [RVM](https://rvm.io/),
13
+ [rbenv](https://github.com/rbenv/rbenv), or
14
+ [chruby](https://github.com/postmodern/chruby).
15
+
16
+ 2. Install [Bundler](http://bundler.io/).
17
+
18
+ ```sh
19
+ $ gem install bundler
20
+ ```
21
+
22
+ 3. Install the top-level project dependencies.
23
+
24
+ ```sh
25
+ $ bundle install
26
+ ```
27
+
28
+ ## Fusuma Tests
29
+
30
+ Tests are very important part of Fusuma. All contributions
31
+ should include tests that ensure the contributed code behaves as expected.
32
+
33
+ To run tests:
34
+
35
+ ``` sh
36
+ $ bundle exec rspec
37
+ ```
38
+
39
+ ### Fusuma Document
40
+
41
+ The project uses [YARD](https://github.com/lsegal/yard) for generating documentation.
42
+
43
+ If you're not sure about YARD, please refer to [YARD cheatsheet](https://gist.github.com/phansch/db18a595d2f5f1ef16646af72fe1fb0e).
44
+
45
+ To run the Fusuma documentation tests:
46
+
47
+ ``` sh
48
+ $ bundle exec yard --fail-on-warning
49
+ ```
50
+
51
+ To check Fusuma documents with running local server:
52
+
53
+ ```
54
+ $ bundle exec yard server
55
+ ```
56
+ Then open (http://localhost:8808/)
57
+
58
+ ## Coding Style
59
+
60
+ Please follow the established coding style in the library.
61
+ The style is is largely based on [The Ruby Style Guide](https://github.com/bbatsov/ruby-style-guide).
62
+
63
+ You can check your code against these rules by running Rubocop like so:
64
+
65
+ ```sh
66
+ $ bundle exec rubocop
67
+ ```
68
+
69
+ ## Code of Conduct
70
+
71
+ Please note that this project is released with a Contributor Code of Conduct. By
72
+ participating in this project you agree to abide by its terms.
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Fusuma [![Gem Version](https://badge.fury.io/rb/fusuma.svg)](https://badge.fury.io/rb/fusuma) [![Build Status](https://travis-ci.com/iberianpig/fusuma.svg?branch=master)](https://travis-ci.com/iberianpig/fusuma)
1
+ # Fusuma [![Gem Version](https://badge.fury.io/rb/fusuma.svg)](https://badge.fury.io/rb/fusuma) [![Build Status](https://travis-ci.com/iberianpig/fusuma.svg?branch=master)](https://travis-ci.com/iberianpig/fusuma) [![Coverage Status](https://coveralls.io/repos/github/iberianpig/fusuma/badge.svg?branch=master)](https://coveralls.io/github/iberianpig/fusuma?branch=master) [![Inline docs](http://inch-ci.org/github/iberianpig/fusuma.svg?branch=master)](http://inch-ci.org/github/iberianpig/fusuma)
2
2
 
3
3
  Fusuma is multitouch gesture recognizer.
4
4
  This gem makes your linux able to recognize swipes or pinchs and assign commands to them.
@@ -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: 'xdotool key alt+Right'
95
- right:
96
- command: 'xdotool key alt+Left'
97
- up:
98
- command: 'xdotool key super'
99
- down:
100
- command: 'xdotool key super'
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: 'xdotool key ctrl+alt+Down'
104
- right:
105
- command: 'xdotool key ctrl+alt+Up'
106
- up:
107
- command: 'xdotool key ctrl+alt+Down'
108
- down:
109
- command: 'xdotool key ctrl+alt+Up'
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: 'xdotool keydown ctrl click 4 keyup ctrl'
136
+ command: "xdotool keydown ctrl click 4 keyup ctrl" # Zoom in
113
137
  out:
114
- command: 'xdotool keydown ctrl click 5 keyup ctrl'
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
- * [Ubuntu](https://github.com/iberianpig/fusuma/wiki/Ubuntu)
121
- * [elementary OS](https://github.com/iberianpig/fusuma/wiki/elementary-OS)
122
- * [i3](https://github.com/iberianpig/fusuma/wiki/i3)
123
- * [KDE to mimic MacOS](https://github.com/iberianpig/fusuma/wiki/KDE-to-mimic-MacOS)
124
- * [POP OS with Cinnamon](https://github.com/iberianpig/fusuma/wiki/POP-OS-with-Cinnamon)
125
- * [PopOS Default Gnome](https://github.com/iberianpig/fusuma/wiki/PopOS-Default-Gnome)
126
- * [Ubuntu OS to mimic Mac a little](https://github.com/iberianpig/fusuma/wiki/Ubuntu-OS-to-mimic-Mac-a-little)
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
- if `command: ` properties are blank, the swipe/pinch doesn't execute command.
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,50 @@ 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
- ### `command: ` property for assigning commands
140
- On fusuma version 0.4 `command: ` property is available!
141
- You can assign any command each gestures.
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
+ out:
185
+ command: "xdotool keydown ctrl click 5 keyup ctrl" # threshold: 0.5, interval: 0.5
186
+
187
+ threshold:
188
+ pinch: 0.5
189
+
190
+ interval:
191
+ swipe: 0.75
192
+ pinch: 0.5
193
+ ```
194
+
195
+ There are three priorities of `threshold:` and `interval:`.
196
+ The individual `threshold:` and `interval:` settings (under "direction") have a higher priority than the global one (under "root")
197
+
198
+ 1. child elements in the direction (left/right/down/up → threshold/interval)
199
+ 1. root child elements (threshold/interval → swipe/pinch)
200
+ 1. default value (= 1)
142
201
 
143
- **`shortcut: ` property is deprecated**, **it was removed on fusuma version 1.0**.
144
- You need to replace to `command: ` property.
202
+ ### `command:` property for assigning commands
145
203
 
204
+ On fusuma version 0.4 `command:` property is available!
205
+ You can assign any command each gestures.
206
+
207
+ **`shortcut:` property is deprecated**, **it was removed on fusuma version 1.0**.
208
+ You need to replace to `command:` property.
146
209
 
147
210
  ```diff
148
211
  swipe:
@@ -157,34 +220,53 @@ swipe:
157
220
 
158
221
  ### About xdotool
159
222
 
160
-
161
- * xdotool manual (https://github.com/jordansissel/xdotool/blob/master/xdotool.pod)
162
- * Available keys' hint (https://github.com/jordansissel/xdotool/issues/212#issuecomment-406156157)
223
+ - xdotool manual (https://github.com/jordansissel/xdotool/blob/master/xdotool.pod)
224
+ - Available keys' hint (https://github.com/jordansissel/xdotool/issues/212#issuecomment-406156157)
163
225
 
164
226
  **NOTE: xdotool has some issues**
165
227
 
166
- * Gestures take a few seconds to react(https://github.com/iberianpig/fusuma/issues/113)
228
+ - Gestures take a few seconds to react(https://github.com/iberianpig/fusuma/issues/113)
167
229
 
168
230
  #### Alternatives to xdotool
169
231
 
170
- * [fusuma-plugin-sendkey](https://github.com/iberianpig/fusuma-plugin-sendkey)
171
- * Emulates keyboard events
172
- * Wayland compatible
232
+ - [fusuma-plugin-sendkey](https://github.com/iberianpig/fusuma-plugin-sendkey)
233
+
234
+ - Emulates keyboard events
235
+ - Low latency
236
+ - Wayland compatible
173
237
 
174
- * `xte`
175
- * [xte(1) - Linux man page](https://linux.die.net/man/1/xte)
176
- * install with `sudo apt xautomation`
238
+ - `xte`
239
+ - [xte(1) - Linux man page](https://linux.die.net/man/1/xte)
240
+ - install with `sudo apt xautomation`
241
+
242
+ - [ydotool](https://github.com/ReimuNotMoe/ydotool)
243
+ - Wayland compatible
244
+ - Needs more maintainers.
245
+ - Requires only replacing `xdotool` with `ydotool` in in fusuma conf.
177
246
 
178
247
  ## Options
179
248
 
180
- * `-c`, `--config=path/to/file` : Use an alternative config file
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
185
- * `--version` : Show fusuma version
249
+ - `-c`, `--config=path/to/file` : Use an alternative config file
250
+ - `-d`, `--daemon` : Daemonize process
251
+ - `-l`, `--list-devices` : List available devices
252
+ - `-v`, `--verbose` : Show details about the results of running fusuma
253
+ - `--device="Device name"` : Open the given device only (DEPRECATED)
254
+ - `--version` : Show fusuma version
255
+
256
+ ### Specify touchpads by device name
257
+ Set the following options to recognize multi-touch gestures only for the specified touchpad device.
258
+
259
+ ```yaml
260
+ plugin:
261
+ filters:
262
+ libinput_device_filter:
263
+ keep_device_names:
264
+ - "BUILT-IN TOUCHPAD NAME"
265
+ - "EXTERNAL TOUCHPAD NAME"
266
+ ```
186
267
 
187
268
  ## Autostart (gnome-session-properties)
269
+
188
270
  1. Check the path where you installed fusuma with `$ which fusuma`
189
271
  2. Open `$ gnome-session-properties`
190
272
  3. Add Fusuma and enter the location where the above path was checked in the command input field
@@ -194,9 +276,9 @@ swipe:
194
276
 
195
277
  Following features are provided as plugins.
196
278
 
197
- * Adding new gestures or combinations
198
- * Features for specific Linux distributions
199
- * Setting different gestures per applications
279
+ - Adding new gestures or combinations
280
+ - Features for specific Linux distributions
281
+ - Setting different gestures per applications
200
282
 
201
283
  ### Installation of fusuma plugins
202
284
 
@@ -207,7 +289,7 @@ Fusuma plugins are provided with the `fusuma-plugin-XXXXX` naming convention and
207
289
  ### Available plugins
208
290
 
209
291
  | Name | About |
210
- |--------------------------------------------------------------------------------|-----------------------------------------------|
292
+ | ------------------------------------------------------------------------------ | --------------------------------------------- |
211
293
  | [fusuma-plugin-sendkey](https://github.com/iberianpig/fusuma-plugin-sendkey) | Emulates keyboard events |
212
294
  | [fusuma-plugin-wmctrl](https://github.com/iberianpig/fusuma-plugin-wmctrl) | Manages Window and Workspace |
213
295
  | [fusuma-plugin-keypress](https://github.com/iberianpig/fusuma-plugin-keypress) | Detects gestures while pressing multiple keys |
@@ -215,9 +297,8 @@ Fusuma plugins are provided with the `fusuma-plugin-XXXXX` naming convention and
215
297
 
216
298
  ## Tutorial Video
217
299
 
218
- [![Multitouch Touchpad Gestures in Linux with Fusuma](http://img.youtube.com/vi/bn11Iwvf29I/0.jpg)](http://www.youtube.com/watch?v=bn11Iwvf29I "Multitouch Touchpad Gestures in Linux with Fusuma")
219
- [Multitouch Touchpad Gestures in Linux with Fusuma](http://www.youtube.com/watch?v=bn11Iwvf29I) by [Eric Adams](https://www.youtube.com/user/igster75)
220
-
300
+ [![Multitouch Touchpad Gestures in Linux with Fusuma](http://img.youtube.com/vi/bn11Iwvf29I/0.jpg)](http://www.youtube.com/watch?v=bn11Iwvf29I "Multitouch Touchpad Gestures in Linux with Fusuma")
301
+ [Multitouch Touchpad Gestures in Linux with Fusuma](http://www.youtube.com/watch?v=bn11Iwvf29I) by [Eric Adams](https://www.youtube.com/user/igster75)
221
302
 
222
303
  ## Support
223
304
 
@@ -225,16 +306,13 @@ I'm a Freelance Engineer in Japan and working on these products after finishing
225
306
  Currently, my open-source contribution times is not enough.
226
307
  If you like my work and want to contribute and become a sponsor, I will be able to focus on my projects.
227
308
 
228
- * [GitHub Sponsors](https://github.com/sponsors/iberianpig) (Zero fee!)
229
- * [Patreon](https://www.patreon.com/iberianpig)
230
-
309
+ - [GitHub Sponsors](https://github.com/sponsors/iberianpig) (Zero fee!)
310
+ - [Patreon](https://www.patreon.com/iberianpig)
231
311
 
232
312
  ## Contributing
233
313
 
234
314
  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.
235
315
 
236
-
237
316
  ## License
238
317
 
239
318
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
240
-
@@ -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
data/exe/fusuma CHANGED
@@ -23,7 +23,7 @@ opt.on('-l', '--list-devices',
23
23
  end
24
24
 
25
25
  opt.on('--device="Device name"',
26
- 'Open the given device only') do |v|
26
+ 'Open the given device only (DEPRECATED)') do |v|
27
27
  option[:device] = v
28
28
  end
29
29
 
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
25
25
 
26
26
  spec.required_ruby_version = '>= 2.3' # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all&section=main
27
27
  spec.add_development_dependency 'bundler'
28
+ spec.add_development_dependency 'coveralls'
28
29
  spec.add_development_dependency 'github_changelog_generator', '~> 1.14'
29
30
  spec.add_development_dependency 'pry-byebug', '~> 3.4'
30
31
  spec.add_development_dependency 'pry-doc'
@@ -3,8 +3,8 @@
3
3
  require_relative './fusuma/version'
4
4
  require_relative './fusuma/multi_logger'
5
5
  require_relative './fusuma/config.rb'
6
+ require_relative './fusuma/environment.rb'
6
7
  require_relative './fusuma/device.rb'
7
- require_relative './fusuma/libinput_command.rb'
8
8
  require_relative './fusuma/plugin/manager.rb'
9
9
 
10
10
  # this is top level module
@@ -33,43 +33,21 @@ module Fusuma
33
33
 
34
34
  Plugin::Manager.require_base_plugins
35
35
 
36
- MultiLogger.info '---------------------------------------------'
37
- print_version
38
- MultiLogger.info '---------------------------------------------'
39
- print_enabled_plugins
40
- MultiLogger.info '---------------------------------------------'
36
+ Environment.dump_information
41
37
  Kernel.exit(0) if option[:version]
42
38
 
43
- print_device_list if option[:list]
39
+ if option[:list]
40
+ Environment.print_device_list
41
+ Kernel.exit(0)
42
+ end
43
+
44
44
  # TODO: remove keep_device_from_option from command line options
45
45
  Plugin::Filters::LibinputDeviceFilter::KeepDevice.from_option = option[:device]
46
- Process.daemon if option[:daemon]
47
- end
48
-
49
- def print_version
50
- MultiLogger.info "Fusuma: #{Fusuma::VERSION}"
51
- MultiLogger.info "libinput: #{LibinputCommand.new.version}"
52
- MultiLogger.info "OS: #{`uname -rsv`}".strip
53
- MultiLogger.info "Distribution: #{`cat /etc/issue`}".strip
54
- MultiLogger.info "Desktop session: #{`echo $DESKTOP_SESSION $XDG_SESSION_TYPE`}".strip
55
- end
56
-
57
- def print_enabled_plugins
58
- MultiLogger.info 'Enabled Plugins: '
59
- Plugin::Manager.plugins
60
- .reject { |k, _v| k.to_s =~ /Base/ }
61
- .map { |_base, plugins| plugins.map { |plugin| " #{plugin}" } }
62
- .flatten.sort.each { |name| MultiLogger.info(name) }
63
- end
64
46
 
65
- def print_device_list
66
- puts Device.available.map(&:name)
67
- exit(0)
47
+ Process.daemon if option[:daemon]
68
48
  end
69
49
 
70
50
  def load_custom_config(config_path = nil)
71
- return unless config_path
72
-
73
51
  Config.custom_path = config_path
74
52
  end
75
53
  end
@@ -86,7 +64,7 @@ module Fusuma
86
64
  def run
87
65
  # TODO: run with multi thread
88
66
  @inputs.first.run do |event|
89
- clear_expired
67
+ clear_expired_events
90
68
  filtered = filter(event) || next
91
69
  parsed = parse(filtered) || next
92
70
  buffered = buffer(parsed) || next
@@ -139,7 +117,7 @@ module Fusuma
139
117
  executor&.execute(event)
140
118
  end
141
119
 
142
- def clear_expired
120
+ def clear_expired_events
143
121
  @buffers.each(&:clear_expired)
144
122
  end
145
123
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative './multi_logger.rb'
4
4
  require_relative './config/index.rb'
5
+ require_relative './config/yaml_duplication_checker.rb'
5
6
  require 'singleton'
6
7
  require 'yaml'
7
8
 
@@ -9,6 +10,9 @@ require 'yaml'
9
10
  module Fusuma
10
11
  # read keymap from yaml file
11
12
  class Config
13
+ class NotFoundError < StandardError; end
14
+ class InvalidFileError < StandardError; end
15
+
12
16
  include Singleton
13
17
 
14
18
  class << self
@@ -28,7 +32,6 @@ module Fusuma
28
32
  @custom_path = nil
29
33
  @cache = nil
30
34
  @keymap = nil
31
- reload
32
35
  end
33
36
 
34
37
  def custom_path=(new_path)
@@ -37,12 +40,33 @@ module Fusuma
37
40
  end
38
41
 
39
42
  def reload
40
- @cache = nil
41
- @keymap = YAML.load_file(file_path).deep_symbolize_keys
42
- MultiLogger.info "reload config : #{file_path}"
43
+ @cache = nil
44
+ path = find_filepath
45
+ MultiLogger.info "reload config: #{path}"
46
+ @keymap = validate(path)
43
47
  self
44
48
  end
45
49
 
50
+ # @return [Hash]
51
+ # @raise [InvalidError]
52
+ def validate(path)
53
+ duplicates = []
54
+ YAMLDuplicationChecker.check(File.read(path), path) do |ignored, duplicate|
55
+ MultiLogger.error "#{path}: #{ignored.value} is duplicated"
56
+ duplicates << duplicate.value
57
+ end
58
+ raise InvalidFileError, "Detect duplicate keys #{duplicates}" unless duplicates.empty?
59
+
60
+ yaml = YAML.load_file(path)
61
+
62
+ raise InvalidFileError, 'Invaid YAML file' unless yaml.is_a? Hash
63
+
64
+ yaml.deep_symbolize_keys
65
+ rescue StandardError => e
66
+ MultiLogger.error e.message
67
+ raise InvalidFileError, e.message
68
+ end
69
+
46
70
  # @param index [Index]
47
71
  def search(index)
48
72
  cache(index.cache_key) do
@@ -64,13 +88,16 @@ module Fusuma
64
88
 
65
89
  private
66
90
 
67
- def file_path
91
+ def find_filepath
68
92
  filename = 'fusuma/config.yml'
69
- if custom_path && File.exist?(expand_custom_path)
70
- expand_custom_path
93
+ if custom_path
94
+ return expand_custom_path if File.exist?(expand_custom_path)
95
+
96
+ raise NotFoundError, "#{expand_custom_path} is NOT FOUND"
71
97
  elsif File.exist?(expand_config_path(filename))
72
98
  expand_config_path(filename)
73
99
  else
100
+ MultiLogger.warn "config file: #{expand_config_path(filename)} is NOT FOUND"
74
101
  expand_default_path(filename)
75
102
  end
76
103
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fusuma
4
+ class Config
5
+ # ref: https://github.com/rubocop-hq/rubocop/blob/97e4ffc8a71e9e5239a927c6a534dfc1e0da917f/lib/rubocop/yaml_duplication_checker.rb
6
+ # Find duplicated keys from YAML.
7
+ module YAMLDuplicationChecker
8
+ def self.check(yaml_string, filename, &on_duplicated)
9
+ # Ruby 2.6+
10
+ tree = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0')
11
+ # Specify filename to display helpful message when it raises
12
+ # an error.
13
+ YAML.parse(yaml_string, filename: filename)
14
+ else
15
+ YAML.parse(yaml_string, filename)
16
+ end
17
+ return unless tree
18
+
19
+ traverse(tree, &on_duplicated)
20
+ end
21
+
22
+ def self.traverse(tree, &on_duplicated)
23
+ case tree
24
+ when Psych::Nodes::Mapping
25
+ tree.children.each_slice(2).with_object([]) do |(key, value), keys|
26
+ exist = keys.find { |key2| key2.value == key.value }
27
+ on_duplicated.call(exist, key) if exist
28
+ keys << key
29
+ traverse(value, &on_duplicated)
30
+ end
31
+ else
32
+ children = tree.children
33
+ return unless children
34
+
35
+ children.each { |c| traverse(c, &on_duplicated) }
36
+ end
37
+ end
38
+
39
+ private_class_method :traverse
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './version.rb'
4
+ require_relative './libinput_command.rb'
5
+ require_relative './multi_logger.rb'
6
+
7
+ module Fusuma
8
+ # Output Environment information
9
+ class Environment
10
+ class << self
11
+ def dump_information
12
+ MultiLogger.info '---------------------------------------------'
13
+ print_version
14
+ MultiLogger.info '---------------------------------------------'
15
+ print_enabled_plugins
16
+ MultiLogger.info '---------------------------------------------'
17
+ end
18
+
19
+ def print_version
20
+ MultiLogger.info "Fusuma: #{VERSION}"
21
+ MultiLogger.info "libinput: #{LibinputCommand.new.version}"
22
+ MultiLogger.info "OS: #{`uname -rsv`}".strip
23
+ MultiLogger.info "Distribution: #{`cat /etc/issue`}".strip
24
+ MultiLogger.info "Desktop session: #{`echo $DESKTOP_SESSION $XDG_SESSION_TYPE`}".strip
25
+ end
26
+
27
+ def print_enabled_plugins
28
+ MultiLogger.info 'Enabled Plugins: '
29
+ Plugin::Manager.plugins
30
+ .reject { |k, _v| k.to_s =~ /Base/ }
31
+ .map { |_base, plugins| plugins.map { |plugin| " #{plugin}" } }
32
+ .flatten.sort.each { |name| MultiLogger.info(name) }
33
+ end
34
+
35
+ def print_device_list
36
+ Plugin::Filters::LibinputDeviceFilter.new.keep_device.all.map do |device|
37
+ puts device.name
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -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
- prefix = 'stdbuf -oL --'
39
- cmd = "#{prefix} #{debug_events_command} #{@libinput_options.join(' ')}".strip
40
- MultiLogger.debug(debug_events: cmd)
41
- Open3.popen3(cmd) do |_i, o, _e, _w|
42
- o.each do |line|
43
- yield(line.chomp)
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 new_cli_option_available?
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 new_cli_option_available?
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.
@@ -14,10 +14,13 @@ module Fusuma
14
14
  Delta = Struct.new(:move_x, :move_y, :zoom, :rotate)
15
15
 
16
16
  # @param status [String]
17
+ # @param gesture [String]
18
+ # @param finger [String, Integer]
19
+ # @param direction [Delta, NilClass]
17
20
  def initialize(status:, gesture:, finger:, direction:)
18
21
  @status = status
19
22
  @gesture = gesture
20
- @finger = finger
23
+ @finger = finger.to_i
21
24
  @direction = direction
22
25
  end
23
26
  end
@@ -36,12 +36,26 @@ module Fusuma
36
36
  end
37
37
  end
38
38
 
39
+ def config_param_sample
40
+ <<~SAMPLE
41
+ ```config.yml
42
+ plugin:
43
+ filters:
44
+ libinput_device_filter:
45
+ keep_device_names:
46
+ - "DEVICE NAME PATTERN"
47
+ ```
48
+ SAMPLE
49
+ end
50
+
39
51
  # Select Device to keep
40
52
  class KeepDevice
41
53
  def initialize(name_patterns:)
42
54
  @name_patterns = name_patterns | Array(self.class.from_option)
43
55
  end
44
56
 
57
+ attr_reader :name_patterns
58
+
45
59
  # remove cache for reloading new devices
46
60
  def reset
47
61
  @all = nil
@@ -56,9 +70,16 @@ module Fusuma
56
70
  Device.all.select do |device|
57
71
  match_pattern?(device.name)
58
72
  end
73
+ end.tap do |devices|
74
+ print_not_found_messages if devices.empty?
59
75
  end
60
76
  end
61
77
 
78
+ def print_not_found_messages
79
+ puts 'Device is not found. Check following section on your config.yml'
80
+ puts LibinputDeviceFilter.new.config_param_sample
81
+ end
82
+
62
83
  # @return [TrueClass]
63
84
  # @return [FalseClass]
64
85
  def match_pattern?(string)
@@ -68,8 +89,20 @@ module Fusuma
68
89
  end
69
90
 
70
91
  class << self
92
+ attr_reader :from_option
93
+
71
94
  # TODO: remove from_option and command line options
72
- attr_accessor :from_option
95
+ def from_option=(device)
96
+ if device
97
+ warn <<~COMMENT
98
+ Don't use --device="Device name" option because it is deprecated.
99
+ Use the options below instead.
100
+
101
+ #{LibinputDeviceFilter.new.config_param_sample}
102
+ COMMENT
103
+ end
104
+ @from_option = device
105
+ end
73
106
  end
74
107
  end
75
108
  end
@@ -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(libinput_options: libinput_options).debug_events do |line|
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fusuma
4
- VERSION = '1.8.0'
4
+ VERSION = '1.11.1'
5
5
  end
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.8.0
4
+ version: 1.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-28 00:00:00.000000000 Z
11
+ date: 2020-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: coveralls
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: github_changelog_generator
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -163,6 +177,7 @@ files:
163
177
  - ".github/FUNDING.yml"
164
178
  - ".github/ISSUE_TEMPLATE/bug_report.md"
165
179
  - ".github/ISSUE_TEMPLATE/feature_request.md"
180
+ - ".github/pull_request_template.md"
166
181
  - ".github/stale.yml"
167
182
  - ".gitignore"
168
183
  - ".reek.yml"
@@ -172,6 +187,7 @@ files:
172
187
  - ".travis.yml"
173
188
  - CHANGELOG.md
174
189
  - CODE_OF_CONDUCT.md
190
+ - CONTRIBUTING.md
175
191
  - Gemfile
176
192
  - LICENSE
177
193
  - README.md
@@ -184,7 +200,9 @@ files:
184
200
  - lib/fusuma/config.rb
185
201
  - lib/fusuma/config.yml
186
202
  - lib/fusuma/config/index.rb
203
+ - lib/fusuma/config/yaml_duplication_checker.rb
187
204
  - lib/fusuma/device.rb
205
+ - lib/fusuma/environment.rb
188
206
  - lib/fusuma/libinput_command.rb
189
207
  - lib/fusuma/multi_logger.rb
190
208
  - lib/fusuma/plugin/base.rb
@@ -203,6 +221,7 @@ files:
203
221
  - lib/fusuma/plugin/executors/executor.rb
204
222
  - lib/fusuma/plugin/filters/filter.rb
205
223
  - lib/fusuma/plugin/filters/libinput_device_filter.rb
224
+ - lib/fusuma/plugin/filters/libinput_timeout_filter.rb
206
225
  - lib/fusuma/plugin/inputs/input.rb
207
226
  - lib/fusuma/plugin/inputs/libinput_command_input.rb
208
227
  - lib/fusuma/plugin/manager.rb
@@ -229,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
248
  - !ruby/object:Gem::Version
230
249
  version: '0'
231
250
  requirements: []
232
- rubygems_version: 3.1.2
251
+ rubygems_version: 3.2.0.rc.1
233
252
  signing_key:
234
253
  specification_version: 4
235
254
  summary: Multitouch gestures with libinput dirver on X11, Linux