hydra.el (hydra-keyboard-quit): New custom var

* hydra.el (hydra-keyboard-quit): New custom var.
(defhydra): Bind `hydra-keyboard-quit' to disable an amaranth Hydra.

* hydra-test.el (hydra-amaranth-vi): Update test.
master
Oleh Krehel 11 years ago
parent ad771a4294
commit 9a8e2f10f0
  1. 136
      hydra-test.el
  2. 16
      hydra.el

@ -361,7 +361,8 @@ The body can be accessed via `toggle/body'."
("j" next-line)
("k" previous-line)
("q" nil "quit")))
'(progn (defun hydra-vi/forward-char nil "Create a hydra with no body and the heads:
'(progn
(defun hydra-vi/forward-char nil "Create a hydra with no body and the heads:
\"l\": `forward-char',
\"h\": `backward-char',
@ -372,61 +373,64 @@ The body can be accessed via `toggle/body'."
The body can be accessed via `hydra-vi/body'.
Call the head: `forward-char'."
(interactive)
(set-cursor-color "#e52b50")
(catch (quote hydra-disable)
(hydra-disable)
(condition-case err (prog1 t (call-interactively (function forward-char)))
((debug error)
(message "%S" err)
(sit-for 0.8)
nil)))
(when hydra-is-helpful (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
7 8 (face hydra-face-amaranth)
10 11 (face hydra-face-amaranth)
13 14 (face hydra-face-amaranth)
17 18 (face hydra-face-blue))))
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (t lambda nil (interactive)
(message "An amaranth Hydra can only exit through a blue head")
(hydra-set-transient-map hydra-curr-map t)
(when hydra-is-helpful (sit-for 0.8)
(message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
7 8 (face hydra-face-amaranth)
10 11 (face hydra-face-amaranth)
13 14 (face hydra-face-amaranth)
17 18 (face hydra-face-blue)))))
(113 . hydra-vi/nil)
(107 . hydra-vi/previous-line)
(106 . hydra-vi/next-line)
(104 . hydra-vi/backward-char)
(108 . hydra-vi/forward-char)
(kp-subtract . hydra--negative-argument)
(kp-9 . hydra--digit-argument)
(kp-8 . hydra--digit-argument)
(kp-7 . hydra--digit-argument)
(kp-6 . hydra--digit-argument)
(kp-5 . hydra--digit-argument)
(kp-4 . hydra--digit-argument)
(kp-3 . hydra--digit-argument)
(kp-2 . hydra--digit-argument)
(kp-1 . hydra--digit-argument)
(kp-0 . hydra--digit-argument)
(57 . hydra--digit-argument)
(56 . hydra--digit-argument)
(55 . hydra--digit-argument)
(54 . hydra--digit-argument)
(53 . hydra--digit-argument)
(52 . hydra--digit-argument)
(51 . hydra--digit-argument)
(50 . hydra--digit-argument)
(49 . hydra--digit-argument)
(48 . hydra--digit-argument)
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
t)))
(interactive)
(set-cursor-color "#e52b50")
(catch (quote hydra-disable)
(hydra-disable)
(condition-case err (prog1 t (call-interactively (function forward-char)))
((debug error)
(message "%S" err)
(sit-for 0.8)
nil)))
(when hydra-is-helpful (message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
7 8 (face hydra-face-amaranth)
10 11 (face hydra-face-amaranth)
13 14 (face hydra-face-amaranth)
17 18 (face hydra-face-blue))))
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (7 lambda nil (interactive)
(hydra-disable)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(message "An amaranth Hydra can only exit through a blue head")
(hydra-set-transient-map hydra-curr-map t)
(when hydra-is-helpful (sit-for 0.8)
(message #("vi: l, h, j, k, [q]: quit." 4 5 (face hydra-face-amaranth)
7 8 (face hydra-face-amaranth)
10 11 (face hydra-face-amaranth)
13 14 (face hydra-face-amaranth)
17 18 (face hydra-face-blue)))))
(113 . hydra-vi/nil)
(107 . hydra-vi/previous-line)
(106 . hydra-vi/next-line)
(104 . hydra-vi/backward-char)
(108 . hydra-vi/forward-char)
(kp-subtract . hydra--negative-argument)
(kp-9 . hydra--digit-argument)
(kp-8 . hydra--digit-argument)
(kp-7 . hydra--digit-argument)
(kp-6 . hydra--digit-argument)
(kp-5 . hydra--digit-argument)
(kp-4 . hydra--digit-argument)
(kp-3 . hydra--digit-argument)
(kp-2 . hydra--digit-argument)
(kp-1 . hydra--digit-argument)
(kp-0 . hydra--digit-argument)
(57 . hydra--digit-argument)
(56 . hydra--digit-argument)
(55 . hydra--digit-argument)
(54 . hydra--digit-argument)
(53 . hydra--digit-argument)
(52 . hydra--digit-argument)
(51 . hydra--digit-argument)
(50 . hydra--digit-argument)
(49 . hydra--digit-argument)
(48 . hydra--digit-argument)
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
t)))
(defun hydra-vi/backward-char nil "Create a hydra with no body and the heads:
\"l\": `forward-char',
@ -455,7 +459,10 @@ Call the head: `backward-char'."
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (t lambda nil (interactive)
(quote (keymap (7 lambda nil (interactive)
(hydra-disable)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(message "An amaranth Hydra can only exit through a blue head")
(hydra-set-transient-map hydra-curr-map t)
(when hydra-is-helpful (sit-for 0.8)
@ -521,7 +528,10 @@ Call the head: `next-line'."
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (t lambda nil (interactive)
(quote (keymap (7 lambda nil (interactive)
(hydra-disable)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(message "An amaranth Hydra can only exit through a blue head")
(hydra-set-transient-map hydra-curr-map t)
(when hydra-is-helpful (sit-for 0.8)
@ -587,7 +597,10 @@ Call the head: `previous-line'."
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (t lambda nil (interactive)
(quote (keymap (7 lambda nil (interactive)
(hydra-disable)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(message "An amaranth Hydra can only exit through a blue head")
(hydra-set-transient-map hydra-curr-map t)
(when hydra-is-helpful (sit-for 0.8)
@ -659,7 +672,10 @@ The body can be accessed via `hydra-vi/body'."
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (t lambda nil (interactive)
(quote (keymap (7 lambda nil (interactive)
(hydra-disable)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(message "An amaranth Hydra can only exit through a blue head")
(hydra-set-transient-map hydra-curr-map t)
(when hydra-is-helpful (sit-for 0.8)

@ -80,6 +80,11 @@
:type 'boolean
:group 'hydra)
(defcustom hydra-keyboard-quit ""
"This binding will quit an amaranth Hydra.
It's the only other way to quit it besides though a blue head.
It's possible to set this to nil.")
(defface hydra-face-red
'((t (:foreground "#7F0055" :bold t)))
"Red Hydra heads will persist indefinitely."
@ -277,7 +282,8 @@ It defaults to `global-set-key'.
When `(keymapp METHOD)`, it becomes:
(lambda (key command) (define-key METHOD key command))"
(declare (indent 1))
(declare (indent 1)
(obsolete defhydra "0.8.0"))
`(defhydra ,(intern
(concat
"hydra-" (replace-regexp-in-string " " "_" body)))
@ -358,7 +364,13 @@ in turn can be either red or blue."
(when hydra-is-helpful
(sit-for 0.8)
(message ,hint))))
(error "An amaranth Hydra must have at least one blue head in order to exit")))
(error "An amaranth Hydra must have at least one blue head in order to exit"))
(when hydra-keyboard-quit
(define-key keymap hydra-keyboard-quit
`(lambda ()
(interactive)
(hydra-disable)
,body-post))))
`(progn
,@(cl-mapcar
(lambda (head name)

Loading…
Cancel
Save