fusuma 3.6.0 → 3.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -9
- data/lib/fusuma/device.rb +1 -1
- data/lib/fusuma/libinput_command.rb +2 -6
- data/lib/fusuma/plugin/base.rb +2 -3
- data/lib/fusuma/plugin/buffers/gesture_buffer.rb +1 -1
- data/lib/fusuma/plugin/detectors/detector.rb +1 -1
- data/lib/fusuma/plugin/detectors/hold_detector.rb +3 -3
- data/lib/fusuma/plugin/detectors/pinch_detector.rb +2 -2
- data/lib/fusuma/plugin/detectors/rotate_detector.rb +2 -2
- data/lib/fusuma/plugin/detectors/swipe_detector.rb +2 -2
- data/lib/fusuma/plugin/events/records/index_record.rb +2 -2
- data/lib/fusuma/plugin/inputs/input.rb +1 -6
- data/lib/fusuma/plugin/inputs/libinput_command_input.rb +1 -3
- data/lib/fusuma/plugin/inputs/timer_input.rb +2 -3
- data/lib/fusuma/plugin/manager.rb +1 -0
- data/lib/fusuma/version.rb +1 -1
- data/lib/fusuma.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: f33e5a3a9c8df27631e81c1bd9e4d9381e04a5a1c35717c0b70e76d44df840e5
|
4
|
+
data.tar.gz: 2ce6df664b39c46fc7d9262a7167a27cccf181c567a82305e0378f2b4a3f0a3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85627e1ff3d1b7ec4b0b3e61120e7aa4f3e366104018965d8fc96c9188e798feff37ce2073acc8253f1d1c7eeea7cc5191d607e563dedfc8a1e54f9cc12702f6
|
7
|
+
data.tar.gz: b4fac91bfef1192626f0b418383eaa9b4cb4d42b7661a520527bc3138f961fcf4b32a86f36265c9770521052b6d2c89d2794e720982928cd23db3071b5c405b0
|
data/README.md
CHANGED
@@ -11,10 +11,10 @@ This gem makes your linux able to recognize swipes or pinchs and assign commands
|
|
11
11
|
## Features
|
12
12
|
|
13
13
|
- Easy installation with RubyGems
|
14
|
-
-
|
15
|
-
- Sensitivity
|
16
|
-
- Automatic
|
17
|
-
-
|
14
|
+
- Define gestures and actions in YAML format
|
15
|
+
- Sensitivity settings (threshold, interval) for gesture recognition
|
16
|
+
- Automatic addition of external touchpads
|
17
|
+
- Feature extension via a [plugin system](https://github.com/iberianpig/fusuma/#fusuma-plugins)
|
18
18
|
|
19
19
|
## Installation
|
20
20
|
|
@@ -35,9 +35,9 @@ newgrp input
|
|
35
35
|
**IMPORTANT**: This makes `/dev/input/` readable, so if that's an issue for you for some reason (like for privacy- or securityconcerns etc. or if it causes other parts of your OS to misbehave), **consider this your heads-up.**
|
36
36
|
|
37
37
|
<details>
|
38
|
-
<summary>For Debian Based Distros (Ubuntu, Debian, Mint, Pop!
|
38
|
+
<summary>For Debian Based Distros (Ubuntu, Debian, Mint, Pop!_OS)</summary>
|
39
39
|
|
40
|
-
### For Debian Based Distros (Ubuntu, Debian, Mint, Pop!
|
40
|
+
### For Debian Based Distros (Ubuntu, Debian, Mint, Pop!_OS)
|
41
41
|
|
42
42
|
#### 1. Install libinput-tools
|
43
43
|
|
@@ -258,8 +258,8 @@ The following wiki pages can be edited by everyone.
|
|
258
258
|
- [elementary OS](https://github.com/iberianpig/fusuma/wiki/elementary-OS)
|
259
259
|
- [i3](https://github.com/iberianpig/fusuma/wiki/i3)
|
260
260
|
- [KDE to mimic MacOS](https://github.com/iberianpig/fusuma/wiki/KDE-to-mimic-MacOS)
|
261
|
-
- [
|
262
|
-
- [
|
261
|
+
- [Pop!_OS with Cinnamon](https://github.com/iberianpig/fusuma/wiki/POP-OS-with-Cinnamon)
|
262
|
+
- [Pop!_OS Default Gnome](https://github.com/iberianpig/fusuma/wiki/PopOS-Default-Gnome)
|
263
263
|
- [Ubuntu OS to mimic Mac a little](https://github.com/iberianpig/fusuma/wiki/Ubuntu-OS-to-mimic-Mac-a-little)
|
264
264
|
- [3 fingers Drag (OS X Style)](https://github.com/iberianpig/fusuma/wiki/3-fingers-Drag-(OS-X-Style))
|
265
265
|
- [3 fingers Alt Tab Switcher(Windows Style)](https://github.com/iberianpig/fusuma/wiki/3-fingers-Alt-Tab-Switcher(Windows-Style))
|
@@ -420,7 +420,7 @@ sudo gem list fusuma-plugin- | cut -d' ' -f1 | xargs --no-run-if-empty sudo gem
|
|
420
420
|
|
421
421
|
## Tutorial Video
|
422
422
|
|
423
|
-
[![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")
|
423
|
+
[![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")
|
424
424
|
[Multitouch Touchpad Gestures in Linux with Fusuma](http://www.youtube.com/watch?v=bn11Iwvf29I) by [Eric Adams](https://www.youtube.com/user/igster75)
|
425
425
|
|
426
426
|
## Support
|
data/lib/fusuma/device.rb
CHANGED
@@ -66,7 +66,7 @@ module Fusuma
|
|
66
66
|
line_parser = LineParser.new
|
67
67
|
|
68
68
|
libinput_command = Plugin::Inputs::LibinputCommandInput.new.command
|
69
|
-
# note: this libinput command takes a nontrivial
|
69
|
+
# note: this libinput command takes a nontrivial amount of time (~200ms)
|
70
70
|
libinput_command.list_devices do |line|
|
71
71
|
line_parser.push(line)
|
72
72
|
end
|
@@ -22,7 +22,7 @@ module Fusuma
|
|
22
22
|
|
23
23
|
# @return [String]
|
24
24
|
def version
|
25
|
-
#
|
25
|
+
# version_command prints "1.6.3\n"
|
26
26
|
@version ||= `#{version_command}`.strip
|
27
27
|
end
|
28
28
|
|
@@ -39,11 +39,7 @@ module Fusuma
|
|
39
39
|
|
40
40
|
# @return [Integer] return a latest line libinput debug-events
|
41
41
|
def debug_events(writer)
|
42
|
-
|
43
|
-
t = Open3.pipeline_start([debug_events_with_options], ["grep -v POINTER_ --line-buffered"],
|
44
|
-
out: writer, in: "/dev/null")
|
45
|
-
t[0].pid
|
46
|
-
end
|
42
|
+
Open3.pipeline_start([debug_events_with_options], ["grep -v POINTER_ --line-buffered"], out: writer, in: "/dev/null")
|
47
43
|
end
|
48
44
|
|
49
45
|
# @return [String] command
|
data/lib/fusuma/plugin/base.rb
CHANGED
@@ -53,9 +53,8 @@ module Fusuma
|
|
53
53
|
|
54
54
|
next if param_types.any? { |klass| val.is_a?(klass) }
|
55
55
|
|
56
|
-
MultiLogger.error("Please fix config.yml
|
57
|
-
MultiLogger.error("
|
58
|
-
.join(" => :")} => :#{key} should be #{param_types.join(" OR ")}.")
|
56
|
+
MultiLogger.error("Please fix config.yml")
|
57
|
+
MultiLogger.error("`#{config_index.keys.join(".")}.#{key}` should be #{param_types.join(" OR ")}.")
|
59
58
|
exit 1
|
60
59
|
end
|
61
60
|
end
|
@@ -12,10 +12,10 @@ module Fusuma
|
|
12
12
|
BUFFER_TYPE = "gesture"
|
13
13
|
GESTURE_RECORD_TYPE = "hold"
|
14
14
|
|
15
|
-
|
15
|
+
BASE_THRESHOLD = 0.7
|
16
16
|
|
17
17
|
def initialize(*args)
|
18
|
-
super
|
18
|
+
super
|
19
19
|
@timer = Inputs::TimerInput.instance
|
20
20
|
end
|
21
21
|
|
@@ -134,7 +134,7 @@ module Fusuma
|
|
134
134
|
keys_global = Config::Index.new ["threshold", type]
|
135
135
|
config_value = Config.search(keys_specific) ||
|
136
136
|
Config.search(keys_global) || 1
|
137
|
-
|
137
|
+
BASE_THRESHOLD * config_value
|
138
138
|
end
|
139
139
|
end
|
140
140
|
end
|
@@ -11,7 +11,7 @@ module Fusuma
|
|
11
11
|
GESTURE_RECORD_TYPE = "pinch"
|
12
12
|
|
13
13
|
FINGERS = [2, 3, 4].freeze
|
14
|
-
|
14
|
+
BASE_THRESHOLD = 1.3
|
15
15
|
|
16
16
|
# @param buffers [Array<Buffer>]
|
17
17
|
# @return [Events::Event] if event is detected
|
@@ -141,7 +141,7 @@ module Fusuma
|
|
141
141
|
keys_global = Config::Index.new ["threshold", type]
|
142
142
|
config_value = Config.search(keys_specific) ||
|
143
143
|
Config.search(keys_global) || 1
|
144
|
-
|
144
|
+
BASE_THRESHOLD * config_value
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
@@ -11,7 +11,7 @@ module Fusuma
|
|
11
11
|
GESTURE_RECORD_TYPE = "pinch"
|
12
12
|
|
13
13
|
FINGERS = [2, 3, 4].freeze
|
14
|
-
|
14
|
+
BASE_THRESHOLD = 0.5
|
15
15
|
|
16
16
|
# @param buffers [Array<Buffer>]
|
17
17
|
# @return [Events::Event] if event is detected
|
@@ -126,7 +126,7 @@ module Fusuma
|
|
126
126
|
keys_global = Config::Index.new ["threshold", type]
|
127
127
|
config_value = Config.search(keys_specific) ||
|
128
128
|
Config.search(keys_global) || 1
|
129
|
-
|
129
|
+
BASE_THRESHOLD * config_value
|
130
130
|
end
|
131
131
|
end
|
132
132
|
|
@@ -11,7 +11,7 @@ module Fusuma
|
|
11
11
|
GESTURE_RECORD_TYPE = "swipe"
|
12
12
|
|
13
13
|
FINGERS = [3, 4].freeze
|
14
|
-
|
14
|
+
BASE_THRESHOLD = 25
|
15
15
|
|
16
16
|
# @param buffers [Array<Buffers::Buffer>]
|
17
17
|
# @return [Events::Event] if event is detected
|
@@ -124,7 +124,7 @@ module Fusuma
|
|
124
124
|
keys_global = Config::Index.new ["threshold", type]
|
125
125
|
config_value = Config.search(keys_specific) ||
|
126
126
|
Config.search(keys_global) || 1
|
127
|
-
|
127
|
+
BASE_THRESHOLD * config_value
|
128
128
|
end
|
129
129
|
end
|
130
130
|
|
@@ -36,7 +36,7 @@ module Fusuma
|
|
36
36
|
# @return [NilClass] when merge is not succeeded
|
37
37
|
def merge(records:, index: @index)
|
38
38
|
# FIXME: cache
|
39
|
-
raise "position is NOT body: #{self}" unless
|
39
|
+
raise "position is NOT body: #{self}" unless mergeable?
|
40
40
|
|
41
41
|
if records.empty?
|
42
42
|
if Config.instance.find_execute_key(index)
|
@@ -76,7 +76,7 @@ module Fusuma
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
def
|
79
|
+
def mergeable?
|
80
80
|
@position == :body
|
81
81
|
end
|
82
82
|
end
|
@@ -10,7 +10,7 @@ module Fusuma
|
|
10
10
|
# @abstract Subclass and override {#io} to implement
|
11
11
|
class Input < Base
|
12
12
|
def initialize(*args)
|
13
|
-
super
|
13
|
+
super
|
14
14
|
@tag = self.class.name.split("Inputs::").last.underscore
|
15
15
|
end
|
16
16
|
|
@@ -43,11 +43,6 @@ module Fusuma
|
|
43
43
|
exit 1
|
44
44
|
end
|
45
45
|
|
46
|
-
# @return [Integer]
|
47
|
-
def pid
|
48
|
-
raise NotImplementedError, "override #{self.class.name}##{__method__}"
|
49
|
-
end
|
50
|
-
|
51
46
|
# @return [IO]
|
52
47
|
def io
|
53
48
|
raise NotImplementedError, "override #{self.class.name}##{__method__}"
|
@@ -8,8 +8,6 @@ module Fusuma
|
|
8
8
|
module Inputs
|
9
9
|
# libinput commands wrapper
|
10
10
|
class LibinputCommandInput < Input
|
11
|
-
attr_reader :pid
|
12
|
-
|
13
11
|
def config_param_types
|
14
12
|
{
|
15
13
|
device: [String],
|
@@ -27,7 +25,7 @@ module Fusuma
|
|
27
25
|
def io
|
28
26
|
@io ||= begin
|
29
27
|
reader, writer = create_io
|
30
|
-
|
28
|
+
command.debug_events(writer)
|
31
29
|
reader
|
32
30
|
end
|
33
31
|
end
|
@@ -23,12 +23,12 @@ module Fusuma
|
|
23
23
|
@early_wake_queue = Queue.new
|
24
24
|
end
|
25
25
|
|
26
|
-
attr_reader :
|
26
|
+
attr_reader :interval
|
27
27
|
|
28
28
|
def io
|
29
29
|
@io ||= begin
|
30
30
|
reader, writer = create_io
|
31
|
-
|
31
|
+
start(reader, writer)
|
32
32
|
|
33
33
|
reader
|
34
34
|
end
|
@@ -38,7 +38,6 @@ module Fusuma
|
|
38
38
|
Thread.new do
|
39
39
|
timer_loop(writer)
|
40
40
|
end
|
41
|
-
nil
|
42
41
|
end
|
43
42
|
|
44
43
|
def timer_loop(writer)
|
@@ -40,6 +40,7 @@ module Fusuma
|
|
40
40
|
plugin_gemspec = Gem::Specification.load(plugin_gemspec_path)
|
41
41
|
fusuma_gemspec_path = File.expand_path("../../../fusuma.gemspec", __dir__)
|
42
42
|
fusuma_gemspec = Gem::Specification.load(fusuma_gemspec_path)
|
43
|
+
next if plugin_gemspec == fusuma_gemspec
|
43
44
|
|
44
45
|
if plugin_gemspec.dependencies.find { |d| d.name == "fusuma" }&.match?(fusuma_gemspec)
|
45
46
|
siblings_plugin
|
data/lib/fusuma/version.rb
CHANGED
data/lib/fusuma.rb
CHANGED
@@ -148,7 +148,7 @@ module Fusuma
|
|
148
148
|
# @return [NilClass] when event is NOT given
|
149
149
|
def merge(events)
|
150
150
|
index_events, context_events = events.partition { |event| event.record.type == :index }
|
151
|
-
main_events, modifiers = index_events.partition { |event| event.record.
|
151
|
+
main_events, modifiers = index_events.partition { |event| event.record.mergeable? }
|
152
152
|
request_context = context_events.each_with_object({}) do |e, results|
|
153
153
|
results[e.record.name] = e.record.value
|
154
154
|
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: 3.6.
|
4
|
+
version: 3.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iberianpig
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Fusuma is multitouch gesture recognizer. This gem makes your touchpad
|
14
14
|
on Linux able to recognize swipes or pinchs and assign command to them. Read installation
|