epitools 0.5.73 → 0.5.74
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/epitools/autoloads.rb +11 -13
- data/lib/epitools/clitools.rb +22 -0
- data/lib/epitools/wm.rb +57 -34
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aa961c91eff30c2d7caa3240c9e13c3357f56ccb
|
4
|
+
data.tar.gz: 9cb7a50ae1a80cd54305c1c182fa45d1d576f0f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e51e7eed16a96a82c2ae58589152623157d069f5e7fa096a14985b2cc5a2fb7960ecf3e10ca183ed55c953efd85f3cd414218d514de8800055387fe01b6cf66
|
7
|
+
data.tar.gz: 31a6dbe284c4c0544a093ce2d2937ca8751bf9f71e241911e0ca65e3536ed2fca4216dd20b42021b7e714190d930465fdc86ccc10a462a2d69ebb940c71df08c
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.74
|
data/lib/epitools/autoloads.rb
CHANGED
@@ -27,6 +27,16 @@ module Digest
|
|
27
27
|
autoload :MD5, 'digest/md5'
|
28
28
|
end
|
29
29
|
|
30
|
+
# Network Sockets
|
31
|
+
['IP', 'Basic', 'TCP', 'UDP', 'UNIX', ''].each do |type|
|
32
|
+
autoload :"#{type}Socket", 'socket'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Network Servers
|
36
|
+
['TCP', 'UNIX'].each do |type|
|
37
|
+
autoload :"#{type}Server", 'socket'
|
38
|
+
end
|
39
|
+
|
30
40
|
if RUBY_VERSION["1.8.7"]
|
31
41
|
autoload :Prime, 'mathn'
|
32
42
|
else
|
@@ -58,6 +68,7 @@ autoreq :Mechanize, 'mechanize'
|
|
58
68
|
autoreq :ANSI, 'ansi'
|
59
69
|
autoreq :BSON, 'bson'
|
60
70
|
autoreq :JSON, 'json'
|
71
|
+
autoreq :GeoIP, 'geoip'
|
61
72
|
|
62
73
|
autoreq :AwesomePrint do
|
63
74
|
require 'awesome_print'
|
@@ -68,19 +79,6 @@ autoreq :AwesomePrint do
|
|
68
79
|
end
|
69
80
|
end
|
70
81
|
|
71
|
-
## Network stuff
|
72
|
-
|
73
|
-
# Sockets
|
74
|
-
['IP', 'Basic', 'TCP', 'UDP', 'UNIX', ''].each do |type|
|
75
|
-
autoload :"#{type}Socket", 'socket'
|
76
|
-
end
|
77
|
-
|
78
|
-
# Servers
|
79
|
-
['TCP', 'UNIX'].each do |type|
|
80
|
-
autoload :"#{type}Server", 'socket'
|
81
|
-
end
|
82
|
-
|
83
|
-
|
84
82
|
## YAML hacks (sometimes the module is loaded improperly)
|
85
83
|
|
86
84
|
if defined? YAML and not defined? YAML.parse
|
data/lib/epitools/clitools.rb
CHANGED
@@ -169,3 +169,25 @@ def sudoifnotroot
|
|
169
169
|
exit system("sudo", $PROGRAM_NAME, *ARGV)
|
170
170
|
end
|
171
171
|
end
|
172
|
+
|
173
|
+
|
174
|
+
GEOIP_COUNTRY_DATA = '/usr/share/GeoIP/GeoIP.dat'
|
175
|
+
GEOIP_CITY_DATA = '/usr/share/GeoIP/GeoIPCity.dat'
|
176
|
+
|
177
|
+
def geoip(addr)
|
178
|
+
$geoip ||= begin
|
179
|
+
if File.exists? GEOIP_CITY_DATA
|
180
|
+
geo = GeoIP.new GEOIP_CITY_DATA
|
181
|
+
proc { |addr| geo.city(addr) }
|
182
|
+
|
183
|
+
elsif File.exists? GEOIP_COUNTRY_DATA
|
184
|
+
geo = GeoIP.new GEOIP_COUNTRY_DATA
|
185
|
+
proc { |addr| geo.country(addr) }
|
186
|
+
|
187
|
+
else
|
188
|
+
raise "Can't find GeoIP data in /usr/share/GeoIP."
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
$geoip.call(addr)
|
193
|
+
end
|
data/lib/epitools/wm.rb
CHANGED
@@ -49,7 +49,7 @@ module WM
|
|
49
49
|
current
|
50
50
|
end
|
51
51
|
|
52
|
-
alias_method :active?, :current?
|
52
|
+
alias_method :active?, :current?
|
53
53
|
|
54
54
|
def windows
|
55
55
|
@windows ||= WM.windows.select { |w| w.desktop_id == num }
|
@@ -102,8 +102,17 @@ module WM
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def activate!
|
105
|
-
|
106
|
-
|
105
|
+
system "wmctrl", "-i", "-a", window_id
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# string is made up of regular text, plus <>'d keypresses
|
110
|
+
# eg: "Hello<Ctrl-T><Ctrl-L><Ctrl-Shift-K><Return>!!!"
|
111
|
+
#
|
112
|
+
# TODO: add `xdotool` support
|
113
|
+
#
|
114
|
+
def send_keys(keys)
|
115
|
+
xse(keys)
|
107
116
|
end
|
108
117
|
|
109
118
|
#
|
@@ -309,8 +318,8 @@ module WM
|
|
309
318
|
# thorn 0x00fe /* U+00FE LATIN SMALL LETTER THORN */
|
310
319
|
# ydiaeresis 0x00ff /* U+00FF LATIN SMALL LETTER Y WITH DIAERESIS */
|
311
320
|
#
|
321
|
+
if Path.which("xse")
|
312
322
|
|
313
|
-
if Path.which("xdotool")
|
314
323
|
KEYMAP = {
|
315
324
|
"`" => "grave",
|
316
325
|
" " => "space",
|
@@ -319,49 +328,63 @@ module WM
|
|
319
328
|
"\[" => "Escape",
|
320
329
|
'"' => "quotedbl",
|
321
330
|
}
|
331
|
+
def keys_to_events(keys)
|
322
332
|
|
323
|
-
|
333
|
+
tokens = keys.scan(/(<[^>]+>|.+?)/)
|
324
334
|
|
325
|
-
tokens
|
335
|
+
tokens.flatten.map do |key|
|
336
|
+
mods = []
|
337
|
+
|
338
|
+
if key =~ /^<(.+)>$/
|
339
|
+
|
340
|
+
specials = $1.split("-")
|
341
|
+
key = specials.pop
|
342
|
+
|
343
|
+
key.downcase! if key =~ /^[A-Z]$/
|
344
|
+
|
345
|
+
specials.each do |special|
|
346
|
+
if special =~ /^(Ctrl|Shift|Alt)$/i
|
347
|
+
mods << $1
|
348
|
+
else
|
349
|
+
raise "Error: unknown modifier #{special}"
|
350
|
+
end
|
351
|
+
end
|
326
352
|
|
327
|
-
tokens.map do |token|
|
328
|
-
if token =~ /^<(.+)>$/
|
329
|
-
mods = $1.split(/[-+]/)
|
330
|
-
key = mods.pop
|
331
|
-
# mods.each { |mod| raise "Error: unknown modifier #{mod}" unless mod =~ /^(Ctrl|Shift|Alt)$/i }
|
332
|
-
else
|
333
|
-
mods = []
|
334
|
-
key = token
|
335
353
|
end
|
336
354
|
|
355
|
+
mods << "Shift" if key =~ /^[A-Z\~\!\@\#\$\%\^\&\*\(\)\_\+]$/
|
356
|
+
|
337
357
|
if key =~ /^[A-Z0-9]$/i or key.size > 1
|
338
|
-
|
358
|
+
keyname = key
|
339
359
|
else
|
340
|
-
|
360
|
+
keyname = KEYMAP[key] || ("0x%x" % key.ord)
|
341
361
|
end
|
342
362
|
|
343
|
-
|
363
|
+
"#{mods.join(" ")}<Key>#{keyname}"
|
344
364
|
end
|
345
365
|
end
|
346
366
|
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
cmd
|
360
|
-
|
361
|
-
system(*cmd)
|
367
|
+
def xse(keys)
|
368
|
+
temp = Tempfile.new("xse")
|
369
|
+
events = keys_to_events(keys)
|
370
|
+
|
371
|
+
# p events
|
372
|
+
eventstring = events.map { |e| e + "\n" }.join("")
|
373
|
+
|
374
|
+
temp.write eventstring
|
375
|
+
temp.flush
|
376
|
+
temp.seek 0
|
377
|
+
# p [:temp, temp.read]
|
378
|
+
|
379
|
+
cmd = "xse", "-window", window_id, "-file", temp.path
|
380
|
+
# p [:cmd, cmd]
|
381
|
+
unless system(*cmd)
|
382
|
+
raise "Error: couldn't send key commands to 'xse'. (Is xsendevents installed?)"
|
383
|
+
end
|
362
384
|
end
|
363
|
-
end
|
364
385
|
|
365
|
-
|
386
|
+
end # Path.which('xse')
|
387
|
+
|
388
|
+
end # class Window
|
366
389
|
|
367
390
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epitools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.74
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- epitron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|