rbindkeys 0.0.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.
- data/.gitignore +23 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +52 -0
- data/Rakefile +11 -0
- data/bin/rbindkeys +5 -0
- data/lib/rbindkeys.rb +38 -0
- data/lib/rbindkeys/bind_resolver.rb +58 -0
- data/lib/rbindkeys/bind_set.rb +10 -0
- data/lib/rbindkeys/bind_tree.rb +148 -0
- data/lib/rbindkeys/cli.rb +103 -0
- data/lib/rbindkeys/device.rb +25 -0
- data/lib/rbindkeys/device_operator.rb +78 -0
- data/lib/rbindkeys/fix_resolver.rb +26 -0
- data/lib/rbindkeys/key_bind.rb +21 -0
- data/lib/rbindkeys/key_event_handler.rb +243 -0
- data/lib/rbindkeys/key_event_handler/configurer.rb +142 -0
- data/lib/rbindkeys/log_utils.rb +51 -0
- data/lib/rbindkeys/observer.rb +140 -0
- data/lib/rbindkeys/version.rb +3 -0
- data/lib/rbindkeys/virtual_device.rb +14 -0
- data/lib/rbindkeys/window_matcher.rb +35 -0
- data/rbindkeys.gemspec +26 -0
- data/sample/emacs.rb +100 -0
- data/sample/swap_left_ctrl_and_caps.rb +4 -0
- data/spec/bind_resolver_spec.rb +101 -0
- data/spec/bind_tree_bind_spec.rb +48 -0
- data/spec/bind_tree_resolve_for_pressed_event_spec.rb +74 -0
- data/spec/bind_tree_resolve_for_released_event_spec.rb +63 -0
- data/spec/cli_spec.rb +81 -0
- data/spec/device_operator_spec.rb +57 -0
- data/spec/fix_resolver_spec.rb +57 -0
- data/spec/key_event_handler/configurer_spec.rb +201 -0
- data/spec/key_event_handler/handle_spec.rb +222 -0
- metadata +190 -0
@@ -0,0 +1,222 @@
|
|
1
|
+
# -*- coding:utf-8; mode:ruby; -*-
|
2
|
+
|
3
|
+
require 'rbindkeys'
|
4
|
+
require 'revdev'
|
5
|
+
|
6
|
+
include Rbindkeys
|
7
|
+
|
8
|
+
describe KeyEventHandler do
|
9
|
+
before do
|
10
|
+
@ope = mock DeviceOperator
|
11
|
+
@ope.stub(:pressed_key_set){ [] }
|
12
|
+
@resolver = mock BindResolver
|
13
|
+
@resolver2 = BindResolver.new
|
14
|
+
BindResolver.stub!(:new){@resolver}
|
15
|
+
@resolver.stub!(:two_stroke?){false}
|
16
|
+
|
17
|
+
@handler = KeyEventHandler.new @ope
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#handle" do
|
21
|
+
context "with a pressed event" do
|
22
|
+
before do
|
23
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, Revdev::KEY_K, 1
|
24
|
+
end
|
25
|
+
context "if handle_pressed_event return :through" do
|
26
|
+
before do
|
27
|
+
@handler.should_receive(:handle_press_event){:through}
|
28
|
+
end
|
29
|
+
it "shoud send @event" do
|
30
|
+
@ope.should_receive(:send_event).with(@event)
|
31
|
+
@handler.handle @event
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context "if handle_pressed_event return :ignore" do
|
36
|
+
before do
|
37
|
+
@handler.should_receive(:handle_press_event){:ignore}
|
38
|
+
end
|
39
|
+
it "shoud ignore @event" do
|
40
|
+
@ope.should_not_receive(:send_event)
|
41
|
+
@handler.handle @event
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "with a released event" do
|
47
|
+
before do
|
48
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, Revdev::KEY_K, 0
|
49
|
+
@handler.should_receive(:handle_release_event){:ignore}
|
50
|
+
end
|
51
|
+
it "shoud ignore @event" do
|
52
|
+
@ope.should_not_receive(:send_event)
|
53
|
+
@handler.handle @event
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "with a pressing event" do
|
58
|
+
before do
|
59
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, Revdev::KEY_K, 2
|
60
|
+
@handler.should_receive(:handle_pressing_event){:ignore}
|
61
|
+
end
|
62
|
+
it "shoud ignore @event" do
|
63
|
+
@ope.should_not_receive(:send_event)
|
64
|
+
@handler.handle @event
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#handle_press_event" do
|
70
|
+
before do
|
71
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 1, 1
|
72
|
+
end
|
73
|
+
context "with an event which hit a key bind" do
|
74
|
+
before do
|
75
|
+
@key_bind = KeyBind.new [0,1], [2,3]
|
76
|
+
@resolver.should_receive(:resolve).and_return(@key_bind)
|
77
|
+
end
|
78
|
+
it "should return :ignore, send messages to @ope and update @active_bind_set" do
|
79
|
+
@ope.should_receive(:press_key).with(2)
|
80
|
+
@ope.should_receive(:press_key).with(3)
|
81
|
+
@ope.should_receive(:release_key).with(0)
|
82
|
+
@handler.handle_press_event(@event).should == :ignore
|
83
|
+
@handler.active_bind_set.should == [@key_bind]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
context "with an event which hit a BindResolver" do
|
87
|
+
before do
|
88
|
+
@key_bind = KeyBind.new [0,1], @resolver2
|
89
|
+
@resolver.should_receive(:resolve).and_return(@key_bind)
|
90
|
+
end
|
91
|
+
it "should return :ignore and update @bind_resolver" do
|
92
|
+
@handler.handle_press_event(@event).should == :ignore
|
93
|
+
@handler.bind_resolver.should == @resolver2
|
94
|
+
end
|
95
|
+
end
|
96
|
+
context "with an event which hit a Proc" do
|
97
|
+
before do
|
98
|
+
@proc = proc {
|
99
|
+
:foo
|
100
|
+
}
|
101
|
+
@key_bind = KeyBind.new [0,1], @proc
|
102
|
+
@resolver.should_receive(:resolve).and_return(@key_bind)
|
103
|
+
end
|
104
|
+
it "should return :ignore and update @bind_resolver" do
|
105
|
+
@handler.handle_press_event(@event).should == :foo
|
106
|
+
end
|
107
|
+
end
|
108
|
+
context "with an event which hit no one" do
|
109
|
+
before do
|
110
|
+
@resolver.should_receive(:resolve).and_return(:foo)
|
111
|
+
end
|
112
|
+
it "should return :foo" do
|
113
|
+
@handler.handle_press_event(@event).should == :foo
|
114
|
+
end
|
115
|
+
end
|
116
|
+
context "with an event which hit no one and 2 stroke @bind_resolver" do
|
117
|
+
before do
|
118
|
+
@resolver.should_receive(:resolve).and_return(:foo)
|
119
|
+
@resolver.stub(:two_stroke?){true}
|
120
|
+
end
|
121
|
+
it "should return :foo" do
|
122
|
+
@handler.handle_press_event(@event).should == :foo
|
123
|
+
# TODO check to change @bind_resolver to @default_bind_resolver or @window_bind_resolver
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "#handle_release_event" do
|
129
|
+
before do
|
130
|
+
event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 1, 1
|
131
|
+
@key_bind = KeyBind.new [0,1], [2,3]
|
132
|
+
@resolver.should_receive(:resolve).and_return(@key_bind)
|
133
|
+
@ope.should_receive(:press_key).with(2)
|
134
|
+
@ope.should_receive(:press_key).with(3)
|
135
|
+
@ope.should_receive(:release_key).with(0)
|
136
|
+
@handler.handle_press_event event
|
137
|
+
end
|
138
|
+
context "with an event which can be found in @active_bind_set" do
|
139
|
+
it "should return :ignore, update @active_bind_set and send messages to @ope" do
|
140
|
+
@ope.should_receive(:release_key).with(2)
|
141
|
+
@ope.should_receive(:release_key).with(3)
|
142
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 1, 0
|
143
|
+
@handler.handle_release_event(@event).should == :ignore
|
144
|
+
@handler.active_bind_set.empty?.should be_true
|
145
|
+
end
|
146
|
+
it "should return :ignore and update @active_bind_set" do
|
147
|
+
@ope.should_receive(:release_key).with(2)
|
148
|
+
@ope.should_receive(:release_key).with(3)
|
149
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 0, 0
|
150
|
+
@handler.handle_release_event(@event).should == :ignore
|
151
|
+
@handler.active_bind_set.empty?.should be_true
|
152
|
+
end
|
153
|
+
end
|
154
|
+
context "with an event which can not be found in @active_bind_set" do
|
155
|
+
it "should return :through" do
|
156
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 10, 0
|
157
|
+
@handler.handle_release_event(@event).should == :through
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe "#handle_pressing_event" do
|
163
|
+
context "with an pressing event and empty @active_bind_set" do
|
164
|
+
it "should return :through" do
|
165
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 1, 2
|
166
|
+
@handler.handle_pressing_event(@event).should == :through
|
167
|
+
end
|
168
|
+
end
|
169
|
+
context "with an pressing event and @active_bind_set which have length:1" do
|
170
|
+
before do
|
171
|
+
event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 1, 1
|
172
|
+
@key_bind = KeyBind.new [0,1], [2,3]
|
173
|
+
@resolver.should_receive(:resolve).and_return(@key_bind)
|
174
|
+
@ope.should_receive(:press_key).with(2)
|
175
|
+
@ope.should_receive(:press_key).with(3)
|
176
|
+
@ope.should_receive(:release_key).with(0)
|
177
|
+
@handler.handle_press_event event
|
178
|
+
end
|
179
|
+
it "should return :ignore and send messages to @operator" do
|
180
|
+
@ope.should_receive(:pressing_key).with(2)
|
181
|
+
@ope.should_receive(:pressing_key).with(3)
|
182
|
+
@event = Revdev::InputEvent.new nil, Revdev::EV_KEY, 1, 2
|
183
|
+
@handler.handle_pressing_event(@event).should == :ignore
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
describe '#active_window_changed' do
|
189
|
+
before do
|
190
|
+
@window = mock ActiveWindowX::Window
|
191
|
+
@window.stub(:app_name).and_return('qux');
|
192
|
+
@resolver2 = mock BindResolver
|
193
|
+
BindResolver.stub!(:new){@resolver2}
|
194
|
+
end
|
195
|
+
context 'with a Window, which contains "foo" in the title,' do
|
196
|
+
before do
|
197
|
+
@window.stub(:title).and_return('foobar');
|
198
|
+
@handler.window nil, /foo/ do
|
199
|
+
end
|
200
|
+
end
|
201
|
+
it 'should change @bind_resolver' do
|
202
|
+
puts "phoooooo"
|
203
|
+
resolver = @handler.bind_resolver
|
204
|
+
@handler.active_window_changed(@window)
|
205
|
+
@handler.bind_resolver.should_not == resolver
|
206
|
+
end
|
207
|
+
end
|
208
|
+
context 'with a Window, which does not contain "foo" in the title,' do
|
209
|
+
before do
|
210
|
+
@window.stub(:title).and_return('barbaz');
|
211
|
+
@handler.window nil, /foo/ do
|
212
|
+
end
|
213
|
+
end
|
214
|
+
it 'should not change @bind_resolver' do
|
215
|
+
resolver = @handler.bind_resolver
|
216
|
+
@handler.active_window_changed(@window)
|
217
|
+
@handler.bind_resolver.should == resolver
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
metadata
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rbindkeys
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Keiichiro Ui
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-06-06 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: revdev
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: ruinput
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: active_window_x
|
50
|
+
prerelease: false
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
60
|
+
type: :runtime
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: bundler
|
64
|
+
prerelease: false
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
74
|
+
type: :development
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: rake
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
|
+
type: :development
|
89
|
+
version_requirements: *id005
|
90
|
+
- !ruby/object:Gem::Dependency
|
91
|
+
name: rspec
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
type: :development
|
103
|
+
version_requirements: *id006
|
104
|
+
description: key remap
|
105
|
+
email:
|
106
|
+
- keiichiro.ui@gmail.com
|
107
|
+
executables:
|
108
|
+
- rbindkeys
|
109
|
+
extensions: []
|
110
|
+
|
111
|
+
extra_rdoc_files: []
|
112
|
+
|
113
|
+
files:
|
114
|
+
- .gitignore
|
115
|
+
- Gemfile
|
116
|
+
- LICENSE
|
117
|
+
- README.md
|
118
|
+
- Rakefile
|
119
|
+
- bin/rbindkeys
|
120
|
+
- lib/rbindkeys.rb
|
121
|
+
- lib/rbindkeys/bind_resolver.rb
|
122
|
+
- lib/rbindkeys/bind_set.rb
|
123
|
+
- lib/rbindkeys/bind_tree.rb
|
124
|
+
- lib/rbindkeys/cli.rb
|
125
|
+
- lib/rbindkeys/device.rb
|
126
|
+
- lib/rbindkeys/device_operator.rb
|
127
|
+
- lib/rbindkeys/fix_resolver.rb
|
128
|
+
- lib/rbindkeys/key_bind.rb
|
129
|
+
- lib/rbindkeys/key_event_handler.rb
|
130
|
+
- lib/rbindkeys/key_event_handler/configurer.rb
|
131
|
+
- lib/rbindkeys/log_utils.rb
|
132
|
+
- lib/rbindkeys/observer.rb
|
133
|
+
- lib/rbindkeys/version.rb
|
134
|
+
- lib/rbindkeys/virtual_device.rb
|
135
|
+
- lib/rbindkeys/window_matcher.rb
|
136
|
+
- rbindkeys.gemspec
|
137
|
+
- sample/emacs.rb
|
138
|
+
- sample/swap_left_ctrl_and_caps.rb
|
139
|
+
- spec/bind_resolver_spec.rb
|
140
|
+
- spec/bind_tree_bind_spec.rb
|
141
|
+
- spec/bind_tree_resolve_for_pressed_event_spec.rb
|
142
|
+
- spec/bind_tree_resolve_for_released_event_spec.rb
|
143
|
+
- spec/cli_spec.rb
|
144
|
+
- spec/device_operator_spec.rb
|
145
|
+
- spec/fix_resolver_spec.rb
|
146
|
+
- spec/key_event_handler/configurer_spec.rb
|
147
|
+
- spec/key_event_handler/handle_spec.rb
|
148
|
+
homepage: ""
|
149
|
+
licenses: []
|
150
|
+
|
151
|
+
post_install_message:
|
152
|
+
rdoc_options: []
|
153
|
+
|
154
|
+
require_paths:
|
155
|
+
- lib
|
156
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
+
none: false
|
158
|
+
requirements:
|
159
|
+
- - ">="
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
hash: 3
|
162
|
+
segments:
|
163
|
+
- 0
|
164
|
+
version: "0"
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
none: false
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
hash: 3
|
171
|
+
segments:
|
172
|
+
- 0
|
173
|
+
version: "0"
|
174
|
+
requirements: []
|
175
|
+
|
176
|
+
rubyforge_project:
|
177
|
+
rubygems_version: 1.8.15
|
178
|
+
signing_key:
|
179
|
+
specification_version: 3
|
180
|
+
summary: key remap
|
181
|
+
test_files:
|
182
|
+
- spec/bind_resolver_spec.rb
|
183
|
+
- spec/bind_tree_bind_spec.rb
|
184
|
+
- spec/bind_tree_resolve_for_pressed_event_spec.rb
|
185
|
+
- spec/bind_tree_resolve_for_released_event_spec.rb
|
186
|
+
- spec/cli_spec.rb
|
187
|
+
- spec/device_operator_spec.rb
|
188
|
+
- spec/fix_resolver_spec.rb
|
189
|
+
- spec/key_event_handler/configurer_spec.rb
|
190
|
+
- spec/key_event_handler/handle_spec.rb
|