-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.rbindkeys.rb
371 lines (295 loc) · 8.36 KB
/
.rbindkeys.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
# -*- coding:utf-8; mode:ruby; -*-
# sudo rbindkeys --config ~/.rbindkeys.rb /dev/input/event0
## user settings
# if you use a keyboard which have a left ctrl key at the left of "A" key,
# then you must set false
# @swap_left_ctrl_with_caps = true
# for apple keyboard
# @swap_left_opt_with_left_cmd = true
##
# pre_bind_key: pre-proccessed keybinding
if @swap_left_ctrl_with_caps
pre_bind_key KEY_CAPSLOCK, KEY_LEFTCTRL
pre_bind_key KEY_LEFTCTRL, KEY_CAPSLOCK
end
if @swap_left_opt_with_left_cmd
pre_bind_key KEY_LEFTMETA, KEY_LEFTALT
pre_bind_key KEY_LEFTALT, KEY_LEFTMETA
end
@pre_spc_flg = false
def quit(operator)
# if !@pre_spc_flg
operator.release_key KEY_LEFTCTRL
operator.press_key KEY_ESC
operator.release_key KEY_ESC
# end
@pre_spc_flg = false
end
def delete_char(operator)
operator.release_key KEY_LEFTCTRL
operator.press_key KEY_DELETE
operator.release_key KEY_DELETE
@pre_spc_flg = false
end
def delete_backward_char(operator)
operator.release_key KEY_LEFTCTRL
operator.press_key KEY_BACKSPACE
operator.release_key KEY_BACKSPACE
@pre_spc_flg = false
end
def kill_region(operator)
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_X
operator.release_key KEY_X
operator.release_key KEY_LEFTCTRL
@pre_spc_flg = false
end
def kill_ring_save(operator)
operator.release_key KEY_LEFTALT
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_C
operator.release_key KEY_C
operator.release_key KEY_LEFTCTRL
@pre_spc_flg = false
end
def yank_paste(operator)
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_V
operator.release_key KEY_V
operator.release_key KEY_LEFTCTRL
@pre_spc_flg = false
end
def move_caret(operator, direction)
operator.release_key KEY_LEFTCTRL
if @pre_spc_flg
operator.press_key KEY_LEFTSHIFT
operator.press_key direction
operator.release_key direction
operator.release_key KEY_LEFTSHIFT
else
operator.press_key direction
operator.release_key direction
end
end
def forward_char(operator)
move_caret(operator, KEY_RIGHT)
end
def backward_char(operator)
move_caret(operator, KEY_LEFT)
end
def next_line(operator)
move_caret(operator, KEY_DOWN)
end
def previous_line(operator)
move_caret(operator, KEY_UP)
end
def forward_word(operator)
operator.release_key KEY_LEFTALT
if @pre_spc_flg
operator.press_key KEY_LEFTSHIFT
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_RIGHT
operator.release_key KEY_RIGHT
operator.release_key KEY_LEFTCTRL
operator.release_key KEY_LEFTSHIFT
else
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_RIGHT
operator.release_key KEY_RIGHT
operator.release_key KEY_LEFTCTRL
end
end
def backward_word(operator)
operator.release_key KEY_LEFTALT
if @pre_spc_flg
operator.press_key KEY_LEFTSHIFT
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_LEFT
operator.release_key KEY_LEFT
operator.release_key KEY_LEFTCTRL
operator.release_key KEY_LEFTSHIFT
else
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_LEFT
operator.release_key KEY_LEFT
operator.release_key KEY_LEFTCTRL
end
end
def move_beginning_of_line(operator)
operator.release_key KEY_LEFTCTRL
if @pre_spc_flg
operator.press_key KEY_LEFTSHIFT
operator.press_key KEY_HOME
operator.release_key KEY_HOME
operator.release_key KEY_LEFTSHIFT
else
operator.press_key KEY_HOME
operator.release_key KEY_HOME
end
end
def move_end_of_line(operator)
operator.release_key KEY_LEFTCTRL
if @pre_spc_flg
operator.press_key KEY_LEFTSHIFT
operator.press_key KEY_END
operator.release_key KEY_END
operator.release_key KEY_LEFTSHIFT
else
operator.press_key KEY_END
operator.release_key KEY_END
end
end
def undo(operator)
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_Z
operator.release_key KEY_Z
operator.release_key KEY_LEFTCTRL
@pre_spc_flg = false
end
def undo_redo(operator)
operator.release_key KEY_LEFTALT
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_Y
operator.release_key KEY_Y
operator.release_key KEY_LEFTCTRL
@pre_spc_flg = false
end
def select_all(operator)
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_A
operator.release_key KEY_A
operator.release_key KEY_LEFTCTRL
end
bind_key [KEY_LEFTCTRL, KEY_SPACE] do
if @pre_spc_flg
@pre_spc_flg = false
else
@pre_spc_flg = true
end
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_SPACE
operator.release_key KEY_SPACE
operator.release_key KEY_LEFTCTRL
end
bind_key [KEY_LEFTCTRL, KEY_F] do |event, operator|
forward_char(operator)
end
# bind_key [KEY_LEFTCTRL, KEY_B], KEY_LEFT
bind_key [KEY_LEFTCTRL, KEY_B] do |event, operator|
backward_char(operator)
end
bind_key [KEY_LEFTCTRL, KEY_P] do |event, operator|
previous_line(operator)
end
bind_key [KEY_LEFTCTRL, KEY_N] do |event, operator|
next_line(operator)
end
bind_key [KEY_LEFTALT, KEY_F] do |event, operator|
forward_word(operator)
end
bind_key [KEY_LEFTALT, KEY_B] do |event, operator|
backward_word(operator)
end
bind_key [KEY_LEFTCTRL, KEY_A] do |event, operator|
move_beginning_of_line(operator)
end
bind_key [KEY_LEFTCTRL, KEY_E] do |event, operator|
move_end_of_line(operator)
end
# page scroll
bind_key [KEY_LEFTCTRL, KEY_V], KEY_PAGEDOWN
bind_key [KEY_LEFTALT, KEY_V], KEY_PAGEUP
# edit
bind_key [KEY_LEFTCTRL, KEY_D] do |event, operator|
delete_char(operator)
end
bind_key [KEY_LEFTCTRL, KEY_H] do |event, operator|
delete_backward_char(operator)
end
bind_key [KEY_LEFTCTRL, KEY_M], KEY_ENTER
bind_key [KEY_LEFTCTRL, KEY_I], KEY_TAB
bind_key [KEY_LEFTCTRL, KEY_LEFTBRACE] do |event, operator|
quit(operator)
end
bind_key [KEY_LEFTCTRL, KEY_G] do |event, operator|
quit(operator)
end
bind_key [KEY_LEFTCTRL, KEY_S], [KEY_LEFTCTRL, KEY_F]
bind_key [KEY_LEFTCTRL, KEY_R], [KEY_LEFTCTRL, KEY_LEFTSHIFT, KEY_F]
bind_key [KEY_LEFTCTRL, KEY_SLASH] do |event, operator|
undo(operator)
end
bind_key [KEY_LEFTALT, KEY_SLASH] do |event, operator|
undo_redo(operator)
end
# bind_key [KEY_LEFTALT, KEY_Y], [KEY_LEFTCTRL, KEY_LEFTALT, KEY_Y]
# give a block sample
@caps_led_state = 0
bind_key KEY_CAPSLOCK do |event, operator|
@caps_led_state = @caps_led_state ^ 1
puts "########## CAPSLOCK LED #{@caps_led_state.zero? ? 'off' : 'on'} ##########"
operator.send_event EV_LED, LED_CAPSL, @caps_led_state
end
# cut, copy and paste
bind_key [KEY_LEFTCTRL, KEY_W] do |event, operator|
kill_region(operator)
end
bind_key [KEY_LEFTALT, KEY_W] do |event, operator|
kill_ring_save(operator)
end
bind_key [KEY_LEFTCTRL, KEY_Y] do |event, operator|
yank_paste(operator)
end
# kill line
bind_key [KEY_LEFTCTRL, KEY_K] do |event, operator|
# Shift+End : select text to end of line
operator.release_key KEY_LEFTCTRL
operator.press_key KEY_LEFTSHIFT
operator.press_key KEY_END
operator.release_key KEY_END
operator.release_key KEY_LEFTSHIFT
# Ctrl+x : cut
operator.press_key KEY_LEFTCTRL
operator.press_key KEY_X
operator.release_key KEY_X
operator.release_key KEY_LEFTCTRL
# operator.press_key KEY_DELETE
# operator.release_key KEY_DELETE
end
# 2 stroke key binds
# if your input was not hit any bind_key, the input will be ignored
bind_prefix_key [KEY_LEFTCTRL, KEY_X] do
# C-xk: close tab, etc.
bind_key KEY_K, [KEY_LEFTCTRL, KEY_W]
# C-xC-s: save
bind_key [KEY_LEFTCTRL, KEY_S], [KEY_LEFTCTRL, KEY_S]
# C-xb: next tab, etc.
bind_key KEY_B, [KEY_LEFTCTRL, KEY_TAB]
# C-xh: select all
bind_key KEY_H do |event, operator|
select_all(operator)
end
# C-xC-g: ignore C-x prefix bind
bind_key [KEY_LEFTCTRL, KEY_G], :ignore
# C-xC-c: close window
bind_key [KEY_LEFTCTRL, KEY_C], [KEY_LEFTMETA, KEY_Q] # awesome
# C-xC-r: reload window
bind_key [KEY_LEFTCTRL, KEY_R], [KEY_LEFTCTRL, KEY_R]
end
bind_prefix_key [KEY_LEFTCTRL, KEY_Q] do
# C-qC-g: ignore C-q prefix bind
bind_key [KEY_LEFTCTRL, KEY_G], :ignore
# C-qx: close tab, etc.
bind_key KEY_X, [KEY_LEFTCTRL, KEY_W]
end
# settings per window class (or title)
# through all key inputs if active
window(:through, :class => /gnome-terminal/)
window(:through, :class => /lilyterm/)
window(:through, :class => /emacs/)
window(:through, :class => /gvim/)
window(:through, :class => /Navigator/) # firefox
# add new bind_key to default binds
window(@default_bind_resolver, :class => /google-chrome/) do
bind_key [KEY_LEFTCTRL, KEY_Y], [KEY_LEFTCTRL, KEY_V]
end