xdrp 0.1.0 → 0.2.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/xdrp.rb +70 -14
- data.tar.gz.sig +0 -0
- metadata +75 -34
- 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: 737ab10b27c806f92b76fd5c622e913df7ae8b97d3027a30c2d37cf27714ca33
|
4
|
+
data.tar.gz: 1145d42168fddfb29b70c8339d4a80717873160d261a93cfced4ea17186bf2c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7de5de83cfae5ff60214a93ec8ffab23f5d0429656c8c86273dcb54c330fa99059ac4a9d1d5fbf5787d9fde50d065c63c18c7d2ea4e26241c0ead56b1ca603f3
|
7
|
+
data.tar.gz: 6fc90d8cb24aafde37c44895563b17b585bf50eb9d3794f387c6cd62d32a4dc386cfd3ab3e0104b308965085915f667da604fe4f32f9b74ad5d8a95a47df04d8
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/xdrp.rb
CHANGED
@@ -5,18 +5,21 @@
|
|
5
5
|
# description: A basic macro recorder for GNU/Linux which uses
|
6
6
|
# program xinput to capture input events.
|
7
7
|
|
8
|
+
require 'wmctrl'
|
8
9
|
require 'rxfhelper'
|
10
|
+
require 'keystroker'
|
9
11
|
require "xdo/mouse"
|
10
12
|
require "xdo/xwindow"
|
11
13
|
require "xdo/keyboard"
|
12
14
|
require 'xinput_wrapper'
|
13
15
|
|
14
16
|
|
17
|
+
|
15
18
|
MOUSE = 1
|
16
19
|
KEYBOARD = 2
|
17
20
|
KEYBOARD_MOUSE = 3
|
18
21
|
|
19
|
-
|
22
|
+
|
20
23
|
module Xdrp
|
21
24
|
|
22
25
|
class Recorder
|
@@ -30,8 +33,6 @@ module Xdrp
|
|
30
33
|
|
31
34
|
def initialize(levelx=KEYBOARD_MOUSE, level: levelx, debug: false)
|
32
35
|
|
33
|
-
@xiw = XInputWrapper.new(verbose: true, debug: debug, callback: self)
|
34
|
-
|
35
36
|
@mouse, @keyboard = false, false
|
36
37
|
|
37
38
|
case level
|
@@ -42,6 +43,13 @@ module Xdrp
|
|
42
43
|
when 3
|
43
44
|
@mouse, @keyboard = true, true
|
44
45
|
end
|
46
|
+
|
47
|
+
|
48
|
+
@xiw = XInputWrapper.new(verbose: true, debug: debug, callback: self)
|
49
|
+
|
50
|
+
@wm = WMCtrl.display
|
51
|
+
@win_title = ''
|
52
|
+
|
45
53
|
end
|
46
54
|
|
47
55
|
def on_keypress(key, keycode, modifier=nil)
|
@@ -62,12 +70,39 @@ module Xdrp
|
|
62
70
|
if @a.length >= 1 and @a[-1][0] == :type then
|
63
71
|
|
64
72
|
if modifier.nil? or (modifier and modifier.empty?) then
|
65
|
-
@a[-1][2] += key.to_s
|
73
|
+
@a[-1][2] += key.to_s.sub('{space}', ' ')
|
66
74
|
else
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
75
|
+
|
76
|
+
if modifier.length < 2 then
|
77
|
+
|
78
|
+
if modifier.first == :shift and (keycode.between?(10,21) \
|
79
|
+
or keycode.between?(24,35) \
|
80
|
+
or keycode.between?(38,48)) then
|
81
|
+
|
82
|
+
char = if key.to_s =~ /[a-z]/ then
|
83
|
+
key.to_s.upcase
|
84
|
+
elsif key.to_s =~ /[0-9]/
|
85
|
+
%w[) ! " £ $ % ^ & * ( ][key.to_s.to_i]
|
86
|
+
else
|
87
|
+
|
88
|
+
lsym = %i(` - = [ ] ; ' # \ , . /)
|
89
|
+
|
90
|
+
if lsym.include? key then
|
91
|
+
|
92
|
+
usym = %w(¬ _ + { } : @ ~ | < > ?)
|
93
|
+
lsym.zip(usym).to_h[key]
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
@a[-1][2] += char
|
100
|
+
|
101
|
+
else
|
102
|
+
@a << [modifier.first, {key: key}]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
71
106
|
|
72
107
|
else
|
73
108
|
|
@@ -77,7 +112,7 @@ module Xdrp
|
|
77
112
|
when 'tab'
|
78
113
|
[:tab]
|
79
114
|
else
|
80
|
-
[:type, {}, key.to_s]
|
115
|
+
[:type, {}, key.to_s.sub(/\{space\}/, ' ')]
|
81
116
|
end
|
82
117
|
|
83
118
|
@a << a
|
@@ -88,7 +123,8 @@ module Xdrp
|
|
88
123
|
|
89
124
|
def on_mousedown(button, x, y)
|
90
125
|
|
91
|
-
return unless @mouse
|
126
|
+
return unless @mouse
|
127
|
+
monitor_app()
|
92
128
|
|
93
129
|
puts "mouse %s button down at %s, %s" % [button, x, y] if @debug
|
94
130
|
add_sleep() if Time.now > (@t1 + 2)
|
@@ -99,7 +135,6 @@ module Xdrp
|
|
99
135
|
def on_mouseup(button, x, y)
|
100
136
|
|
101
137
|
return unless @mouse
|
102
|
-
|
103
138
|
puts "mouse %s button up at %s, %s" % [button, x, y] if @debug
|
104
139
|
end
|
105
140
|
|
@@ -164,6 +199,17 @@ module Xdrp
|
|
164
199
|
@a << [:sleep, {duration: (Time.now - @t1).round}]
|
165
200
|
@t1 = Time.now
|
166
201
|
end
|
202
|
+
|
203
|
+
def monitor_app()
|
204
|
+
|
205
|
+
win = @wm.windows.find {|x| x.active}
|
206
|
+
|
207
|
+
if win.title != @win_title then
|
208
|
+
@win_title = win.title
|
209
|
+
@a << [:window, {activate: win.title}]
|
210
|
+
end
|
211
|
+
|
212
|
+
end
|
167
213
|
|
168
214
|
end
|
169
215
|
|
@@ -172,7 +218,8 @@ module Xdrp
|
|
172
218
|
def initialize(src, debug: false)
|
173
219
|
|
174
220
|
@debug = debug
|
175
|
-
@doc =
|
221
|
+
@doc = Keystroker.new(src, debug: debug).to_doc
|
222
|
+
puts '@doc.xml: ' + @doc.xml if @debug
|
176
223
|
|
177
224
|
end
|
178
225
|
|
@@ -208,13 +255,22 @@ module Xdrp
|
|
208
255
|
sleep duration.to_f
|
209
256
|
end
|
210
257
|
|
211
|
-
def xdo_tab(
|
212
|
-
XDo::Keyboard.tab
|
258
|
+
def xdo_tab(times: 1)
|
259
|
+
times.to_i.times.each { XDo::Keyboard.tab }
|
213
260
|
end
|
214
261
|
|
215
262
|
def xdo_type(s)
|
216
263
|
XDo::Keyboard.simulate(s.gsub('{enter}', "\n"))
|
217
264
|
end
|
265
|
+
|
266
|
+
def xdo_window(activate: '')
|
267
|
+
|
268
|
+
wm = WMCtrl.display
|
269
|
+
window = wm.windows.find {|x| x.title == activate}
|
270
|
+
window.activate
|
271
|
+
|
272
|
+
end
|
273
|
+
|
218
274
|
|
219
275
|
end
|
220
276
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xdrp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -11,31 +11,31 @@ cert_chain:
|
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
/
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
14
|
+
YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjExMTAxMTkzMTE3WhcN
|
15
|
+
MjIxMTAxMTkzMTE3WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
|
16
|
+
cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDBq+SP
|
17
|
+
QnR1vcCQZVU95UyLJG4NSloLn7bvAzcv5dc6maUjxQNCK19lqmPFTov6kJ1v3Rse
|
18
|
+
EEoBygKVXYIghuZalPo3Iw4II4gyBulgnJYc12BE2eBY+fKKJMylE3IEShrMWMfZ
|
19
|
+
Cy6WXP/bYJWG2k3KcUIl6BkA1gxS/5jx4Isq50AGSlE63Bl7t/GG0/as9fm2Hx76
|
20
|
+
zn/DEl5TDblrjAANqagyc7AmtDV4Nr1O4t+8ZZRVGMROyVNB4RVBD2lSyXfyinnw
|
21
|
+
l3NqidqLvktNdvluJXRIP4vihntOIjYc6iYRkvNVj6LcGU+9sQS7PHVYj7FNCR83
|
22
|
+
2S80UKPUVQ0UZT2zO54CxkzXp42DtNbp8jQL6uvGZZVJfkwl26+U25u+haw6UXXz
|
23
|
+
+XF1uHn1XIeER5ZCkLb0346/pTStjTY+6s8ys04ZILPELXC8l+g/qJp5d1ijy1Ds
|
24
|
+
yF10RS6na/RsMrK/U1tI17m3wEN1zcqGF0WUjSnzgt0uuGAed2tV26VtbzUCAwEA
|
25
|
+
AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUWfLEMLPX
|
26
|
+
b1jli6LK6oO9gasVnhEwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
|
27
27
|
c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
28
|
+
BgkqhkiG9w0BAQsFAAOCAYEAbmb/xDn+Tk7hG9j0sMNcRtS9F5TjTFCmoSGksHOw
|
29
|
+
WFGQwycJLPiS7N0djam52fOasrGw+WJS/CpoWaPL4SsSgXLqBwYKJx0efczzpIF0
|
30
|
+
i3gUx5vIp+NtMHsK+TbTeFN+xZRZa29BpBnJHShKDtXlAgyg5if9KGhs0yaRIw2o
|
31
|
+
NiV3epZmnh/l19xhvutTnVyKmLLIxMaYFiswTe3Ndz012OPssS1kBaIcvh6WGFTq
|
32
|
+
Yg5Hf1Ukm77+O5GQkPe2nide1wCC+4yxq0YN6dcKXo+cEy3ZsYHNHQcBdQSK5Z5O
|
33
|
+
7xhvTr5OgQ5Mzf7c/1MPvbuGHnQUD+NrlrL+qf912M7V/LvjGiekfdOKfLEDIQXh
|
34
|
+
oLYMTazde9OcTI1yEfy+9EKOYzh/ss/nB7F56mvNVZUdSzKPUD2Q57UxdZsnEHEE
|
35
|
+
TiejpssCygWf9HFO3IZRrjH3OzSduilBf7oorCJZqxI5d7KbuK6ceM00aCBJibQO
|
36
|
+
K2bW5QcTuyp9GEliuroid41b
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
38
|
+
date: 2021-11-01 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: xdo
|
@@ -61,42 +61,82 @@ dependencies:
|
|
61
61
|
name: rxfhelper
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '1.1'
|
64
67
|
- - ">="
|
65
68
|
- !ruby/object:Gem::Version
|
66
|
-
version: 1.
|
69
|
+
version: 1.1.3
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
67
74
|
- - "~>"
|
68
75
|
- !ruby/object:Gem::Version
|
69
|
-
version: '1.
|
76
|
+
version: '1.1'
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 1.1.3
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: xinput_wrapper
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - "~>"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0.8'
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.8.1
|
70
90
|
type: :runtime
|
71
91
|
prerelease: false
|
72
92
|
version_requirements: !ruby/object:Gem::Requirement
|
73
93
|
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.8'
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 0.8.1
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: ruby-wmctrl
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0.0'
|
74
107
|
- - ">="
|
75
108
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
109
|
+
version: 0.0.8
|
110
|
+
type: :runtime
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
77
114
|
- - "~>"
|
78
115
|
- !ruby/object:Gem::Version
|
79
|
-
version: '
|
116
|
+
version: '0.0'
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: 0.0.8
|
80
120
|
- !ruby/object:Gem::Dependency
|
81
|
-
name:
|
121
|
+
name: keystroker
|
82
122
|
requirement: !ruby/object:Gem::Requirement
|
83
123
|
requirements:
|
84
124
|
- - ">="
|
85
125
|
- !ruby/object:Gem::Version
|
86
|
-
version: 0.
|
126
|
+
version: 0.3.0
|
87
127
|
- - "~>"
|
88
128
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
129
|
+
version: '0.3'
|
90
130
|
type: :runtime
|
91
131
|
prerelease: false
|
92
132
|
version_requirements: !ruby/object:Gem::Requirement
|
93
133
|
requirements:
|
94
134
|
- - ">="
|
95
135
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
136
|
+
version: 0.3.0
|
97
137
|
- - "~>"
|
98
138
|
- !ruby/object:Gem::Version
|
99
|
-
version: '0.
|
139
|
+
version: '0.3'
|
100
140
|
description:
|
101
141
|
email: james@jamesrobertson.eu
|
102
142
|
executables: []
|
@@ -123,7 +163,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
163
|
- !ruby/object:Gem::Version
|
124
164
|
version: '0'
|
125
165
|
requirements: []
|
126
|
-
|
166
|
+
rubyforge_project:
|
167
|
+
rubygems_version: 2.7.10
|
127
168
|
signing_key:
|
128
169
|
specification_version: 4
|
129
170
|
summary: A basic macro recorder for GNU/Linux which uses program xinput to capture
|
metadata.gz.sig
CHANGED
Binary file
|