xdo 0.0.1-x86-linux
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.
- data/Rakefile +46 -0
- data/bin/xinfo.rb +136 -0
- data/lib/README.rdoc +55 -0
- data/lib/xdo.rb +28 -0
- data/lib/xdo/clipboard.rb +109 -0
- data/lib/xdo/drive.rb +66 -0
- data/lib/xdo/keyboard.rb +274 -0
- data/lib/xdo/mouse.rb +143 -0
- data/lib/xdo/wxaliases.rb +57 -0
- data/lib/xdo/xwindow.rb +416 -0
- data/samples/full_demo.rb +189 -0
- data/samples/mouse.rb +27 -0
- data/test/test_clipboard.rb +49 -0
- data/test/test_drive.rb +23 -0
- data/test/test_keyboard.rb +60 -0
- data/test/test_mouse.rb +28 -0
- data/test/test_xwindow.rb +104 -0
- metadata +94 -0
data/samples/mouse.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
#--
|
4
|
+
#This file is part of XDo. Copyright © 2009 Marvin Gülker
|
5
|
+
#XDo is published under Ruby's license. See http://www.ruby-lang.org/en/LICENSE.txt.
|
6
|
+
# Initia in potestate nostra sunt, de eventu fortuna iudicat.
|
7
|
+
#++
|
8
|
+
|
9
|
+
=begin
|
10
|
+
This is an example on how to use the mouse with XDo::Mouse.
|
11
|
+
=end
|
12
|
+
|
13
|
+
#Require the library
|
14
|
+
require "xdo/mouse"
|
15
|
+
|
16
|
+
#Get current cursor position
|
17
|
+
puts "Cursor X pos: #{XDo::Mouse.position[0]}"
|
18
|
+
puts "Cursor Y pos: #{XDo::Mouse.position[1]}"
|
19
|
+
|
20
|
+
#Move the mouse cursor
|
21
|
+
XDo::Mouse.move(10, 10)
|
22
|
+
#Click at the current position
|
23
|
+
XDo::Mouse.click
|
24
|
+
#Do a right-click at (100|100)
|
25
|
+
XDo::Mouse.click(100, 100, XDo::Mouse::RIGHT)
|
26
|
+
#Scroll down a text page
|
27
|
+
XDo::Mouse.wheel(XDo::Mouse::DOWN, 4)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
require "test/unit"
|
4
|
+
require "xdo/clipboard.rb"
|
5
|
+
|
6
|
+
class ClipboardTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_read
|
9
|
+
#Write something to the clipboard first
|
10
|
+
IO.popen("#{XDo::XSEL} -i", "w"){|io| io.write("Some primary test text")}
|
11
|
+
IO.popen("#{XDo::XSEL} -b -i", "w"){|io| io.write("Some clipboard \ntest text")}
|
12
|
+
IO.popen("#{XDo::XSEL} -s -i", "w"){|io| io.write("Some secondary test text")}
|
13
|
+
|
14
|
+
clip = XDo::Clipboard.read(primary: true, secondary: true, clipboard: true)
|
15
|
+
assert_equal("Some primary test text", XDo::Clipboard.read_primary)
|
16
|
+
assert_equal(XDo::Clipboard.read_primary, clip[:primary])
|
17
|
+
assert_equal("Some clipboard \ntest text", XDo::Clipboard.read_clipboard)
|
18
|
+
assert_equal(XDo::Clipboard.read_clipboard, clip[:clipboard])
|
19
|
+
assert_equal("Some secondary test text", XDo::Clipboard.read_secondary)
|
20
|
+
assert_equal(XDo::Clipboard.read_secondary, clip[:secondary])
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_write
|
24
|
+
XDo::Clipboard.write_primary "Primary!"
|
25
|
+
XDo::Clipboard.write_clipboard "Clipboard!\nNewline"
|
26
|
+
XDo::Clipboard.write_secondary "Secondary!"
|
27
|
+
|
28
|
+
assert_equal("Primary!", `#{XDo::XSEL}`)
|
29
|
+
assert_equal("Secondary!", `#{XDo::XSEL} -s`)
|
30
|
+
assert_equal("Clipboard!\nNewline", `#{XDo::XSEL} -b`)
|
31
|
+
|
32
|
+
XDo::Clipboard.write("XYZ", primary: true, secondary: true, clipboard: true)
|
33
|
+
assert_equal({primary: "XYZ", secondary: "XYZ", clipboard: "XYZ"}, XDo::Clipboard.read(primary: true, secondary: true, clipboard: true))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_append
|
37
|
+
["primary", "secondary", "clipboard"].each{|m| XDo::Clipboard.send(:"write_#{m}", "This is... ")}
|
38
|
+
XDo::Clipboard.append("a Test!", primary: true, secondary: true, clipboard: true)
|
39
|
+
["primary", "secondary", "clipboard"].each{|m| assert_equal(XDo::Clipboard.send(:"read_#{m}"), "This is... a Test!")}
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_clear
|
43
|
+
XDo::Clipboard.write("ABC", primary: true, secondary: true, clipboard: true)
|
44
|
+
["primary", "secondary", "clipboard"].each{|m| XDo::Clipboard.send("clear_#{m}")}
|
45
|
+
["primary", "secondary", "clipboard"].each{|m| assert_equal("", XDo::Clipboard.send("read_#{m}"))}
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
data/test/test_drive.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
require "test/unit"
|
4
|
+
require "xdo/drive.rb"
|
5
|
+
|
6
|
+
class DriveTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_eject
|
9
|
+
begin
|
10
|
+
XDo::Drive.eject
|
11
|
+
sleep 2
|
12
|
+
begin
|
13
|
+
XDo::Drive.close
|
14
|
+
rescue XDo::XError #A laptop drive will raise an XDo::XError since it has to be closed manually
|
15
|
+
notify "Couldn't close your CD-ROM drive. Are you using a laptop?"
|
16
|
+
end
|
17
|
+
assert(true)
|
18
|
+
rescue
|
19
|
+
assert(false, $!.message)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
require "test/unit"
|
4
|
+
require "xdo/keyboard.rb"
|
5
|
+
require "xdo/clipboard.rb"
|
6
|
+
require "xdo/xwindow"
|
7
|
+
|
8
|
+
class TestKeyboard < Test::Unit::TestCase
|
9
|
+
|
10
|
+
#Command to start a simple text editor
|
11
|
+
EDITOR_CMD = "gedit"
|
12
|
+
TESTFILENAME = "#{ENV["HOME"]}/abcdefghijklmnopqrstuvwxyzäöüß.txt"
|
13
|
+
TESTTEXT = "This is test\ntext."
|
14
|
+
APPEND = "XYZ"
|
15
|
+
TESTTEXT_RAW = "ä{TAB}?b"
|
16
|
+
TESTTEXT_SPECIAL = "ab{TAB}c{TAB}{TAB}d"
|
17
|
+
|
18
|
+
def self.startup
|
19
|
+
File.open(TESTFILENAME, "w"){|file| file.write(TESTTEXT)}
|
20
|
+
fork{system(%Q|#{EDITOR_CMD} "#{TESTFILENAME}"|)}
|
21
|
+
sleep 5
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_all
|
25
|
+
XDo::Keyboard.simulate("{PGUP}")
|
26
|
+
20.times{XDo::Keyboard.char("Shift+Right")}
|
27
|
+
XDo::Keyboard.ctrl_c
|
28
|
+
sleep 0.2
|
29
|
+
assert_equal(TESTTEXT, XDo::Clipboard.read_clipboard)
|
30
|
+
XDo::Keyboard.simulate("{RIGHT}#{APPEND}")
|
31
|
+
XDo::Keyboard.ctrl_a
|
32
|
+
XDo::Keyboard.ctrl_c
|
33
|
+
sleep 0.2
|
34
|
+
assert_equal(TESTTEXT + APPEND, XDo::Clipboard.read_clipboard)
|
35
|
+
(TESTTEXT.length + APPEND.length + 2).times{XDo::Keyboard.simulate("\b")}
|
36
|
+
XDo::Keyboard.simulate(TESTTEXT_RAW, true)
|
37
|
+
sleep 0.2
|
38
|
+
XDo::Keyboard.ctrl_a
|
39
|
+
XDo::Keyboard.ctrl_c
|
40
|
+
sleep 0.2
|
41
|
+
assert_equal(TESTTEXT_RAW, XDo::Clipboard.read_clipboard)
|
42
|
+
(TESTTEXT_RAW.length + 2).times{XDo::Keyboard.delete}
|
43
|
+
XDo::Keyboard.simulate(TESTTEXT_SPECIAL)
|
44
|
+
sleep 0.2
|
45
|
+
XDo::Keyboard.ctrl_a
|
46
|
+
XDo::Keyboard.ctrl_c
|
47
|
+
sleep 0.2
|
48
|
+
assert_equal(TESTTEXT_SPECIAL.gsub("{TAB}", "\t"), XDo::Clipboard.read_clipboard)
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.shutdown
|
52
|
+
xwin = XDo::XWindow.from_name(EDITOR_CMD)
|
53
|
+
xwin.activate
|
54
|
+
XDo::Keyboard.ctrl_s
|
55
|
+
sleep 0.5
|
56
|
+
xwin.close
|
57
|
+
File.delete(TESTFILENAME)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
data/test/test_mouse.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
require "test/unit"
|
4
|
+
require "xdo/mouse.rb"
|
5
|
+
|
6
|
+
class MouseTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
def test_position
|
9
|
+
str = `#{XDo::XDOTOOL} getmouselocation`
|
10
|
+
xdpos = []
|
11
|
+
xdpos << str.match(/x:\s?(\d+)/)[1]
|
12
|
+
xdpos << str.match(/y:\s?(\d+)/)[1]
|
13
|
+
xdpos.collect!{|o| o.to_i}
|
14
|
+
assert_equal(xdpos, XDo::Mouse.position)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_move
|
18
|
+
XDo::Mouse.move(200, 200)
|
19
|
+
assert_equal([200, 200], XDo::Mouse.position)
|
20
|
+
XDo::Mouse.move(0, 0)
|
21
|
+
assert_equal([0, 0], XDo::Mouse.position)
|
22
|
+
XDo::Mouse.move(0, 200)
|
23
|
+
assert_equal([0, 200], XDo::Mouse.position)
|
24
|
+
XDo::Mouse.move(100, 100)
|
25
|
+
assert_equal([100, 100], XDo::Mouse.position)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#Encoding: UTF-8
|
3
|
+
require "test/unit"
|
4
|
+
require "xdo/xwindow.rb"
|
5
|
+
|
6
|
+
class WindowTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
attr_accessor :xwindow
|
9
|
+
|
10
|
+
#The program MUST NOT start maximized. xdotool has no possibility of
|
11
|
+
#acting on maximized windows.
|
12
|
+
NEW_WINDOW_CMD = "gedit"
|
13
|
+
|
14
|
+
@@xwin = nil
|
15
|
+
|
16
|
+
def self.startup
|
17
|
+
fork{system(NEW_WINDOW_CMD)}
|
18
|
+
XDo::XWindow.wait_for_window(NEW_WINDOW_CMD)
|
19
|
+
@@xwin = XDo::XWindow.from_name(NEW_WINDOW_CMD)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.shutdown
|
23
|
+
@@xwin.close!
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_ewmh_active_window
|
27
|
+
begin
|
28
|
+
XDo::XWindow.from_active
|
29
|
+
rescue XDo::XError
|
30
|
+
#Standard not available
|
31
|
+
notify $!.message
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_ewmh_wm_desktop
|
36
|
+
begin
|
37
|
+
XDo::XWindow.desktop_num
|
38
|
+
rescue XDo::XError
|
39
|
+
#Standard not available
|
40
|
+
notify $!.message
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_ewmh_current_desktop
|
45
|
+
begin
|
46
|
+
XDo::XWindow.desktop
|
47
|
+
rescue XDo::XError
|
48
|
+
#Standard not available
|
49
|
+
notify $!.message
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_exists
|
54
|
+
assert_equal(true, XDo::XWindow.exists?(@@xwin.title))
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_activate_desktop
|
58
|
+
XDo::XWindow.activate_desktop
|
59
|
+
assert_equal(XDo::XWindow.from_name(XDo::XWindow.desktop_name).id, XDo::XWindow.from_active.id)
|
60
|
+
sleep 1
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_active
|
64
|
+
@@xwin.unfocus
|
65
|
+
sleep 1
|
66
|
+
@@xwin.activate
|
67
|
+
assert_equal(@@xwin.id, XDo::XWindow.from_active.id)
|
68
|
+
sleep 1
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_focused
|
72
|
+
@@xwin.unfocus
|
73
|
+
sleep 1
|
74
|
+
@@xwin.focus
|
75
|
+
assert_equal(@@xwin.id, XDo::XWindow.from_focused.id)
|
76
|
+
sleep 1
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_move
|
80
|
+
@@xwin.move(57, 57)
|
81
|
+
assert_in_delta(50, 60, @@xwin.abs_position[0])
|
82
|
+
assert_in_delta(50, 50, @@xwin.abs_position[1])
|
83
|
+
assert_equal(@@xwin.abs_position, @@xwin.rel_position)
|
84
|
+
sleep 1
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_resize
|
88
|
+
@@xwin.resize(500, 500)
|
89
|
+
assert_equal([500, 500], @@xwin.size)
|
90
|
+
sleep 1
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_map
|
94
|
+
@@xwin.unmap
|
95
|
+
sleep 0.2
|
96
|
+
assert_equal(false, @@xwin.visible?)
|
97
|
+
@@xwin.map
|
98
|
+
sleep 0.2
|
99
|
+
assert_equal(true, @@xwin.visible?)
|
100
|
+
sleep 1
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xdo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: x86-linux
|
6
|
+
authors:
|
7
|
+
- "Marvin G\xC3\xBClker"
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-08-23 00:00:00 +02:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: test-unit
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "2.0"
|
24
|
+
version:
|
25
|
+
description: |
|
26
|
+
XDo is a library to automate your mouse, fake keyboard input and
|
27
|
+
manipulate windows in a Linux X server environment. It's wrapped
|
28
|
+
around a lot of command line tools (see requirements) of which xdotool
|
29
|
+
is the main one, the others are usually installed.
|
30
|
+
|
31
|
+
email: sutniuq@gmx.net
|
32
|
+
executables:
|
33
|
+
- xinfo.rb
|
34
|
+
extensions: []
|
35
|
+
|
36
|
+
extra_rdoc_files: []
|
37
|
+
|
38
|
+
files:
|
39
|
+
- bin/xinfo.rb
|
40
|
+
- lib/xdo.rb
|
41
|
+
- lib/xdo/xwindow.rb
|
42
|
+
- lib/xdo/mouse.rb
|
43
|
+
- lib/xdo/drive.rb
|
44
|
+
- lib/xdo/keyboard.rb
|
45
|
+
- lib/xdo/clipboard.rb
|
46
|
+
- lib/xdo/wxaliases.rb
|
47
|
+
- test/test_drive.rb
|
48
|
+
- test/test_clipboard.rb
|
49
|
+
- test/test_keyboard.rb
|
50
|
+
- test/test_xwindow.rb
|
51
|
+
- test/test_mouse.rb
|
52
|
+
- samples/mouse.rb
|
53
|
+
- samples/full_demo.rb
|
54
|
+
- Rakefile
|
55
|
+
- lib/README.rdoc
|
56
|
+
has_rdoc: true
|
57
|
+
homepage:
|
58
|
+
licenses: []
|
59
|
+
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: "1.9"
|
70
|
+
version:
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
version:
|
77
|
+
requirements:
|
78
|
+
- The xdotool command-line tool.
|
79
|
+
- xwininfo (usually installed)
|
80
|
+
- The xsel command-line tool.
|
81
|
+
- eject (usually installed)
|
82
|
+
- xkill (usually installed)
|
83
|
+
- The unit-test gem (will be installed if you don't have it)
|
84
|
+
rubyforge_project: Automations
|
85
|
+
rubygems_version: 1.3.5
|
86
|
+
signing_key:
|
87
|
+
specification_version: 3
|
88
|
+
summary: Simulate keyboard and mouse input via a ruby interface to xdotool and other console programs.
|
89
|
+
test_files:
|
90
|
+
- test/test_drive.rb
|
91
|
+
- test/test_clipboard.rb
|
92
|
+
- test/test_keyboard.rb
|
93
|
+
- test/test_xwindow.rb
|
94
|
+
- test/test_mouse.rb
|