x_do 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,12 +1,11 @@
1
1
  source 'http://rubygems.org'
2
- # Add dependencies required to use your gem here.
2
+
3
3
  gem 'ffi', '>= 1.0.0'
4
4
 
5
- # Add dependencies to develop your gem here.
6
- # Include everything needed to run rake, tests, features, etc.
7
5
  group :development do
8
- gem 'rspec', '~> 2.5.0'
9
- gem 'bundler', '~> 1.0.0'
10
- gem 'jeweler', '~> 1.5.2'
6
+ gem 'rdoc', '>= 3.12'
7
+ gem 'rspec', '>= 2.8.0'
8
+ gem 'bundler', '>= 1.0.0'
9
+ gem 'jeweler', '>= 1.6.4'
11
10
  gem 'rcov', '>= 0'
12
11
  end
@@ -1,31 +1,34 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- diff-lcs (1.1.2)
5
- ffi (1.0.7)
6
- rake (>= 0.8.7)
4
+ diff-lcs (1.1.3)
5
+ ffi (1.0.11)
7
6
  git (1.2.5)
8
- jeweler (1.5.2)
9
- bundler (~> 1.0.0)
7
+ jeweler (1.6.4)
8
+ bundler (~> 1.0)
10
9
  git (>= 1.2.5)
11
10
  rake
12
- rake (0.8.7)
13
- rcov (0.9.9)
14
- rspec (2.5.0)
15
- rspec-core (~> 2.5.0)
16
- rspec-expectations (~> 2.5.0)
17
- rspec-mocks (~> 2.5.0)
18
- rspec-core (2.5.1)
19
- rspec-expectations (2.5.0)
11
+ json (1.6.4)
12
+ rake (0.9.2.2)
13
+ rcov (0.9.11)
14
+ rdoc (3.12)
15
+ json (~> 1.4)
16
+ rspec (2.8.0)
17
+ rspec-core (~> 2.8.0)
18
+ rspec-expectations (~> 2.8.0)
19
+ rspec-mocks (~> 2.8.0)
20
+ rspec-core (2.8.0)
21
+ rspec-expectations (2.8.0)
20
22
  diff-lcs (~> 1.1.2)
21
- rspec-mocks (2.5.0)
23
+ rspec-mocks (2.8.0)
22
24
 
23
25
  PLATFORMS
24
26
  ruby
25
27
 
26
28
  DEPENDENCIES
27
- bundler (~> 1.0.0)
29
+ bundler (>= 1.0.0)
28
30
  ffi (>= 1.0.0)
29
- jeweler (~> 1.5.2)
31
+ jeweler (>= 1.6.4)
30
32
  rcov
31
- rspec (~> 2.5.0)
33
+ rdoc (>= 3.12)
34
+ rspec (>= 2.8.0)
@@ -14,7 +14,7 @@ Up-to-date RDocs are available at http://rdoc.info/github/pwnall/x_do/frames
14
14
 
15
15
  Tests require that xdotool is installed and on your path. On an Ubuntu system, you can get it by installing the xdotool package.
16
16
 
17
- The terminal running the tests should remain focused while the suite runs, otherwise some tests will fail.
17
+ The terminal running the tests should remain focused while the suite runs, otherwise some tests will fail. The window should also not be maximized.
18
18
 
19
19
  == Contributing to x_do
20
20
 
data/Rakefile CHANGED
@@ -42,7 +42,7 @@ end
42
42
 
43
43
  task :default => :spec
44
44
 
45
- require 'rake/rdoctask'
45
+ require 'rdoc/task'
46
46
  Rake::RDocTask.new do |rdoc|
47
47
  version = File.exist?('VERSION') ? File.read('VERSION') : ''
48
48
 
@@ -52,6 +52,6 @@ Rake::RDocTask.new do |rdoc|
52
52
  rdoc.rdoc_files.include('lib/**/*.rb')
53
53
  end
54
54
 
55
- require 'tasks/ffi_codegen.rb'
55
+ load 'tasks/ffi_codegen.rb'
56
56
  task :package => :ffi_header
57
57
  task :spec => :ffi_header
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -52,6 +52,7 @@ class XDo
52
52
  # :class_name:: grep pattern that the window class (name?) has to match
53
53
  # :pid:: only return windows whose process ID equals this
54
54
  # :screen:: only return windows in this screen number
55
+ # :desktop:: only return windows with this desktop number
55
56
  # :visible:: if true, only visible windows will be returned
56
57
  #
57
58
  # Returns an array of Window instances that match the query.
@@ -7,30 +7,43 @@ class XDo
7
7
  module FFILib
8
8
  # Constant values extracted from headers.
9
9
  module Consts
10
- XDO_SUCCESS = 0
11
10
  XDO_ERROR = 1
12
- SEARCH_PID = 0x0008
13
- SEARCH_ANY = nil
14
- SEARCH_ALL = nil
11
+ XDO_SUCCESS = 0
15
12
  SEARCH_TITLE = 0x0001
16
13
  SEARCH_CLASS = 0x0002
17
14
  SEARCH_NAME = 0x0004
15
+ SEARCH_PID = 0x0008
16
+ SEARCH_ONLYVISIBLE = 0x0010
18
17
  SEARCH_SCREEN = 0x0020
19
18
  SEARCH_CLASSNAME = 0x0040
20
- SEARCH_ONLYVISIBLE = 0x0010
19
+ SEARCH_DESKTOP = 0x0080
20
+ SEARCH_ANY = nil
21
+ SEARCH_ALL = nil
21
22
  SIZE_USEHINTS = 1
23
+ SIZE_USEHINTS_X = 2
24
+ SIZE_USEHINTS_Y = 4
22
25
  SIZE_TO = 0
23
26
  SIZE_FROM = 1
27
+ XDO_FIND_PARENTS = 0
28
+ XDO_FIND_CHILDREN = 1
29
+ XDO_FEATURE_XTEST = nil
24
30
  end # module XDo::FFILib::Consts
25
31
 
26
32
  # Status returned by libxdo functions.
27
33
  Status = enum [
28
- :success, Consts::XDO_SUCCESS,
29
34
  :error, Consts::XDO_ERROR,
35
+ :success, Consts::XDO_SUCCESS,
30
36
  ]
31
37
 
32
38
  # Search directions.
33
39
  Direction = enum [
40
+ :parents, Consts::XDO_FIND_PARENTS,
41
+ :children, Consts::XDO_FIND_CHILDREN,
42
+ ]
43
+
44
+ # Optional features.
45
+ Feature = enum [
46
+ :xtest, Consts::XDO_FEATURE_XTEST,
34
47
  ]
35
48
 
36
49
  end # namespace XDo::FFILib
@@ -24,6 +24,8 @@ module FFILib
24
24
  attach_function :xdo_window_focus, [:pointer, :window], XDo::FFILib::Status
25
25
  attach_function :xdo_window_raise, [:pointer, :window], XDo::FFILib::Status
26
26
 
27
+ attach_function :xdo_get_window_name, [:pointer, :window, :pointer, :pointer,
28
+ :pointer], XDo::FFILib::Status
27
29
  attach_function :xdo_get_window_location, [:pointer, :window, :pointer,
28
30
  :pointer, :pointer],
29
31
  XDo::FFILib::Status
@@ -19,7 +19,10 @@ module FFILib
19
19
  :keycode_high, :int,
20
20
  :keycode_low, :int,
21
21
  :keysyms_per_keycode, :int,
22
- :close_display_when_freed, :int
22
+ :close_display_when_freed, :int,
23
+ :quiet, :int,
24
+ :debug, :int,
25
+ :features_mask, :int
23
26
  end # class XDo::FFILib::XDoContext
24
27
 
25
28
  # :nodoc: lifted from xdo.h
@@ -33,7 +36,9 @@ module FFILib
33
36
  :only_visible, :int,
34
37
  :screen, :int,
35
38
  :require, :int,
36
- :searchmask, :int
39
+ :searchmask, :int,
40
+ :desktop, :long,
41
+ :limit, :uint
37
42
  end # class XDo::FFILib::XDoSearch
38
43
 
39
44
  # :nodoc: Window from X11/X.h (Window -> XID -> unsigned long)
@@ -43,7 +43,9 @@ class XDoSearch
43
43
 
44
44
  [
45
45
  [:pid, :pid, XDo::FFILib::Consts::SEARCH_PID],
46
- [:screen, :screen, XDo::FFILib::Consts::SEARCH_SCREEN]
46
+ [:screen, :screen, XDo::FFILib::Consts::SEARCH_SCREEN],
47
+ [:desktop, :desktop, XDo::FFILib::Consts::SEARCH_DESKTOP]
48
+
47
49
  ].each do |option, struct_key, bit|
48
50
  if options[option]
49
51
  search[:searchmask] |= bit
@@ -53,6 +55,8 @@ class XDoSearch
53
55
  end
54
56
  end
55
57
 
58
+ search[:limit] = options[:limit].to_i || 0
59
+
56
60
  search
57
61
  end
58
62
  end # class XDo::FFILib::XDoSearch
@@ -23,7 +23,7 @@ class Keyboard
23
23
  XDo::FFILib.xdo_type @_xdo_pointer, 0, string, (delay * 1_000_000).to_i
24
24
  end
25
25
 
26
- # Sends a keysequence to this window.
26
+ # Sends a keysequence to the active window.
27
27
  #
28
28
  # Examples: "alt+Return", "Alt_L+Tab", "l", "semicolon"
29
29
  def type_keysequence(keysequence, delay = 0.012)
@@ -31,7 +31,7 @@ class Keyboard
31
31
  (delay * 1_000_000).to_i
32
32
  end
33
33
 
34
- # Presses a keysequence in this window.
34
+ # Presses a keysequence in the active window.
35
35
  #
36
36
  # Examples: "alt+Return", "Alt_L+Tab", "l", "semicolon"
37
37
  def press_keysequence(keysequence, delay = 0.012)
@@ -39,7 +39,7 @@ class Keyboard
39
39
  (delay * 1_000_000).to_i
40
40
  end
41
41
 
42
- # Releases a keysequence in this window.
42
+ # Releases a keysequence in the active window.
43
43
  #
44
44
  # Examples: "alt+Return", "Alt_L+Tab", "l", "semicolon"
45
45
  def release_keysequence(keysequence, delay = 0.012)
@@ -23,6 +23,17 @@ class Window
23
23
  XDo::FFILib.xdo_window_get_pid @_xdo_pointer, @_window
24
24
  end
25
25
 
26
+ # The name of the window.
27
+ def name
28
+ name_ppointer = FFI::MemoryPointer.new :pointer, 1
29
+ len_pointer = FFI::MemoryPointer.new :int, 1
30
+ name_type_pointer = FFI::MemoryPointer.new :int, 1
31
+ XDo::FFILib.xdo_get_window_name @_xdo_pointer, @_window, name_ppointer,
32
+ len_pointer, name_type_pointer
33
+ name_pointer = name_ppointer.read_pointer
34
+ name_pointer.nil? ? nil : name_pointer.read_string(len_pointer.read_int)
35
+ end
36
+
26
37
  # [x, y] array containing the window's coordinates.
27
38
  def location
28
39
  x_pointer = FFI::MemoryPointer.new :int, 1
@@ -178,6 +189,15 @@ class Window
178
189
  def hash
179
190
  _window.hash
180
191
  end
192
+
193
+ # :nodoc: override to_s for so Windows don't look so bad
194
+ def to_s
195
+ name_str = name.inspect
196
+ at_str = location.inspect
197
+ size_str = size.inspect
198
+ "#<XDo::Window:#{_window} pid=#{pid} title=#{name.inspect} at=#{at_str} " +
199
+ "size=#{size_str}>"
200
+ end
181
201
  end # class XDo::Window
182
202
 
183
203
  end # namespace XDo
@@ -66,6 +66,18 @@ describe XDo do
66
66
  it 'should include the focused window' do
67
67
  windows.should include(xdo.focused_window)
68
68
  end
69
+
70
+ it 'should return more than 3 windows' do
71
+ windows.should have_at_least(3).windows
72
+ end
73
+ end
74
+
75
+ describe 'with limit' do
76
+ let(:windows) { xdo.find_windows :limit => 3 }
77
+
78
+ it 'should only return 3 windows' do
79
+ windows.should have(3).windows
80
+ end
69
81
  end
70
82
 
71
83
  describe 'with the current PID' do
@@ -84,6 +96,10 @@ describe XDo do
84
96
  it 'should be an XDo::Window' do
85
97
  window.should be_kind_of(XDo::Window)
86
98
  end
99
+
100
+ it 'should match the output of xdotool' do
101
+ window._window.should == `xdotool getactivewindow`.to_i
102
+ end
87
103
  end
88
104
 
89
105
  describe 'focused_window' do
@@ -18,6 +18,10 @@ describe XDo::FFILib do
18
18
  it 'should set maximum depth to -1' do
19
19
  search[:max_depth].should == -1
20
20
  end
21
+
22
+ it 'should set limit to 0' do
23
+ search[:limit].should == 0
24
+ end
21
25
  end
22
26
 
23
27
  describe 'with a set maximum depth' do
@@ -122,5 +126,15 @@ describe XDo::FFILib do
122
126
  search[:pid].should == 42
123
127
  end
124
128
  end
129
+
130
+ describe 'with a limit' do
131
+ let(:search) do
132
+ XDo::FFILib::XDoSearch.from_options :limit => 5
133
+ end
134
+
135
+ it 'should set fields correctly' do
136
+ search[:limit].should == 5
137
+ end
138
+ end
125
139
  end
126
140
  end
@@ -20,13 +20,13 @@ describe XDo::Keyboard do
20
20
  end
21
21
  end
22
22
 
23
- describe 'after typing injected' do
23
+ describe 'after typing kbd_injected' do
24
24
  before do
25
- keyboard.type_string "injected\n"
25
+ keyboard.type_string "kbd_injected\n"
26
26
  end
27
27
 
28
28
  it 'should reflect the string in gets' do
29
- $stdin.gets.should == "injected\n"
29
+ $stdin.gets.should == "kbd_injected\n"
30
30
  end
31
31
  end
32
32
  end
@@ -34,6 +34,14 @@ describe XDo::Window do
34
34
  window.pid.should_not == 0
35
35
  end
36
36
 
37
+ describe 'name' do
38
+ let(:name) { window.name }
39
+
40
+ it 'should not be empty' do
41
+ name.should_not be_empty
42
+ end
43
+ end
44
+
37
45
  describe 'location' do
38
46
  let(:location) { window.location }
39
47
 
@@ -88,6 +96,7 @@ describe XDo::Window do
88
96
  size = window.size
89
97
  middle = [size.first / 2, size.last / 2]
90
98
  window.move_mouse(*middle)
99
+ sleep 0.1
91
100
  end
92
101
  after do
93
102
  xdo.mouse.move(*@old_mouse_location)
@@ -117,7 +126,7 @@ describe XDo::Window do
117
126
  describe 'after left click outside menu' do
118
127
  before do
119
128
  xdo.mouse.move_relative -20, -20
120
- xdo.mouse.click 3
129
+ xdo.mouse.click 1
121
130
  sleep 0.1
122
131
  end
123
132
 
@@ -128,13 +137,13 @@ describe XDo::Window do
128
137
  end
129
138
  end
130
139
 
131
- describe 'after typing injected in the window' do
140
+ describe 'after typing wnd_injected in the window' do
132
141
  before do
133
- window.type_string "injected\n"
142
+ window.type_string "wnd_injected\n"
134
143
  end
135
144
 
136
145
  it 'should reflect the string in gets' do
137
- $stdin.gets.should == "injected\n"
146
+ $stdin.gets.should == "wnd_injected\n"
138
147
  end
139
148
  end
140
149
  end
@@ -78,6 +78,10 @@ module Tasks
78
78
  sizing_consts = resolve_constants(/^SIZE_/, '%d')
79
79
  # Search direction.
80
80
  direction_consts = resolve_constants(/^XDO_FIND_/, '%d')
81
+ stat_consts.delete_if { |k, v| direction_consts[k] }
82
+ # Features.
83
+ feature_consts = resolve_constants(/^XDO_FEATURE_/, '%d')
84
+ stat_consts.delete_if { |k, v| feature_consts[k] }
81
85
 
82
86
  f.write "# :nodoc: namespace\n"
83
87
  f.write "class XDo\n\n"
@@ -90,6 +94,7 @@ module Tasks
90
94
  output_constants search_consts, f
91
95
  output_constants sizing_consts, f
92
96
  output_constants direction_consts, f
97
+ output_constants feature_consts, f
93
98
  f.write " end # module XDo::FFILib::Consts\n\n"
94
99
 
95
100
  f.write " # Status returned by libxdo functions.\n"
@@ -100,6 +105,10 @@ module Tasks
100
105
  output_enum 'Direction', direction_consts, 'XDO_FIND_(.*)', f
101
106
  f.write "\n"
102
107
 
108
+ f.write " # Optional features.\n"
109
+ output_enum 'Feature', feature_consts, 'XDO_FEATURE_(.*)', f
110
+ f.write "\n"
111
+
103
112
  f.write "end # namespace XDo::FFILib\n"
104
113
  f.write "end # namespace XDo\n"
105
114
  end
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{x_do}
8
- s.version = "0.1.1"
7
+ s.name = "x_do"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Victor Costan"]
12
- s.date = %q{2011-04-22}
13
- s.description = %q{Wraps libxdo using ffi, for high performance}
14
- s.email = %q{victor@costan.us}
12
+ s.date = "2012-01-13"
13
+ s.description = "Wraps libxdo using ffi, for high performance"
14
+ s.email = "victor@costan.us"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.rdoc"
@@ -45,29 +45,21 @@ Gem::Specification.new do |s|
45
45
  "tasks/ffi_codegen.rb",
46
46
  "x_do.gemspec"
47
47
  ]
48
- s.homepage = %q{http://github.com/pwnall/x_do}
48
+ s.homepage = "http://github.com/pwnall/x_do"
49
49
  s.licenses = ["MIT"]
50
50
  s.require_paths = ["lib"]
51
- s.rubygems_version = %q{1.7.2}
52
- s.summary = %q{Ruby FFI for libxdo (X mouse / keypress injector)}
53
- s.test_files = [
54
- "spec/spec_helper.rb",
55
- "spec/support/stdlib.rb",
56
- "spec/x_do/context_spec.rb",
57
- "spec/x_do/ffi_lib_ext_spec.rb",
58
- "spec/x_do/keyboard_spec.rb",
59
- "spec/x_do/mouse_spec.rb",
60
- "spec/x_do/window_spec.rb"
61
- ]
51
+ s.rubygems_version = "1.8.15"
52
+ s.summary = "Ruby FFI for libxdo (X mouse / keypress injector)"
62
53
 
63
54
  if s.respond_to? :specification_version then
64
55
  s.specification_version = 3
65
56
 
66
57
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
67
58
  s.add_runtime_dependency(%q<ffi>, [">= 1.0.0"])
68
- s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
69
- s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
70
- s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
59
+ s.add_development_dependency(%q<rdoc>, [">= 3.12"])
60
+ s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
61
+ s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
62
+ s.add_development_dependency(%q<jeweler>, [">= 1.6.4"])
71
63
  s.add_development_dependency(%q<rcov>, [">= 0"])
72
64
  s.add_runtime_dependency(%q<ffi>, [">= 1.0.0"])
73
65
  s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
@@ -76,9 +68,10 @@ Gem::Specification.new do |s|
76
68
  s.add_development_dependency(%q<rcov>, [">= 0"])
77
69
  else
78
70
  s.add_dependency(%q<ffi>, [">= 1.0.0"])
79
- s.add_dependency(%q<rspec>, ["~> 2.5.0"])
80
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
81
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
71
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
72
+ s.add_dependency(%q<rspec>, [">= 2.8.0"])
73
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
74
+ s.add_dependency(%q<jeweler>, [">= 1.6.4"])
82
75
  s.add_dependency(%q<rcov>, [">= 0"])
83
76
  s.add_dependency(%q<ffi>, [">= 1.0.0"])
84
77
  s.add_dependency(%q<rspec>, ["~> 2.5.0"])
@@ -88,9 +81,10 @@ Gem::Specification.new do |s|
88
81
  end
89
82
  else
90
83
  s.add_dependency(%q<ffi>, [">= 1.0.0"])
91
- s.add_dependency(%q<rspec>, ["~> 2.5.0"])
92
- s.add_dependency(%q<bundler>, ["~> 1.0.0"])
93
- s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
84
+ s.add_dependency(%q<rdoc>, [">= 3.12"])
85
+ s.add_dependency(%q<rspec>, [">= 2.8.0"])
86
+ s.add_dependency(%q<bundler>, [">= 1.0.0"])
87
+ s.add_dependency(%q<jeweler>, [">= 1.6.4"])
94
88
  s.add_dependency(%q<rcov>, [">= 0"])
95
89
  s.add_dependency(%q<ffi>, [">= 1.0.0"])
96
90
  s.add_dependency(%q<rspec>, ["~> 2.5.0"])
metadata CHANGED
@@ -1,188 +1,145 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: x_do
3
- version: !ruby/object:Gem::Version
4
- hash: 25
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Victor Costan
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-04-22 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-01-13 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: &16323440 !ruby/object:Gem::Requirement
22
17
  none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 23
27
- segments:
28
- - 1
29
- - 0
30
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
31
21
  version: 1.0.0
32
- version_requirements: *id001
33
- name: ffi
34
- prerelease: false
35
22
  type: :runtime
36
- - !ruby/object:Gem::Dependency
37
- requirement: &id002 !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ version_requirements: *16323440
25
+ - !ruby/object:Gem::Dependency
26
+ name: rdoc
27
+ requirement: &16322640 !ruby/object:Gem::Requirement
38
28
  none: false
39
- requirements:
40
- - - ~>
41
- - !ruby/object:Gem::Version
42
- hash: 27
43
- segments:
44
- - 2
45
- - 5
46
- - 0
47
- version: 2.5.0
48
- version_requirements: *id002
49
- name: rspec
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '3.12'
33
+ type: :development
50
34
  prerelease: false
35
+ version_requirements: *16322640
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &16321980 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 2.8.0
51
44
  type: :development
52
- - !ruby/object:Gem::Dependency
53
- requirement: &id003 !ruby/object:Gem::Requirement
45
+ prerelease: false
46
+ version_requirements: *16321980
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: &16321260 !ruby/object:Gem::Requirement
54
50
  none: false
55
- requirements:
56
- - - ~>
57
- - !ruby/object:Gem::Version
58
- hash: 23
59
- segments:
60
- - 1
61
- - 0
62
- - 0
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
63
54
  version: 1.0.0
64
- version_requirements: *id003
65
- name: bundler
66
- prerelease: false
67
55
  type: :development
68
- - !ruby/object:Gem::Dependency
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
72
- - - ~>
73
- - !ruby/object:Gem::Version
74
- hash: 7
75
- segments:
76
- - 1
77
- - 5
78
- - 2
79
- version: 1.5.2
80
- version_requirements: *id004
81
- name: jeweler
82
56
  prerelease: false
83
- type: :development
84
- - !ruby/object:Gem::Dependency
85
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *16321260
58
+ - !ruby/object:Gem::Dependency
59
+ name: jeweler
60
+ requirement: &16320480 !ruby/object:Gem::Requirement
86
61
  none: false
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- hash: 3
91
- segments:
92
- - 0
93
- version: "0"
94
- version_requirements: *id005
95
- name: rcov
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 1.6.4
66
+ type: :development
96
67
  prerelease: false
68
+ version_requirements: *16320480
69
+ - !ruby/object:Gem::Dependency
70
+ name: rcov
71
+ requirement: &16319660 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
97
77
  type: :development
98
- - !ruby/object:Gem::Dependency
99
- requirement: &id006 !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ version_requirements: *16319660
80
+ - !ruby/object:Gem::Dependency
81
+ name: ffi
82
+ requirement: &16289940 !ruby/object:Gem::Requirement
100
83
  none: false
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- hash: 23
105
- segments:
106
- - 1
107
- - 0
108
- - 0
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
109
87
  version: 1.0.0
110
- version_requirements: *id006
111
- name: ffi
112
- prerelease: false
113
88
  type: :runtime
114
- - !ruby/object:Gem::Dependency
115
- requirement: &id007 !ruby/object:Gem::Requirement
89
+ prerelease: false
90
+ version_requirements: *16289940
91
+ - !ruby/object:Gem::Dependency
92
+ name: rspec
93
+ requirement: &16289280 !ruby/object:Gem::Requirement
116
94
  none: false
117
- requirements:
95
+ requirements:
118
96
  - - ~>
119
- - !ruby/object:Gem::Version
120
- hash: 27
121
- segments:
122
- - 2
123
- - 5
124
- - 0
97
+ - !ruby/object:Gem::Version
125
98
  version: 2.5.0
126
- version_requirements: *id007
127
- name: rspec
128
- prerelease: false
129
99
  type: :development
130
- - !ruby/object:Gem::Dependency
131
- requirement: &id008 !ruby/object:Gem::Requirement
100
+ prerelease: false
101
+ version_requirements: *16289280
102
+ - !ruby/object:Gem::Dependency
103
+ name: bundler
104
+ requirement: &16288220 !ruby/object:Gem::Requirement
132
105
  none: false
133
- requirements:
106
+ requirements:
134
107
  - - ~>
135
- - !ruby/object:Gem::Version
136
- hash: 23
137
- segments:
138
- - 1
139
- - 0
140
- - 0
108
+ - !ruby/object:Gem::Version
141
109
  version: 1.0.0
142
- version_requirements: *id008
143
- name: bundler
144
- prerelease: false
145
110
  type: :development
146
- - !ruby/object:Gem::Dependency
147
- requirement: &id009 !ruby/object:Gem::Requirement
111
+ prerelease: false
112
+ version_requirements: *16288220
113
+ - !ruby/object:Gem::Dependency
114
+ name: jeweler
115
+ requirement: &16287340 !ruby/object:Gem::Requirement
148
116
  none: false
149
- requirements:
117
+ requirements:
150
118
  - - ~>
151
- - !ruby/object:Gem::Version
152
- hash: 7
153
- segments:
154
- - 1
155
- - 5
156
- - 2
119
+ - !ruby/object:Gem::Version
157
120
  version: 1.5.2
158
- version_requirements: *id009
159
- name: jeweler
160
- prerelease: false
161
121
  type: :development
162
- - !ruby/object:Gem::Dependency
163
- requirement: &id010 !ruby/object:Gem::Requirement
164
- none: false
165
- requirements:
166
- - - ">="
167
- - !ruby/object:Gem::Version
168
- hash: 3
169
- segments:
170
- - 0
171
- version: "0"
172
- version_requirements: *id010
173
- name: rcov
174
122
  prerelease: false
123
+ version_requirements: *16287340
124
+ - !ruby/object:Gem::Dependency
125
+ name: rcov
126
+ requirement: &16286680 !ruby/object:Gem::Requirement
127
+ none: false
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
175
132
  type: :development
133
+ prerelease: false
134
+ version_requirements: *16286680
176
135
  description: Wraps libxdo using ffi, for high performance
177
136
  email: victor@costan.us
178
137
  executables: []
179
-
180
138
  extensions: []
181
-
182
- extra_rdoc_files:
139
+ extra_rdoc_files:
183
140
  - LICENSE.txt
184
141
  - README.rdoc
185
- files:
142
+ files:
186
143
  - .document
187
144
  - .project
188
145
  - .rspec
@@ -211,43 +168,31 @@ files:
211
168
  - tasks/ffi_codegen.rb
212
169
  - x_do.gemspec
213
170
  homepage: http://github.com/pwnall/x_do
214
- licenses:
171
+ licenses:
215
172
  - MIT
216
173
  post_install_message:
217
174
  rdoc_options: []
218
-
219
- require_paths:
175
+ require_paths:
220
176
  - lib
221
- required_ruby_version: !ruby/object:Gem::Requirement
177
+ required_ruby_version: !ruby/object:Gem::Requirement
222
178
  none: false
223
- requirements:
224
- - - ">="
225
- - !ruby/object:Gem::Version
226
- hash: 3
227
- segments:
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ segments:
228
184
  - 0
229
- version: "0"
230
- required_rubygems_version: !ruby/object:Gem::Requirement
185
+ hash: 1270458090395256216
186
+ required_rubygems_version: !ruby/object:Gem::Requirement
231
187
  none: false
232
- requirements:
233
- - - ">="
234
- - !ruby/object:Gem::Version
235
- hash: 3
236
- segments:
237
- - 0
238
- version: "0"
188
+ requirements:
189
+ - - ! '>='
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
239
192
  requirements: []
240
-
241
193
  rubyforge_project:
242
- rubygems_version: 1.7.2
194
+ rubygems_version: 1.8.15
243
195
  signing_key:
244
196
  specification_version: 3
245
197
  summary: Ruby FFI for libxdo (X mouse / keypress injector)
246
- test_files:
247
- - spec/spec_helper.rb
248
- - spec/support/stdlib.rb
249
- - spec/x_do/context_spec.rb
250
- - spec/x_do/ffi_lib_ext_spec.rb
251
- - spec/x_do/keyboard_spec.rb
252
- - spec/x_do/mouse_spec.rb
253
- - spec/x_do/window_spec.rb
198
+ test_files: []