xdrp 0.1.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/lib/xdrp.rb +70 -14
  4. data.tar.gz.sig +0 -0
  5. metadata +75 -34
  6. metadata.gz.sig +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a6300209a76178b4bffc1b5d3f319597aa206351e89a87b78bba23e41600a14
4
- data.tar.gz: 8796a1037a75704e0dbd4741a1b33c27e54047c2817818be60e0160eb490f830
3
+ metadata.gz: 737ab10b27c806f92b76fd5c622e913df7ae8b97d3027a30c2d37cf27714ca33
4
+ data.tar.gz: 1145d42168fddfb29b70c8339d4a80717873160d261a93cfced4ea17186bf2c4
5
5
  SHA512:
6
- metadata.gz: a758de2052e2302be9506e381aa3fe48d3f26d2853efe8c3bcc64259e2f7ab368851f3b15ef347db0f21092e1a0f696507bff748d63391671ca6f854524f8639
7
- data.tar.gz: 2b8e0d980c43f507ed25815aaafd22a13da09fd71d6bd5310defcf8c298fd8c514f5091112bff0a02a8fc1e18066e507fc9a8e92732afbc6f373a2118380ff09
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
- @a << [modifier.first, {key: key}] if modifier.length < 2
68
- end
69
-
70
- @a.last.last.gsub('{space}',' ')
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 = Rexle.new(RXFHelper.read(src).first)
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(h={})
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.0
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
- YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjAwODA0MTkxNzIzWhcN
15
- MjEwODA0MTkxNzIzWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
- cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC+0Nf7
17
- 3r8/tK7O+C/D9z6Q8Dg8eMFjyC5LJIe1zsGoX3HaT7G6GHFlavar3XZ0UcEBOvdv
18
- khojT/S2viTGUURzB3mQIVQnf2O9JDs9qXroyX6npMymN5XN4OlMiiriOdiFB9kk
19
- y0L8S0Y+MUh0VOg5hN9vP9i2MrKIZKN3YD7G0eGku//a+nNYe3Q1Vq3+6fS4yvai
20
- /N7GW8EmaldaOc7PpoehOKjMnLrWIwpcYKG+D24HIsXZP2+58a3xlIsk0fCcf7IO
21
- a4uCOj2WbjlfGSJoLWFU7szqW/h1nnP8GGaFJTPLjC9mDaGlS+7LGrKEFl+cfhFE
22
- FBI0ZpvWKuaf9IZaEYac8pKJPuzp3LsLAoK2HnhGln6w9dn82F2dFrFhewqPBOjZ
23
- CWxhShTFYxBc2yo3H6oNvETRPO5/qNZblmeHUW24tWsZOsjABLJCBB0iJS61XaQm
24
- n2zJqynV9y4u5/iHKN2+OZAXzG83d62MxU9SHiGP72H+XlPt5momLWQGH8UCAwEA
25
- AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU6LzsKZ6w
26
- GuZSIK6Opg6mWh9mB10wJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
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
- BgkqhkiG9w0BAQsFAAOCAYEAQQTOyG+mZBVdTXl9XhdBoBOP0JNOwjdav2OGDTsb
29
- TGJexyhF4LMMoYZMX0gZOoJ0EfLwE/gJwPg8lc6kNla4KMXNfO881+LV4UKXpgB7
30
- xIWLeYkM/yVOW01XgyoKcag9XI9hJxTCzY0ihbYaUI3CNSf0GQKQiV+DOgm2KLBP
31
- 4Q11hrXke22CfLH/cqEmjlaUDBYInOLYqCTLf08ssgFTd3+DLFpWhAzjBdksIQdA
32
- MenyNICp3O9LfpXRSL4m8tF3d42IV0KxLtRHzO72YHyOCQJPWJ5nHXME9zFdYHyi
33
- P8eBkrKjbJ1wPQnSXMhuxYnwUnKPImDUfwfJFx/xNXVAY9Y8F2T+HajpD6Tm+K9V
34
- uYADR2lL52Rgbgbe3PCZ/oKTW1SjUgaC4MECdc3okdkxFWtysc0L+muLcjVFzUED
35
- Cqn27EoN8MQ4Dix2yFfGGMZBeer8GVOTtrIixZnGr7bSWglZWNDDy/x2ZTBU0jYB
36
- V66loB9HaeHxmtMl4Ylv2wvn
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: 2020-08-04 00:00:00.000000000 Z
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.0.0
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.0'
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: 1.0.0
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: '1.0'
116
+ version: '0.0'
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: 0.0.8
80
120
  - !ruby/object:Gem::Dependency
81
- name: xinput_wrapper
121
+ name: keystroker
82
122
  requirement: !ruby/object:Gem::Requirement
83
123
  requirements:
84
124
  - - ">="
85
125
  - !ruby/object:Gem::Version
86
- version: 0.7.0
126
+ version: 0.3.0
87
127
  - - "~>"
88
128
  - !ruby/object:Gem::Version
89
- version: '0.7'
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.7.0
136
+ version: 0.3.0
97
137
  - - "~>"
98
138
  - !ruby/object:Gem::Version
99
- version: '0.7'
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
- rubygems_version: 3.0.3
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