fusuma-plugin-thumbsense 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b59cd5bd6f41317e5ea92112ecf14e7217c69508cd201714801b3e17be086f3
4
- data.tar.gz: 227bd5556ac618c0dc756a84ddbdbfc9bbde00565debf59923e9529a552acb4a
3
+ metadata.gz: 04f4cb11433bf62016e1a4b8155c9a9e0526796599367280705eac2a47446735
4
+ data.tar.gz: fe2486a552f788a3d333e3e9b46dfb4d2ea6e8ee0d20d4228713deec05b943e1
5
5
  SHA512:
6
- metadata.gz: e94d2fa5bc3e17efee0d50cebd98b7abf1b4034300f583df634518dffb150675abcf37726ae1c9c5998be53950bfa3467ce2bdee59d21ecfe76231e6c53d9785
7
- data.tar.gz: aaa23d9d5016c5d89ccfe0283facb042481223aef18fff6814babb70232e3cbc112c12fc8f65274869448926bfd19f620f2360aba468291f451db03ae0cd56c1
6
+ metadata.gz: efa45c56517dce953e877b77808b10ce9d7ab1824fa91a616b961306997c9499dfc771b4ce4d4516730cdbc1481dcdae09b4ce3fce8997844a50e3ed4cf79a9e
7
+ data.tar.gz: 3e4c3f38c2bf24b9ffb31b407760f50b8aecc3b982ad35540ec80d73acf01faeb3d3d12e85239c78f7ed8f65c93930a372abf941344c56b6d3c006d31184c622
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  # support focal (20.04LTS) 2.7
27
27
  spec.add_dependency "fusuma", ">= 3.2"
28
28
  spec.add_dependency "fusuma-plugin-keypress", ">= 0.11"
29
- spec.add_dependency "fusuma-plugin-remap", ">= 0.10.0"
29
+ spec.add_dependency "fusuma-plugin-remap", ">= 0.11.0"
30
30
  spec.metadata = {
31
31
  "rubygems_mfa_required" => "true"
32
32
  }
@@ -18,10 +18,7 @@ module Fusuma
18
18
  def clear_expired(*)
19
19
  return if @events.empty?
20
20
 
21
- # skip palm/begin record
22
- return if !ended?(@events.last)
23
-
24
- clear
21
+ clear if ended? || cancelled?
25
22
  end
26
23
 
27
24
  # @param event [Event]
@@ -39,12 +36,16 @@ module Fusuma
39
36
  @events.map { |e| e.record.finger }.max
40
37
  end
41
38
 
42
- def ended?(event)
43
- event.record.status == "end"
39
+ def ended?
40
+ @events.last.record.status == "end"
41
+ end
42
+
43
+ def cancelled?
44
+ @events.last.record.status == "cancelled"
44
45
  end
45
46
 
46
- def begin?(event)
47
- event.record.status == "begin"
47
+ def begin?
48
+ @events.last.record.status == "begin"
48
49
  end
49
50
  end
50
51
  end
@@ -47,11 +47,13 @@ module Fusuma
47
47
  return
48
48
  end
49
49
 
50
+ before_tap, after_tap = partition_keypress_with_first_tap
51
+
50
52
  # When keypress event is first:
51
53
  # If current layer is thumbsense, the layer should not be changed
52
54
  # If current layer is not thumbsense, it should remain a normal key
53
55
  # In other words, if the key event comes first, do nothing
54
- if keypress_first?
56
+ if keypress_first?(before_tap)
55
57
  MultiLogger.debug("keypress event is first")
56
58
 
57
59
  return
@@ -67,9 +69,11 @@ module Fusuma
67
69
  )
68
70
  )
69
71
 
72
+ keys = pressed_codes(@keypress_buffer.events.map(&:record))
73
+
70
74
  # TODO: Threshold
71
75
  # create remap index
72
- index = if (keys = pressed_codes) && !keys.empty?
76
+ index = if !pressed_codes(after_tap).empty?
73
77
  MultiLogger.debug("thumbsense remap index created: #{keys}")
74
78
  combined_keys = keys.join("+")
75
79
  create_event(
@@ -92,8 +96,7 @@ module Fusuma
92
96
  end
93
97
 
94
98
  # @return [Array<String>]
95
- def pressed_codes
96
- records = @keypress_buffer.events.map(&:record)
99
+ def pressed_codes(records)
97
100
  codes = []
98
101
  records.each do |r|
99
102
  if r.status == "pressed"
@@ -109,7 +112,7 @@ module Fusuma
109
112
  def touch_released?
110
113
  return true if @thumbsense_buffer.empty?
111
114
 
112
- @thumbsense_buffer.events.map(&:record).last&.status == "end"
115
+ @thumbsense_buffer.ended? || @thumbsense_buffer.cancelled?
113
116
  end
114
117
 
115
118
  # @return [TrueClass, FalseClass]
@@ -131,15 +134,33 @@ module Fusuma
131
134
  # @param thumbsense_buffer [Buffer]
132
135
  # @return [TrueClass] if keypress event is first
133
136
  # @return [FalseClass] if keypress event is NOT first or buffers are empty
134
- def keypress_first?
135
- return false if @thumbsense_buffer.empty? || @keypress_buffer.empty?
137
+ def keypress_first?(keypress_records)
138
+ return false if @thumbsense_buffer.empty? || keypress_records.empty?
136
139
 
137
- if (keys = pressed_codes) && !keys.empty?
140
+ if (keys = pressed_codes(keypress_records)) && !keys.empty?
138
141
  return false if MODIFIER_KEYS.include?(keys.first)
139
142
  end
140
143
 
141
144
  @keypress_buffer.events.first.time < @thumbsense_buffer.events.first.time
142
145
  end
146
+
147
+ def partition_keypress_with_first_tap
148
+ return [], [] if @thumbsense_buffer.empty?
149
+
150
+ first_tap_time = @thumbsense_buffer.events.first.time
151
+
152
+ before_tap = []
153
+ after_tap = []
154
+
155
+ @keypress_buffer.events.each do |event|
156
+ if event.time < first_tap_time
157
+ before_tap << event.record
158
+ else
159
+ after_tap << event.record
160
+ end
161
+ end
162
+ [before_tap, after_tap]
163
+ end
143
164
  end
144
165
  end
145
166
  end
@@ -44,6 +44,7 @@ module Fusuma
44
44
  mouse_state = nil
45
45
 
46
46
  hidraw_parser.new(hidraw_device).parse do |new_state|
47
+ # Write state to pipe only when it changes
47
48
  next if mouse_state == new_state
48
49
 
49
50
  mouse_state = new_state
@@ -3,7 +3,7 @@
3
3
  module Fusuma
4
4
  module Plugin
5
5
  module Thumbsense
6
- VERSION = "0.10.0"
6
+ VERSION = "0.12.0"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fusuma-plugin-thumbsense
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - iberianpig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-05-11 00:00:00.000000000 Z
11
+ date: 2025-05-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fusuma
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.10.0
47
+ version: 0.11.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 0.10.0
54
+ version: 0.11.0
55
55
  description: fusuma-plugin-thumbsense is Fusuma plugin for thumbsense.
56
56
  email:
57
57
  - yhkyky@gmail.com