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.
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