]> code.delx.au - gnu-emacs-elpa/blob - hydra-test.el
hydra.el (defhydra): Declare indent 2
[gnu-emacs-elpa] / hydra-test.el
1 ;;; hydra-test.el --- Tests for Hydra
2
3 ;; Copyright (C) 2015 Free Software Foundation, Inc.
4
5 ;; Author: Oleh Krehel
6
7 ;; This file is part of GNU Emacs.
8
9 ;; GNU Emacs is free software: you can redistribute it and/or modify
10 ;; it under the terms of the GNU General Public License as published by
11 ;; the Free Software Foundation, either version 3 of the License, or
12 ;; (at your option) any later version.
13
14 ;; GNU Emacs is distributed in the hope that it will be useful,
15 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
16 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 ;; GNU General Public License for more details.
18
19 ;; You should have received a copy of the GNU General Public License
20 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
21
22 ;;; Commentary:
23 ;;
24
25 ;;; Code:
26
27 (require 'ert)
28
29 (ert-deftest hydra-red-error ()
30 (should
31 (equal
32 (macroexpand
33 '(defhydra hydra-error (global-map "M-g")
34 "error"
35 ("h" first-error "first")
36 ("j" next-error "next")
37 ("k" previous-error "prev")))
38 '(progn
39 (defun hydra-error/first-error nil "Create a hydra with a \"M-g\" body and the heads:
40
41 \"h\": `first-error',
42 \"j\": `next-error',
43 \"k\": `previous-error'
44
45 The body can be accessed via `hydra-error/body'.
46
47 Call the head: `first-error'."
48 (interactive)
49 (catch (quote hydra-disable)
50 (hydra-disable)
51 (condition-case err (prog1 t (call-interactively (function first-error)))
52 ((debug error)
53 (message "%S" err)
54 (sit-for 0.8)
55 nil)))
56 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
57 20 21 (face hydra-face-red)
58 31 32 (face hydra-face-red))))
59 (setq hydra-last
60 (hydra-set-transient-map
61 (setq hydra-curr-map
62 (quote (keymap (107 . hydra-error/previous-error)
63 (106 . hydra-error/next-error)
64 (104 . hydra-error/first-error)
65 (kp-subtract . hydra--negative-argument)
66 (kp-9 . hydra--digit-argument)
67 (kp-8 . hydra--digit-argument)
68 (kp-7 . hydra--digit-argument)
69 (kp-6 . hydra--digit-argument)
70 (kp-5 . hydra--digit-argument)
71 (kp-4 . hydra--digit-argument)
72 (kp-3 . hydra--digit-argument)
73 (kp-2 . hydra--digit-argument)
74 (kp-1 . hydra--digit-argument)
75 (kp-0 . hydra--digit-argument)
76 (57 . hydra--digit-argument)
77 (56 . hydra--digit-argument)
78 (55 . hydra--digit-argument)
79 (54 . hydra--digit-argument)
80 (53 . hydra--digit-argument)
81 (52 . hydra--digit-argument)
82 (51 . hydra--digit-argument)
83 (50 . hydra--digit-argument)
84 (49 . hydra--digit-argument)
85 (48 . hydra--digit-argument)
86 (45 . hydra--negative-argument)
87 (21 . hydra--universal-argument))))
88 t)))
89 (defun hydra-error/next-error nil "Create a hydra with a \"M-g\" body and the heads:
90
91 \"h\": `first-error',
92 \"j\": `next-error',
93 \"k\": `previous-error'
94
95 The body can be accessed via `hydra-error/body'.
96
97 Call the head: `next-error'."
98 (interactive)
99 (catch (quote hydra-disable)
100 (hydra-disable)
101 (condition-case err (prog1 t (call-interactively (function next-error)))
102 ((debug error)
103 (message "%S" err)
104 (sit-for 0.8)
105 nil)))
106 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
107 20 21 (face hydra-face-red)
108 31 32 (face hydra-face-red))))
109 (setq hydra-last
110 (hydra-set-transient-map
111 (setq hydra-curr-map
112 (quote (keymap (107 . hydra-error/previous-error)
113 (106 . hydra-error/next-error)
114 (104 . hydra-error/first-error)
115 (kp-subtract . hydra--negative-argument)
116 (kp-9 . hydra--digit-argument)
117 (kp-8 . hydra--digit-argument)
118 (kp-7 . hydra--digit-argument)
119 (kp-6 . hydra--digit-argument)
120 (kp-5 . hydra--digit-argument)
121 (kp-4 . hydra--digit-argument)
122 (kp-3 . hydra--digit-argument)
123 (kp-2 . hydra--digit-argument)
124 (kp-1 . hydra--digit-argument)
125 (kp-0 . hydra--digit-argument)
126 (57 . hydra--digit-argument)
127 (56 . hydra--digit-argument)
128 (55 . hydra--digit-argument)
129 (54 . hydra--digit-argument)
130 (53 . hydra--digit-argument)
131 (52 . hydra--digit-argument)
132 (51 . hydra--digit-argument)
133 (50 . hydra--digit-argument)
134 (49 . hydra--digit-argument)
135 (48 . hydra--digit-argument)
136 (45 . hydra--negative-argument)
137 (21 . hydra--universal-argument))))
138 t)))
139 (defun hydra-error/previous-error nil "Create a hydra with a \"M-g\" body and the heads:
140
141 \"h\": `first-error',
142 \"j\": `next-error',
143 \"k\": `previous-error'
144
145 The body can be accessed via `hydra-error/body'.
146
147 Call the head: `previous-error'."
148 (interactive)
149 (catch (quote hydra-disable)
150 (hydra-disable)
151 (condition-case err (prog1 t (call-interactively (function previous-error)))
152 ((debug error)
153 (message "%S" err)
154 (sit-for 0.8)
155 nil)))
156 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
157 20 21 (face hydra-face-red)
158 31 32 (face hydra-face-red))))
159 (setq hydra-last
160 (hydra-set-transient-map
161 (setq hydra-curr-map
162 (quote (keymap (107 . hydra-error/previous-error)
163 (106 . hydra-error/next-error)
164 (104 . hydra-error/first-error)
165 (kp-subtract . hydra--negative-argument)
166 (kp-9 . hydra--digit-argument)
167 (kp-8 . hydra--digit-argument)
168 (kp-7 . hydra--digit-argument)
169 (kp-6 . hydra--digit-argument)
170 (kp-5 . hydra--digit-argument)
171 (kp-4 . hydra--digit-argument)
172 (kp-3 . hydra--digit-argument)
173 (kp-2 . hydra--digit-argument)
174 (kp-1 . hydra--digit-argument)
175 (kp-0 . hydra--digit-argument)
176 (57 . hydra--digit-argument)
177 (56 . hydra--digit-argument)
178 (55 . hydra--digit-argument)
179 (54 . hydra--digit-argument)
180 (53 . hydra--digit-argument)
181 (52 . hydra--digit-argument)
182 (51 . hydra--digit-argument)
183 (50 . hydra--digit-argument)
184 (49 . hydra--digit-argument)
185 (48 . hydra--digit-argument)
186 (45 . hydra--negative-argument)
187 (21 . hydra--universal-argument))))
188 t)))
189 (unless (keymapp (lookup-key global-map (kbd "M-g")))
190 (define-key global-map (kbd "M-g")
191 nil))
192 (define-key global-map [134217831 104]
193 (function hydra-error/first-error))
194 (define-key global-map [134217831 106]
195 (function hydra-error/next-error))
196 (define-key global-map [134217831 107]
197 (function hydra-error/previous-error))
198 (defun hydra-error/body nil "Create a hydra with a \"M-g\" body and the heads:
199
200 \"h\": `first-error',
201 \"j\": `next-error',
202 \"k\": `previous-error'
203
204 The body can be accessed via `hydra-error/body'."
205 (interactive)
206 (when hydra-is-helpful (message #("error: [h]: first, [j]: next, [k]: prev." 8 9 (face hydra-face-red)
207 20 21 (face hydra-face-red)
208 31 32 (face hydra-face-red))))
209 (setq hydra-last
210 (hydra-set-transient-map
211 (setq hydra-curr-map
212 (quote (keymap (107 . hydra-error/previous-error)
213 (106 . hydra-error/next-error)
214 (104 . hydra-error/first-error)
215 (kp-subtract . hydra--negative-argument)
216 (kp-9 . hydra--digit-argument)
217 (kp-8 . hydra--digit-argument)
218 (kp-7 . hydra--digit-argument)
219 (kp-6 . hydra--digit-argument)
220 (kp-5 . hydra--digit-argument)
221 (kp-4 . hydra--digit-argument)
222 (kp-3 . hydra--digit-argument)
223 (kp-2 . hydra--digit-argument)
224 (kp-1 . hydra--digit-argument)
225 (kp-0 . hydra--digit-argument)
226 (57 . hydra--digit-argument)
227 (56 . hydra--digit-argument)
228 (55 . hydra--digit-argument)
229 (54 . hydra--digit-argument)
230 (53 . hydra--digit-argument)
231 (52 . hydra--digit-argument)
232 (51 . hydra--digit-argument)
233 (50 . hydra--digit-argument)
234 (49 . hydra--digit-argument)
235 (48 . hydra--digit-argument)
236 (45 . hydra--negative-argument)
237 (21 . hydra--universal-argument))))
238 t)))))))
239
240 (ert-deftest hydra-blue-toggle ()
241 (should
242 (equal
243 (macroexpand
244 '(defhydra toggle (:color blue)
245 "toggle"
246 ("t" toggle-truncate-lines "truncate")
247 ("f" auto-fill-mode "fill")
248 ("a" abbrev-mode "abbrev")
249 ("q" nil "cancel")))
250 '(progn
251 (defun toggle/toggle-truncate-lines nil "Create a hydra with no body and the heads:
252
253 \"t\": `toggle-truncate-lines',
254 \"f\": `auto-fill-mode',
255 \"a\": `abbrev-mode',
256 \"q\": `nil'
257
258 The body can be accessed via `toggle/body'.
259
260 Call the head: `toggle-truncate-lines'."
261 (interactive)
262 (hydra-disable)
263 (call-interactively (function toggle-truncate-lines)))
264 (defun toggle/auto-fill-mode nil "Create a hydra with no body and the heads:
265
266 \"t\": `toggle-truncate-lines',
267 \"f\": `auto-fill-mode',
268 \"a\": `abbrev-mode',
269 \"q\": `nil'
270
271 The body can be accessed via `toggle/body'.
272
273 Call the head: `auto-fill-mode'."
274 (interactive)
275 (hydra-disable)
276 (call-interactively (function auto-fill-mode)))
277 (defun toggle/abbrev-mode nil "Create a hydra with no body and the heads:
278
279 \"t\": `toggle-truncate-lines',
280 \"f\": `auto-fill-mode',
281 \"a\": `abbrev-mode',
282 \"q\": `nil'
283
284 The body can be accessed via `toggle/body'.
285
286 Call the head: `abbrev-mode'."
287 (interactive)
288 (hydra-disable)
289 (call-interactively (function abbrev-mode)))
290 (defun toggle/nil nil "Create a hydra with no body and the heads:
291
292 \"t\": `toggle-truncate-lines',
293 \"f\": `auto-fill-mode',
294 \"a\": `abbrev-mode',
295 \"q\": `nil'
296
297 The body can be accessed via `toggle/body'.
298
299 Call the head: `nil'."
300 (interactive)
301 (hydra-disable))
302 (defun toggle/body nil "Create a hydra with no body and the heads:
303
304 \"t\": `toggle-truncate-lines',
305 \"f\": `auto-fill-mode',
306 \"a\": `abbrev-mode',
307 \"q\": `nil'
308
309 The body can be accessed via `toggle/body'."
310 (interactive)
311 (when hydra-is-helpful (message #("toggle: [t]: truncate, [f]: fill, [a]: abbrev, [q]: cancel." 9 10 (face hydra-face-blue)
312 24 25 (face hydra-face-blue)
313 35 36 (face hydra-face-blue)
314 48 49 (face hydra-face-blue))))
315 (setq hydra-last
316 (hydra-set-transient-map
317 (setq hydra-curr-map
318 '(keymap (113 . toggle/nil)
319 (97 . toggle/abbrev-mode)
320 (102 . toggle/auto-fill-mode)
321 (116 . toggle/toggle-truncate-lines)
322 (kp-subtract . hydra--negative-argument)
323 (kp-9 . hydra--digit-argument)
324 (kp-8 . hydra--digit-argument)
325 (kp-7 . hydra--digit-argument)
326 (kp-6 . hydra--digit-argument)
327 (kp-5 . hydra--digit-argument)
328 (kp-4 . hydra--digit-argument)
329 (kp-3 . hydra--digit-argument)
330 (kp-2 . hydra--digit-argument)
331 (kp-1 . hydra--digit-argument)
332 (kp-0 . hydra--digit-argument)
333 (57 . hydra--digit-argument)
334 (56 . hydra--digit-argument)
335 (55 . hydra--digit-argument)
336 (54 . hydra--digit-argument)
337 (53 . hydra--digit-argument)
338 (52 . hydra--digit-argument)
339 (51 . hydra--digit-argument)
340 (50 . hydra--digit-argument)
341 (49 . hydra--digit-argument)
342 (48 . hydra--digit-argument)
343 (45 . hydra--negative-argument)
344 (21 . hydra--universal-argument)))
345 t)))))))
346
347 (ert-deftest hydra-amaranth-vi ()
348 (unless (version< emacs-version "24.4")
349 (should
350 (equal
351 (macroexpand
352 '(defhydra hydra-vi
353 (:pre
354 (set-cursor-color "#e52b50")
355 :post
356 (set-cursor-color "#ffffff")
357 :color amaranth)
358 "vi"
359 ("l" forward-char)
360 ("h" backward-char)
361 ("j" next-line)
362 ("k" previous-line)
363 ("q" nil "quit")))
364 '(progn
365 (defun hydra-vi/forward-char nil "Create a hydra with no body and the heads:
366
367 \"l\": `forward-char',
368 \"h\": `backward-char',
369 \"j\": `next-line',
370 \"k\": `previous-line',
371 \"q\": `nil'
372
373 The body can be accessed via `hydra-vi/body'.
374
375 Call the head: `forward-char'."
376 (interactive)
377 (set-cursor-color "#e52b50")
378 (catch (quote hydra-disable)
379 (hydra-disable)
380 (condition-case err (prog1 t (call-interactively (function forward-char)))
381 ((debug error)
382 (message "%S" err)
383 (sit-for 0.8)
384 nil)))
385 (when hydra-is-helpful (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
386 7 8 (face hydra-face-amaranth)
387 10 11 (face hydra-face-amaranth)
388 13 14 (face hydra-face-amaranth)
389 17 18 (face hydra-face-blue))))
390 (setq hydra-last
391 (hydra-set-transient-map
392 (setq hydra-curr-map
393 (quote (keymap (7 lambda nil (interactive)
394 (hydra-disable)
395 (set-cursor-color "#ffffff"))
396 (t lambda nil (interactive)
397 (message "An amaranth Hydra can only exit through a blue head")
398 (hydra-set-transient-map hydra-curr-map t)
399 (when hydra-is-helpful (sit-for 0.8)
400 (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
401 7 8 (face hydra-face-amaranth)
402 10 11 (face hydra-face-amaranth)
403 13 14 (face hydra-face-amaranth)
404 17 18 (face hydra-face-blue)))))
405 (113 . hydra-vi/nil)
406 (107 . hydra-vi/previous-line)
407 (106 . hydra-vi/next-line)
408 (104 . hydra-vi/backward-char)
409 (108 . hydra-vi/forward-char)
410 (kp-subtract . hydra--negative-argument)
411 (kp-9 . hydra--digit-argument)
412 (kp-8 . hydra--digit-argument)
413 (kp-7 . hydra--digit-argument)
414 (kp-6 . hydra--digit-argument)
415 (kp-5 . hydra--digit-argument)
416 (kp-4 . hydra--digit-argument)
417 (kp-3 . hydra--digit-argument)
418 (kp-2 . hydra--digit-argument)
419 (kp-1 . hydra--digit-argument)
420 (kp-0 . hydra--digit-argument)
421 (57 . hydra--digit-argument)
422 (56 . hydra--digit-argument)
423 (55 . hydra--digit-argument)
424 (54 . hydra--digit-argument)
425 (53 . hydra--digit-argument)
426 (52 . hydra--digit-argument)
427 (51 . hydra--digit-argument)
428 (50 . hydra--digit-argument)
429 (49 . hydra--digit-argument)
430 (48 . hydra--digit-argument)
431 (45 . hydra--negative-argument)
432 (21 . hydra--universal-argument))))
433 t)))
434 (defun hydra-vi/backward-char nil "Create a hydra with no body and the heads:
435
436 \"l\": `forward-char',
437 \"h\": `backward-char',
438 \"j\": `next-line',
439 \"k\": `previous-line',
440 \"q\": `nil'
441
442 The body can be accessed via `hydra-vi/body'.
443
444 Call the head: `backward-char'."
445 (interactive)
446 (set-cursor-color "#e52b50")
447 (catch (quote hydra-disable)
448 (hydra-disable)
449 (condition-case err (prog1 t (call-interactively (function backward-char)))
450 ((debug error)
451 (message "%S" err)
452 (sit-for 0.8)
453 nil)))
454 (when hydra-is-helpful (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
455 7 8 (face hydra-face-amaranth)
456 10 11 (face hydra-face-amaranth)
457 13 14 (face hydra-face-amaranth)
458 17 18 (face hydra-face-blue))))
459 (setq hydra-last
460 (hydra-set-transient-map
461 (setq hydra-curr-map
462 (quote (keymap (7 lambda nil (interactive)
463 (hydra-disable)
464 (set-cursor-color "#ffffff"))
465 (t lambda nil (interactive)
466 (message "An amaranth Hydra can only exit through a blue head")
467 (hydra-set-transient-map hydra-curr-map t)
468 (when hydra-is-helpful (sit-for 0.8)
469 (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
470 7 8 (face hydra-face-amaranth)
471 10 11 (face hydra-face-amaranth)
472 13 14 (face hydra-face-amaranth)
473 17 18 (face hydra-face-blue)))))
474 (113 . hydra-vi/nil)
475 (107 . hydra-vi/previous-line)
476 (106 . hydra-vi/next-line)
477 (104 . hydra-vi/backward-char)
478 (108 . hydra-vi/forward-char)
479 (kp-subtract . hydra--negative-argument)
480 (kp-9 . hydra--digit-argument)
481 (kp-8 . hydra--digit-argument)
482 (kp-7 . hydra--digit-argument)
483 (kp-6 . hydra--digit-argument)
484 (kp-5 . hydra--digit-argument)
485 (kp-4 . hydra--digit-argument)
486 (kp-3 . hydra--digit-argument)
487 (kp-2 . hydra--digit-argument)
488 (kp-1 . hydra--digit-argument)
489 (kp-0 . hydra--digit-argument)
490 (57 . hydra--digit-argument)
491 (56 . hydra--digit-argument)
492 (55 . hydra--digit-argument)
493 (54 . hydra--digit-argument)
494 (53 . hydra--digit-argument)
495 (52 . hydra--digit-argument)
496 (51 . hydra--digit-argument)
497 (50 . hydra--digit-argument)
498 (49 . hydra--digit-argument)
499 (48 . hydra--digit-argument)
500 (45 . hydra--negative-argument)
501 (21 . hydra--universal-argument))))
502 t)))
503 (defun hydra-vi/next-line nil "Create a hydra with no body and the heads:
504
505 \"l\": `forward-char',
506 \"h\": `backward-char',
507 \"j\": `next-line',
508 \"k\": `previous-line',
509 \"q\": `nil'
510
511 The body can be accessed via `hydra-vi/body'.
512
513 Call the head: `next-line'."
514 (interactive)
515 (set-cursor-color "#e52b50")
516 (catch (quote hydra-disable)
517 (hydra-disable)
518 (condition-case err (prog1 t (call-interactively (function next-line)))
519 ((debug error)
520 (message "%S" err)
521 (sit-for 0.8)
522 nil)))
523 (when hydra-is-helpful (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
524 7 8 (face hydra-face-amaranth)
525 10 11 (face hydra-face-amaranth)
526 13 14 (face hydra-face-amaranth)
527 17 18 (face hydra-face-blue))))
528 (setq hydra-last
529 (hydra-set-transient-map
530 (setq hydra-curr-map
531 (quote (keymap (7 lambda nil (interactive)
532 (hydra-disable)
533 (set-cursor-color "#ffffff"))
534 (t lambda nil (interactive)
535 (message "An amaranth Hydra can only exit through a blue head")
536 (hydra-set-transient-map hydra-curr-map t)
537 (when hydra-is-helpful (sit-for 0.8)
538 (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
539 7 8 (face hydra-face-amaranth)
540 10 11 (face hydra-face-amaranth)
541 13 14 (face hydra-face-amaranth)
542 17 18 (face hydra-face-blue)))))
543 (113 . hydra-vi/nil)
544 (107 . hydra-vi/previous-line)
545 (106 . hydra-vi/next-line)
546 (104 . hydra-vi/backward-char)
547 (108 . hydra-vi/forward-char)
548 (kp-subtract . hydra--negative-argument)
549 (kp-9 . hydra--digit-argument)
550 (kp-8 . hydra--digit-argument)
551 (kp-7 . hydra--digit-argument)
552 (kp-6 . hydra--digit-argument)
553 (kp-5 . hydra--digit-argument)
554 (kp-4 . hydra--digit-argument)
555 (kp-3 . hydra--digit-argument)
556 (kp-2 . hydra--digit-argument)
557 (kp-1 . hydra--digit-argument)
558 (kp-0 . hydra--digit-argument)
559 (57 . hydra--digit-argument)
560 (56 . hydra--digit-argument)
561 (55 . hydra--digit-argument)
562 (54 . hydra--digit-argument)
563 (53 . hydra--digit-argument)
564 (52 . hydra--digit-argument)
565 (51 . hydra--digit-argument)
566 (50 . hydra--digit-argument)
567 (49 . hydra--digit-argument)
568 (48 . hydra--digit-argument)
569 (45 . hydra--negative-argument)
570 (21 . hydra--universal-argument))))
571 t)))
572 (defun hydra-vi/previous-line nil "Create a hydra with no body and the heads:
573
574 \"l\": `forward-char',
575 \"h\": `backward-char',
576 \"j\": `next-line',
577 \"k\": `previous-line',
578 \"q\": `nil'
579
580 The body can be accessed via `hydra-vi/body'.
581
582 Call the head: `previous-line'."
583 (interactive)
584 (set-cursor-color "#e52b50")
585 (catch (quote hydra-disable)
586 (hydra-disable)
587 (condition-case err (prog1 t (call-interactively (function previous-line)))
588 ((debug error)
589 (message "%S" err)
590 (sit-for 0.8)
591 nil)))
592 (when hydra-is-helpful (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
593 7 8 (face hydra-face-amaranth)
594 10 11 (face hydra-face-amaranth)
595 13 14 (face hydra-face-amaranth)
596 17 18 (face hydra-face-blue))))
597 (setq hydra-last
598 (hydra-set-transient-map
599 (setq hydra-curr-map
600 (quote (keymap (7 lambda nil (interactive)
601 (hydra-disable)
602 (set-cursor-color "#ffffff"))
603 (t lambda nil (interactive)
604 (message "An amaranth Hydra can only exit through a blue head")
605 (hydra-set-transient-map hydra-curr-map t)
606 (when hydra-is-helpful (sit-for 0.8)
607 (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
608 7 8 (face hydra-face-amaranth)
609 10 11 (face hydra-face-amaranth)
610 13 14 (face hydra-face-amaranth)
611 17 18 (face hydra-face-blue)))))
612 (113 . hydra-vi/nil)
613 (107 . hydra-vi/previous-line)
614 (106 . hydra-vi/next-line)
615 (104 . hydra-vi/backward-char)
616 (108 . hydra-vi/forward-char)
617 (kp-subtract . hydra--negative-argument)
618 (kp-9 . hydra--digit-argument)
619 (kp-8 . hydra--digit-argument)
620 (kp-7 . hydra--digit-argument)
621 (kp-6 . hydra--digit-argument)
622 (kp-5 . hydra--digit-argument)
623 (kp-4 . hydra--digit-argument)
624 (kp-3 . hydra--digit-argument)
625 (kp-2 . hydra--digit-argument)
626 (kp-1 . hydra--digit-argument)
627 (kp-0 . hydra--digit-argument)
628 (57 . hydra--digit-argument)
629 (56 . hydra--digit-argument)
630 (55 . hydra--digit-argument)
631 (54 . hydra--digit-argument)
632 (53 . hydra--digit-argument)
633 (52 . hydra--digit-argument)
634 (51 . hydra--digit-argument)
635 (50 . hydra--digit-argument)
636 (49 . hydra--digit-argument)
637 (48 . hydra--digit-argument)
638 (45 . hydra--negative-argument)
639 (21 . hydra--universal-argument))))
640 t)))
641 (defun hydra-vi/nil nil "Create a hydra with no body and the heads:
642
643 \"l\": `forward-char',
644 \"h\": `backward-char',
645 \"j\": `next-line',
646 \"k\": `previous-line',
647 \"q\": `nil'
648
649 The body can be accessed via `hydra-vi/body'.
650
651 Call the head: `nil'."
652 (interactive)
653 (set-cursor-color "#e52b50")
654 (hydra-disable)
655 (set-cursor-color "#ffffff"))
656 (defun hydra-vi/body nil "Create a hydra with no body and the heads:
657
658 \"l\": `forward-char',
659 \"h\": `backward-char',
660 \"j\": `next-line',
661 \"k\": `previous-line',
662 \"q\": `nil'
663
664 The body can be accessed via `hydra-vi/body'."
665 (interactive)
666 (set-cursor-color "#e52b50")
667 (when hydra-is-helpful (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
668 7 8 (face hydra-face-amaranth)
669 10 11 (face hydra-face-amaranth)
670 13 14 (face hydra-face-amaranth)
671 17 18 (face hydra-face-blue))))
672 (setq hydra-last
673 (hydra-set-transient-map
674 (setq hydra-curr-map
675 (quote (keymap (7 lambda nil (interactive)
676 (hydra-disable)
677 (set-cursor-color "#ffffff"))
678 (t lambda nil (interactive)
679 (message "An amaranth Hydra can only exit through a blue head")
680 (hydra-set-transient-map hydra-curr-map t)
681 (when hydra-is-helpful (sit-for 0.8)
682 (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
683 7 8 (face hydra-face-amaranth)
684 10 11 (face hydra-face-amaranth)
685 13 14 (face hydra-face-amaranth)
686 17 18 (face hydra-face-blue)))))
687 (113 . hydra-vi/nil)
688 (107 . hydra-vi/previous-line)
689 (106 . hydra-vi/next-line)
690 (104 . hydra-vi/backward-char)
691 (108 . hydra-vi/forward-char)
692 (kp-subtract . hydra--negative-argument)
693 (kp-9 . hydra--digit-argument)
694 (kp-8 . hydra--digit-argument)
695 (kp-7 . hydra--digit-argument)
696 (kp-6 . hydra--digit-argument)
697 (kp-5 . hydra--digit-argument)
698 (kp-4 . hydra--digit-argument)
699 (kp-3 . hydra--digit-argument)
700 (kp-2 . hydra--digit-argument)
701 (kp-1 . hydra--digit-argument)
702 (kp-0 . hydra--digit-argument)
703 (57 . hydra--digit-argument)
704 (56 . hydra--digit-argument)
705 (55 . hydra--digit-argument)
706 (54 . hydra--digit-argument)
707 (53 . hydra--digit-argument)
708 (52 . hydra--digit-argument)
709 (51 . hydra--digit-argument)
710 (50 . hydra--digit-argument)
711 (49 . hydra--digit-argument)
712 (48 . hydra--digit-argument)
713 (45 . hydra--negative-argument)
714 (21 . hydra--universal-argument))))
715 t))))))))
716
717 (provide 'hydra-test)
718
719 ;;; hydra-test.el ends here