fusuma-plugin-tap 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/.rubocop_todo.yml +5 -5
- data/CHANGELOG.md +40 -0
- data/Makefile +15 -4
- data/README.md +5 -0
- data/bin/libinput_debug_events_generator.rb +8 -3
- data/fusuma-plugin-tap.gemspec +1 -1
- data/lib/fusuma/plugin/buffers/tap_buffer.rb +1 -7
- data/lib/fusuma/plugin/detectors/tap_detector.rb +31 -15
- data/lib/fusuma/plugin/parsers/tap_parser.rb +7 -4
- data/lib/fusuma/plugin/tap/version.rb +1 -1
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b2d9fc25b57d8e8475739f63334e1996b382790d2f69934cfc4af3a191cf183
|
4
|
+
data.tar.gz: 9b7b628758a30e219c902b7e9a62675b415251277c078b2e40b794f7c7c2b1aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d6e782d13635368460a1f6f2c6ae04a3f09aec5e4d22b9ef8f9f12030c81570fb0cd174573e0aa5c25b9022163c8d43edd6de84c378cd81c75aaa58c7d31877
|
7
|
+
data.tar.gz: ad374930be4394b1bfc503024115b1dd6181eb3d597ba02f4095002fed3fbcca8a60d8ccfa04b11034f5ba42532448f3ddf63d3cff67085edc62dbc8da35af15
|
data/.rubocop.yml
CHANGED
@@ -18,6 +18,11 @@ Metrics/MethodLength:
|
|
18
18
|
- 'lib/fusuma/plugin/parsers/tap_parser.rb'
|
19
19
|
- 'lib/fusuma/plugin/parsers/tap_detector.rb'
|
20
20
|
|
21
|
+
Metrics/ClassLength:
|
22
|
+
Exclude:
|
23
|
+
- 'lib/fusuma/plugin/parsers/tap_parser.rb'
|
24
|
+
- 'lib/fusuma/plugin/parsers/tap_detector.rb'
|
25
|
+
|
21
26
|
Layout/LineLength:
|
22
27
|
Max: 100
|
23
28
|
Exclude:
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2020-05
|
3
|
+
# on 2020-07-05 15:49:25 UTC using RuboCop version 0.86.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -16,7 +16,7 @@ Gemspec/RequiredRubyVersion:
|
|
16
16
|
# Offense count: 5
|
17
17
|
# Configuration parameters: IgnoredMethods.
|
18
18
|
Metrics/AbcSize:
|
19
|
-
Max:
|
19
|
+
Max: 42
|
20
20
|
|
21
21
|
# Offense count: 1
|
22
22
|
# Configuration parameters: CountComments, ExcludedMethods.
|
@@ -27,17 +27,17 @@ Metrics/BlockLength:
|
|
27
27
|
# Offense count: 3
|
28
28
|
# Configuration parameters: IgnoredMethods.
|
29
29
|
Metrics/CyclomaticComplexity:
|
30
|
-
Max:
|
30
|
+
Max: 25
|
31
31
|
|
32
32
|
# Offense count: 5
|
33
33
|
# Configuration parameters: CountComments, ExcludedMethods.
|
34
34
|
Metrics/MethodLength:
|
35
35
|
Max: 45
|
36
36
|
|
37
|
-
# Offense count:
|
37
|
+
# Offense count: 2
|
38
38
|
# Configuration parameters: IgnoredMethods.
|
39
39
|
Metrics/PerceivedComplexity:
|
40
|
-
Max:
|
40
|
+
Max: 13
|
41
41
|
|
42
42
|
# Offense count: 1
|
43
43
|
Style/Documentation:
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,45 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v0.4.0.pre2](https://github.com/iberianpig/fusuma-plugin-tap/tree/v0.4.0.pre2) (2021-03-29)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-tap/compare/v0.4.0.pre...v0.4.0.pre2)
|
6
|
+
|
7
|
+
## [v0.4.0.pre](https://github.com/iberianpig/fusuma-plugin-tap/tree/v0.4.0.pre) (2020-11-09)
|
8
|
+
|
9
|
+
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-tap/compare/v0.3.2...v0.4.0.pre)
|
10
|
+
|
11
|
+
## [v0.3.2](https://github.com/iberianpig/fusuma-plugin-tap/tree/v0.3.2) (2020-08-13)
|
12
|
+
|
13
|
+
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-tap/compare/v0.3.1...v0.3.2)
|
14
|
+
|
15
|
+
**Fixed bugs:**
|
16
|
+
|
17
|
+
- Fix Parser when detecting a false 4 finger tap after a pinch gesture [\#5](https://github.com/iberianpig/fusuma-plugin-tap/pull/5) ([iberianpig](https://github.com/iberianpig))
|
18
|
+
|
19
|
+
**Closed issues:**
|
20
|
+
|
21
|
+
- tap 4 not registered [\#4](https://github.com/iberianpig/fusuma-plugin-tap/issues/4)
|
22
|
+
|
23
|
+
**Merged pull requests:**
|
24
|
+
|
25
|
+
- test\(tap\_parser\): reproduce the bug that 4 finger tap after detecting palm [\#8](https://github.com/iberianpig/fusuma-plugin-tap/pull/8) ([iberianpig](https://github.com/iberianpig))
|
26
|
+
|
27
|
+
## [v0.3.1](https://github.com/iberianpig/fusuma-plugin-tap/tree/v0.3.1) (2020-05-15)
|
28
|
+
|
29
|
+
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-tap/compare/v0.3.0...v0.3.1)
|
30
|
+
|
31
|
+
**Closed issues:**
|
32
|
+
|
33
|
+
- Reduce false positives with Hold gesture [\#2](https://github.com/iberianpig/fusuma-plugin-tap/issues/2)
|
34
|
+
|
35
|
+
## [v0.3.0](https://github.com/iberianpig/fusuma-plugin-tap/tree/v0.3.0) (2020-05-10)
|
36
|
+
|
37
|
+
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-tap/compare/v0.2.0...v0.3.0)
|
38
|
+
|
39
|
+
**Closed issues:**
|
40
|
+
|
41
|
+
- 4 finger tap / hold is not being registered [\#1](https://github.com/iberianpig/fusuma-plugin-tap/issues/1)
|
42
|
+
|
3
43
|
## [v0.2.0](https://github.com/iberianpig/fusuma-plugin-tap/tree/v0.2.0) (2020-05-05)
|
4
44
|
|
5
45
|
[Full Changelog](https://github.com/iberianpig/fusuma-plugin-tap/compare/v0.1.3...v0.2.0)
|
data/Makefile
CHANGED
@@ -3,11 +3,22 @@
|
|
3
3
|
all: help
|
4
4
|
|
5
5
|
build: ## build libinput with LIBINPUT_VERSION
|
6
|
-
cd $(
|
6
|
+
cd $(LIBINPUT_REPO) && \
|
7
|
+
git fetch && \
|
7
8
|
git checkout $(LIBINPUT_VERSION) && \
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
mkdir -p builddir/$(LIBINPUT_VERSION)/ && \
|
10
|
+
meson --prefix=/usr builddir/$(LIBINPUT_VERSION)/ -Dlibwacom=false -Ddebug-gui=false -Dtests=false -Ddocumentation=false && \
|
11
|
+
ninja -C builddir/$(LIBINPUT_VERSION)/
|
12
|
+
$(LIBINPUT_REPO)/builddir/$(LIBINPUT_VERSION)/libinput-list-devices --version
|
13
|
+
|
14
|
+
version: ## libinput list-devces --version
|
15
|
+
$(LIBINPUT_REPO)/builddir/$(LIBINPUT_VERSION)/libinput-list-devices --version
|
16
|
+
|
17
|
+
list-devices: ## libinput list-devices
|
18
|
+
$(LIBINPUT_REPO)/builddir/$(LIBINPUT_VERSION)/libinput-list-devices
|
19
|
+
|
20
|
+
debug-events: ## libinput debug-events
|
21
|
+
$(LIBINPUT_REPO)/builddir/$(LIBINPUT_VERSION)/libinput-debug-events --enable-tap --verbose
|
11
22
|
|
12
23
|
help: ## show help
|
13
24
|
@grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | uniq | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
data/README.md
CHANGED
@@ -62,6 +62,11 @@ plugin:
|
|
62
62
|
verbose: true
|
63
63
|
```
|
64
64
|
|
65
|
+
## Known issues
|
66
|
+
* `libinput debug-events --verbose` outputs is unstable, so it may not work properly with some versions of libinput.
|
67
|
+
* **libinput 1.10.4 contains a bug that suddenly stopped detecting taps.**
|
68
|
+
* ref: https://github.com/iberianpig/fusuma-plugin-tap/pull/8
|
69
|
+
|
65
70
|
## Development
|
66
71
|
|
67
72
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -4,15 +4,16 @@
|
|
4
4
|
require 'fileutils'
|
5
5
|
require 'pathname'
|
6
6
|
require 'fusuma/device'
|
7
|
+
require 'fusuma/plugin/inputs/libinput_command_input'
|
7
8
|
|
8
9
|
# Generate libinput generator
|
9
10
|
class LibinputDebugEventsGenerator
|
10
11
|
def initialize(evemu_record:)
|
11
12
|
@evemu_record = evemu_record
|
12
13
|
@gesture_name = Pathname.new(evemu_record).basename
|
13
|
-
@list_devices = ENV.fetch('LIBINPUT_LIST_DEVICES'
|
14
|
-
@debug_events = ENV.fetch('LIBINPUT_DEBUG_EVENTS'
|
15
|
-
@libinput_version = ENV.fetch('LIBINPUT_VERSION'
|
14
|
+
@list_devices = ENV.fetch('LIBINPUT_LIST_DEVICES')
|
15
|
+
@debug_events = ENV.fetch('LIBINPUT_DEBUG_EVENTS')
|
16
|
+
@libinput_version = ENV.fetch('LIBINPUT_VERSION')
|
16
17
|
end
|
17
18
|
|
18
19
|
def generate_debug_events
|
@@ -41,6 +42,10 @@ class LibinputDebugEventsGenerator
|
|
41
42
|
rescue Timeout::Error
|
42
43
|
puts 'cut out device infos'
|
43
44
|
end
|
45
|
+
if `which evemu-play` == ''
|
46
|
+
warn 'evemu-play is not found'
|
47
|
+
exit 1
|
48
|
+
end
|
44
49
|
|
45
50
|
command = "evemu-play /dev/input/#{device_id} < #{@evemu_record}"
|
46
51
|
|
data/fusuma-plugin-tap.gemspec
CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
|
27
27
|
spec.required_ruby_version = '>= 2.3' # https://packages.ubuntu.com/search?keywords=ruby&searchon=names&exact=1&suite=all§ion=main
|
28
28
|
|
29
|
-
spec.add_dependency 'fusuma', '~>
|
29
|
+
spec.add_dependency 'fusuma', '~> 2.0.0'
|
30
30
|
|
31
31
|
spec.add_development_dependency 'bundler'
|
32
32
|
spec.add_development_dependency 'github_changelog_generator', '~> 1.14'
|
@@ -22,7 +22,7 @@ module Fusuma
|
|
22
22
|
# @param event [Event]
|
23
23
|
# @return [NilClass, TapBuffer]
|
24
24
|
def buffer(event)
|
25
|
-
return unless
|
25
|
+
return unless event&.tag == source
|
26
26
|
|
27
27
|
# NOTE: need to set `begin` event at first of buffer
|
28
28
|
clear && return unless bufferable?(event)
|
@@ -56,12 +56,6 @@ module Fusuma
|
|
56
56
|
else
|
57
57
|
true
|
58
58
|
end
|
59
|
-
when 'update' # libinput_gesture_parser
|
60
|
-
if empty?
|
61
|
-
false
|
62
|
-
else
|
63
|
-
true
|
64
|
-
end
|
65
59
|
else
|
66
60
|
raise "Unexpected status: #{event.record.status}"
|
67
61
|
end
|
@@ -7,6 +7,7 @@ module Fusuma
|
|
7
7
|
module Detectors
|
8
8
|
# Detect tap event
|
9
9
|
class TapDetector < Detector
|
10
|
+
SOURCES = ['tap', 'gesture', 'timer']
|
10
11
|
BUFFER_TYPE = 'tap'
|
11
12
|
GESTURE_RECORD_TYPE = 'tap'
|
12
13
|
|
@@ -18,24 +19,27 @@ module Fusuma
|
|
18
19
|
# @return [Event] if event is detected
|
19
20
|
# @return [NilClass] if event is NOT detected
|
20
21
|
def detect(buffers)
|
21
|
-
|
22
|
+
tap_buffer = buffers.find { |b| b.type == BUFFER_TYPE }
|
22
23
|
gesture_buffer = buffers.find { |b| b.type == 'gesture' }
|
24
|
+
timer_buffer = buffers.find { |b| b.type == 'timer' }
|
23
25
|
|
24
|
-
|
26
|
+
if tap_buffer.empty? || moved?(tap_buffer: tap_buffer, gesture_buffer: gesture_buffer)
|
27
|
+
return
|
28
|
+
end
|
25
29
|
|
26
|
-
holding_time =
|
30
|
+
holding_time = calc_holding_time(tap_buffer: tap_buffer, timer_buffer: timer_buffer)
|
27
31
|
|
28
|
-
direction = if hold?(
|
32
|
+
direction = if hold?(tap_buffer, holding_time)
|
29
33
|
'hold'
|
30
|
-
elsif tap?(
|
34
|
+
elsif tap?(tap_buffer, holding_time)
|
31
35
|
'tap'
|
32
36
|
end
|
33
37
|
|
34
38
|
return if direction.nil?
|
35
39
|
|
36
|
-
finger =
|
40
|
+
finger = tap_buffer.finger
|
37
41
|
|
38
|
-
|
42
|
+
tap_buffer.clear # NOTE: Clear after detecting hold
|
39
43
|
|
40
44
|
index = create_index(finger: finger, direction: direction)
|
41
45
|
|
@@ -71,8 +75,10 @@ module Fusuma
|
|
71
75
|
end
|
72
76
|
|
73
77
|
# @return [TrueClass, FalseClass]
|
74
|
-
def moved?(
|
75
|
-
|
78
|
+
def moved?(tap_buffer:, gesture_buffer:)
|
79
|
+
tap_buffer.events.any? { |e| e.record.status == 'move' } ||
|
80
|
+
# FIXME: Find good parameter for ignoring
|
81
|
+
gesture_buffer.events.count { |e| tap_buffer.events.first.time < e.time } > 5
|
76
82
|
end
|
77
83
|
|
78
84
|
# @return [TrueClass, FalseClass]
|
@@ -95,6 +101,16 @@ module Fusuma
|
|
95
101
|
end
|
96
102
|
end
|
97
103
|
|
104
|
+
def calc_holding_time(tap_buffer:, timer_buffer:)
|
105
|
+
last_time = if timer_buffer && !timer_buffer.empty? &&
|
106
|
+
(tap_buffer.events.last.time < timer_buffer.events.last.time)
|
107
|
+
timer_buffer.events.last.time
|
108
|
+
else
|
109
|
+
tap_buffer.events.last.time
|
110
|
+
end
|
111
|
+
last_time - tap_buffer.events.first.time
|
112
|
+
end
|
113
|
+
|
98
114
|
private
|
99
115
|
|
100
116
|
def enough?(index:, direction:)
|
@@ -111,12 +127,12 @@ module Fusuma
|
|
111
127
|
def interval_time(index:, direction:)
|
112
128
|
@interval_time ||= {}
|
113
129
|
@interval_time[index.cache_key] ||= begin
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
130
|
+
keys_specific = Config::Index.new [*index.keys, 'interval']
|
131
|
+
keys_global = Config::Index.new ['interval', direction]
|
132
|
+
config_value = Config.search(keys_specific) ||
|
133
|
+
Config.search(keys_global) || 1
|
134
|
+
BASE_INTERVAL * config_value
|
135
|
+
end
|
120
136
|
end
|
121
137
|
end
|
122
138
|
end
|
@@ -67,7 +67,11 @@ module Fusuma
|
|
67
67
|
|
68
68
|
finger = case Regexp.last_match(2)
|
69
69
|
when 'TAP_STATE_DEAD'
|
70
|
-
|
70
|
+
if Regexp.last_match(1) == 'TAP_STATE_TOUCH_3'
|
71
|
+
4
|
72
|
+
else
|
73
|
+
0
|
74
|
+
end
|
71
75
|
when 'TAP_STATE_TOUCH_3'
|
72
76
|
3
|
73
77
|
when 'TAP_STATE_TOUCH_2'
|
@@ -94,8 +98,7 @@ module Fusuma
|
|
94
98
|
1
|
95
99
|
end
|
96
100
|
# KEEP
|
97
|
-
when
|
98
|
-
/\sgesture(| state):\s/ # 1.10.4 prints "gesture state: GESTURE_STATE_.*"
|
101
|
+
when /\sgesture(| state):\s/ # 1.10.4 prints "gesture state: GESTURE_STATE_.*"
|
99
102
|
# NOTE: treat the "gesture(| state):" as KEEP
|
100
103
|
status = 'keep'
|
101
104
|
finger = 0
|
@@ -144,7 +147,7 @@ module Fusuma
|
|
144
147
|
Events::Records::GestureRecord.new(status: status,
|
145
148
|
gesture: gesture,
|
146
149
|
finger: finger,
|
147
|
-
|
150
|
+
delta: nil)
|
148
151
|
end
|
149
152
|
|
150
153
|
def tag
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fusuma-plugin-tap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iberianpig
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fusuma
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,7 +169,7 @@ homepage: https://github.com/iberianpig/fusuma-plugin-tap
|
|
169
169
|
licenses:
|
170
170
|
- MIT
|
171
171
|
metadata: {}
|
172
|
-
post_install_message:
|
172
|
+
post_install_message:
|
173
173
|
rdoc_options: []
|
174
174
|
require_paths:
|
175
175
|
- lib
|
@@ -184,8 +184,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
184
184
|
- !ruby/object:Gem::Version
|
185
185
|
version: '0'
|
186
186
|
requirements: []
|
187
|
-
rubygems_version: 3.
|
188
|
-
signing_key:
|
187
|
+
rubygems_version: 3.1.4
|
188
|
+
signing_key:
|
189
189
|
specification_version: 4
|
190
190
|
summary: Tap gesture plugin for Fusuma
|
191
191
|
test_files: []
|