xinput_wrapper 0.6.1 → 0.7.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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/xinput_wrapper.rb +97 -7
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: af1558bd803a67895343a73b2001a42194b5402bc8998d410d9c388b4836a593
|
|
4
|
+
data.tar.gz: 63e171df3280f2385b404f82673037a2a69e47e758be649253dc6701bc61a089
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1874c64eed6da4e726bc9e2e8ae755e0e7e3162cce593db5109aa344210b10f414c4917daecd8e188a28287c4a1d13188b23912e42680354adcc114714476e6b
|
|
7
|
+
data.tar.gz: 9af8809d460ff318ff88fc6f49e310bff9ad612f8c800a9aceae0efe55d4a8f70f32cac93e704de837f6683cb09ef8a366b029d78283587bd1af6450b7246b33
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data.tar.gz.sig
CHANGED
|
Binary file
|
data/lib/xinput_wrapper.rb
CHANGED
|
@@ -14,10 +14,15 @@ require 'c32'
|
|
|
14
14
|
MOTION = 6
|
|
15
15
|
RAWKEY_PRESS = 13
|
|
16
16
|
RAWKEY_RELEASE = 14
|
|
17
|
+
RAWBUTTON_PRESS = 15
|
|
18
|
+
RAWBUTTON_RELEASE = 16
|
|
19
|
+
BUTTONS = %i(left middle right scrollup scrolldown)
|
|
17
20
|
|
|
18
21
|
|
|
19
22
|
class XInputWrapper
|
|
20
23
|
using ColouredText
|
|
24
|
+
|
|
25
|
+
attr_accessor :stop
|
|
21
26
|
|
|
22
27
|
# device list:
|
|
23
28
|
# 3 = Virtual core keyboard
|
|
@@ -26,8 +31,11 @@ class XInputWrapper
|
|
|
26
31
|
# 10 = USB Optical Mouse (locally attached)
|
|
27
32
|
# 11 = Microsoft Wired Keyboard 600 (locally attached)
|
|
28
33
|
#
|
|
29
|
-
def initialize(device: nil, verbose: true, lookup: {}, debug: false
|
|
34
|
+
def initialize(device: nil, verbose: true, lookup: {}, debug: false,
|
|
35
|
+
callback: nil )
|
|
30
36
|
|
|
37
|
+
@callback = callback
|
|
38
|
+
|
|
31
39
|
# defaults to QWERTY keyboard layout
|
|
32
40
|
@modifiers = {
|
|
33
41
|
62 => :shift, # right control
|
|
@@ -97,16 +105,19 @@ class XInputWrapper
|
|
|
97
105
|
|
|
98
106
|
def listen()
|
|
99
107
|
|
|
108
|
+
@stop = false
|
|
109
|
+
|
|
100
110
|
command = "xinput test-xi2 --root #{@device}"
|
|
101
111
|
|
|
102
112
|
type = 0
|
|
103
113
|
raw_keys = []
|
|
104
114
|
t1 = Time.now
|
|
105
|
-
lines = []
|
|
115
|
+
lines = []
|
|
106
116
|
|
|
107
117
|
IO.popen(command).each_line do |x|
|
|
108
118
|
|
|
109
|
-
|
|
119
|
+
break if @stop
|
|
120
|
+
#print "GOT ", x
|
|
110
121
|
if x[/EVENT type \d \(Motion\)/] and (Time.now > (t1 + 0.06125)) then
|
|
111
122
|
|
|
112
123
|
type = x[/EVENT type (\d+)/,1].to_i
|
|
@@ -118,19 +129,23 @@ class XInputWrapper
|
|
|
118
129
|
x1, y1 = r.split('/').map(&:to_f)
|
|
119
130
|
puts "x1: %s y1: %s" % [x1, y1] if @debug
|
|
120
131
|
on_mousemove(x1, y1)
|
|
132
|
+
@callback.on_mousemove(x1, y1) if @callback
|
|
133
|
+
@mouse_pos = [x1,y1]
|
|
121
134
|
t1 = Time.now
|
|
122
135
|
|
|
123
136
|
end
|
|
124
137
|
|
|
125
138
|
lines = [x]
|
|
126
139
|
|
|
127
|
-
elsif x[/EVENT type \d+ \(
|
|
140
|
+
elsif x[/EVENT type \d+ \(Raw(?:Key|Button)(?:Release|Press)\)/]
|
|
128
141
|
|
|
129
142
|
type = x[/EVENT type (\d+)/,1].to_i
|
|
130
143
|
|
|
131
144
|
lines = [x]
|
|
145
|
+
|
|
132
146
|
|
|
133
|
-
elsif
|
|
147
|
+
elsif [MOTION, RAWKEY_PRESS, RAWKEY_RELEASE, RAWBUTTON_PRESS,
|
|
148
|
+
RAWBUTTON_RELEASE].include? type
|
|
134
149
|
|
|
135
150
|
lines << x
|
|
136
151
|
|
|
@@ -151,6 +166,23 @@ class XInputWrapper
|
|
|
151
166
|
keycode = r.to_i if r
|
|
152
167
|
|
|
153
168
|
type = lines.join[/EVENT type (\d+)/,1] .to_i
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
when RAWBUTTON_PRESS
|
|
172
|
+
|
|
173
|
+
r = lines.join[/detail: (\d+)/,1]
|
|
174
|
+
|
|
175
|
+
buttoncode = r.to_i if r
|
|
176
|
+
|
|
177
|
+
type = lines.join[/EVENT type (\d+)/,1] .to_i
|
|
178
|
+
|
|
179
|
+
when RAWBUTTON_RELEASE
|
|
180
|
+
|
|
181
|
+
r = lines.join[/detail: (\d+)/,1]
|
|
182
|
+
|
|
183
|
+
buttoncode = r.to_i if r
|
|
184
|
+
|
|
185
|
+
type = lines.join[/EVENT type (\d+)/,1] .to_i
|
|
154
186
|
|
|
155
187
|
end
|
|
156
188
|
|
|
@@ -163,8 +195,9 @@ class XInputWrapper
|
|
|
163
195
|
next
|
|
164
196
|
end
|
|
165
197
|
|
|
166
|
-
next unless keycode
|
|
198
|
+
next unless keycode or buttoncode
|
|
167
199
|
puts 'keycode: ' + keycode.inspect if @debug
|
|
200
|
+
puts 'buttoncode: ' + buttoncode.inspect if @debug
|
|
168
201
|
|
|
169
202
|
# type = 13 means a key has been pressed
|
|
170
203
|
if type == RAWKEY_PRESS then
|
|
@@ -195,6 +228,7 @@ class XInputWrapper
|
|
|
195
228
|
|
|
196
229
|
keystring = ((key.length > 1 or key == ' ') ? "{%s}" % key : key)
|
|
197
230
|
block_given? ? yield(keystring) : on_key_press(keystring, keycode)
|
|
231
|
+
@callback.on_keypress(keystring, keycode) if @callback
|
|
198
232
|
|
|
199
233
|
end
|
|
200
234
|
|
|
@@ -207,6 +241,7 @@ class XInputWrapper
|
|
|
207
241
|
yield(format_key(keys.last, keys[0..-2]))
|
|
208
242
|
else
|
|
209
243
|
on_key_press(keys.last, keycode, keys[0..-2])
|
|
244
|
+
@callback.on_keypress(keys.last, keycode, keys[0..-2]) if @callback
|
|
210
245
|
end
|
|
211
246
|
|
|
212
247
|
raw_keys = []
|
|
@@ -234,12 +269,34 @@ class XInputWrapper
|
|
|
234
269
|
name = "on_#{key}_key".to_sym
|
|
235
270
|
method(name).call if self.protected_methods.include? name
|
|
236
271
|
on_key_press(key, keycode)
|
|
272
|
+
@callback.on_keypress(key, keycode) if @callback
|
|
237
273
|
end
|
|
238
274
|
end
|
|
239
275
|
|
|
240
276
|
index = raw_keys.rindex(keycode)
|
|
241
277
|
raw_keys.delete_at index if index
|
|
242
|
-
|
|
278
|
+
|
|
279
|
+
elsif type == RAWBUTTON_PRESS
|
|
280
|
+
|
|
281
|
+
button = BUTTONS[buttoncode-1]
|
|
282
|
+
|
|
283
|
+
case button
|
|
284
|
+
when :scrollup
|
|
285
|
+
on_mouse_scrollup()
|
|
286
|
+
@callback.on_mouse_scrollup() if @callback
|
|
287
|
+
when :scrolldown
|
|
288
|
+
on_mouse_scrolldown()
|
|
289
|
+
@callback.on_mouse_scrolldown() if @callback
|
|
290
|
+
else
|
|
291
|
+
on_mousedown(button, *@mouse_pos)
|
|
292
|
+
@callback.on_mousedown(button, *@mouse_pos) if @callback
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
elsif type == RAWBUTTON_RELEASE
|
|
296
|
+
|
|
297
|
+
button = BUTTONS[buttoncode-1]
|
|
298
|
+
on_mouseup(BUTTONS[buttoncode-1], *@mouse_pos)
|
|
299
|
+
|
|
243
300
|
end
|
|
244
301
|
|
|
245
302
|
end
|
|
@@ -259,6 +316,14 @@ class XInputWrapper
|
|
|
259
316
|
|
|
260
317
|
end
|
|
261
318
|
|
|
319
|
+
def on_mousedown(button, x,y)
|
|
320
|
+
|
|
321
|
+
if @debug then
|
|
322
|
+
puts "on_mousedown() %s click x: %s y: %s" % [button, x, y]
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
end
|
|
326
|
+
|
|
262
327
|
def on_mousemove(x,y)
|
|
263
328
|
|
|
264
329
|
if @debug then
|
|
@@ -266,6 +331,31 @@ class XInputWrapper
|
|
|
266
331
|
end
|
|
267
332
|
|
|
268
333
|
end
|
|
334
|
+
|
|
335
|
+
def on_mouseup(button, x,y)
|
|
336
|
+
|
|
337
|
+
if @debug then
|
|
338
|
+
puts "on_mousedown() %s click x: %s y: %s" % [button, x, y]
|
|
339
|
+
end
|
|
340
|
+
|
|
341
|
+
end
|
|
342
|
+
|
|
343
|
+
def on_mouse_scrolldown()
|
|
344
|
+
|
|
345
|
+
if @debug then
|
|
346
|
+
puts "on_mouse_scrolldown()"
|
|
347
|
+
end
|
|
348
|
+
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
def on_mouse_scrollup()
|
|
352
|
+
|
|
353
|
+
if @debug then
|
|
354
|
+
puts "on_mouse_scrollup()"
|
|
355
|
+
end
|
|
356
|
+
|
|
357
|
+
end
|
|
358
|
+
|
|
269
359
|
|
|
270
360
|
def on_shift_key() end
|
|
271
361
|
def on_super_key() end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: xinput_wrapper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- James Robertson
|
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
|
35
35
|
B//EUqLB2VKtMmcrYMc2FfbLwllNLY4TRq+/lgVLoDb7oLHsiggYSLZS6lPBIQj/
|
|
36
36
|
YnYsDKwN5siDA79sB0fqq2ml
|
|
37
37
|
-----END CERTIFICATE-----
|
|
38
|
-
date: 2020-08-
|
|
38
|
+
date: 2020-08-04 00:00:00.000000000 Z
|
|
39
39
|
dependencies:
|
|
40
40
|
- !ruby/object:Gem::Dependency
|
|
41
41
|
name: c32
|
metadata.gz.sig
CHANGED
|
Binary file
|