hydra.el (hydra-keyboard-quit): Add

* hydra.el (hydra--handle-nonhead): Use `hydra-keyboard-quit'.
(defhydra): Work-around multiple definitions.

* hydra-test.el (hydra-red-error): Update test.
(hydra-blue-toggle): Update test.
master
Oleh Krehel 11 years ago
parent 5242aad749
commit db0415eb3c
  1. 39
      hydra-test.el
  2. 21
      hydra.el

@ -56,7 +56,8 @@ Call the head: `first-error'."
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (107 . hydra-error/previous-error)
(quote (keymap (7 . hydra-keyboard-quit)
(107 . hydra-error/previous-error)
(106 . hydra-error/next-error)
(104 . hydra-error/first-error)
(kp-subtract . hydra--negative-argument)
@ -103,7 +104,8 @@ Call the head: `next-error'."
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (107 . hydra-error/previous-error)
(quote (keymap (7 . hydra-keyboard-quit)
(107 . hydra-error/previous-error)
(106 . hydra-error/next-error)
(104 . hydra-error/first-error)
(kp-subtract . hydra--negative-argument)
@ -150,7 +152,8 @@ Call the head: `previous-error'."
(setq hydra-last
(hydra-set-transient-map
(setq hydra-curr-map
(quote (keymap (107 . hydra-error/previous-error)
(quote (keymap (7 . hydra-keyboard-quit)
(107 . hydra-error/previous-error)
(106 . hydra-error/next-error)
(104 . hydra-error/first-error)
(kp-subtract . hydra--negative-argument)
@ -208,7 +211,8 @@ The body can be accessed via `hydra-error/body'."
(hydra-set-transient-map
(setq hydra-curr-map
(quote
(keymap (107 . hydra-error/previous-error)
(keymap (7 . hydra-keyboard-quit)
(107 . hydra-error/previous-error)
(106 . hydra-error/next-error)
(104 . hydra-error/first-error)
(kp-subtract . hydra--negative-argument)
@ -332,7 +336,8 @@ The body can be accessed via `hydra-toggle/body'."
(hydra-set-transient-map
(setq hydra-curr-map
(quote
(keymap (113 . hydra-toggle/nil)
(keymap (7 . hydra-keyboard-quit)
(113 . hydra-toggle/nil)
(97 . hydra-toggle/abbrev-mode)
(102 . hydra-toggle/auto-fill-mode)
(116 . hydra-toggle/toggle-truncate-lines)
@ -363,7 +368,6 @@ The body can be accessed via `hydra-toggle/body'."
(setq prefix-arg current-prefix-arg)))))))
(ert-deftest hydra-amaranth-vi ()
(unless (version< emacs-version "24.4")
(should
(equal
(macroexpand
@ -400,15 +404,12 @@ Call the head: `next-line'."
(hydra-set-transient-map
(setq hydra-curr-map
(quote
(keymap (7 lambda nil (interactive)
(hydra-disable)
(hydra-cleanup)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(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 (unless hydra-lv (sit-for 0.8))
(hydra-vi/hint)))
(7 . hydra-keyboard-quit)
(113 . hydra-vi/nil)
(107 . hydra-vi/previous-line)
(106 . hydra-vi/next-line)
@ -458,15 +459,12 @@ Call the head: `previous-line'."
(hydra-set-transient-map
(setq hydra-curr-map
(quote
(keymap (7 lambda nil (interactive)
(hydra-disable)
(hydra-cleanup)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(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 (unless hydra-lv (sit-for 0.8))
(hydra-vi/hint)))
(7 . hydra-keyboard-quit)
(113 . hydra-vi/nil)
(107 . hydra-vi/previous-line)
(106 . hydra-vi/next-line)
@ -532,15 +530,12 @@ The body can be accessed via `hydra-vi/body'."
(hydra-set-transient-map
(setq hydra-curr-map
(quote
(keymap (7 lambda nil (interactive)
(hydra-disable)
(hydra-cleanup)
(set-cursor-color "#ffffff"))
(t lambda nil (interactive)
(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 (unless hydra-lv (sit-for 0.8))
(hydra-vi/hint)))
(7 . hydra-keyboard-quit)
(113 . hydra-vi/nil)
(107 . hydra-vi/previous-line)
(106 . hydra-vi/next-line)
@ -568,7 +563,7 @@ The body can be accessed via `hydra-vi/body'."
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
t (lambda nil (hydra-cleanup))))
(setq prefix-arg current-prefix-arg))))))))
(setq prefix-arg current-prefix-arg)))))))
(ert-deftest defhydradio ()
(should (equal

@ -332,6 +332,13 @@ BODY is the second argument to `defhydra'"
(delete-window lv-wnd)
(kill-buffer buf))))
(defun hydra-keyboard-quit ()
"Quitting function similar to `keyboard-quit'."
(interactive)
(hydra-disable)
(hydra-cleanup)
nil)
(defun hydra-disable ()
"Disable the current Hydra."
(cond
@ -547,6 +554,8 @@ NAME, BODY and HEADS are parameters to `defhydra'."
(body-post (plist-get (cddr body) :post)))
(when (and body-post (symbolp body-post))
(setq body-post `(funcall #',body-post)))
(when hydra-keyboard-quit
(define-key keymap hydra-keyboard-quit #'hydra-keyboard-quit))
(when (memq body-color '(amaranth pink teal))
(if (cl-some `(lambda (h)
(eq (hydra--head-color h body) 'blue))
@ -569,14 +578,7 @@ NAME, BODY and HEADS are parameters to `defhydra'."
(,(intern (format "%S/hint" name)))))))
(error
"An %S Hydra must have at least one blue head in order to exit"
body-color))
(when hydra-keyboard-quit
(define-key keymap hydra-keyboard-quit
`(lambda ()
(interactive)
(hydra-disable)
(hydra-cleanup)
,body-post))))))
body-color)))))
;;* Macros
;;** defhydra
@ -673,7 +675,8 @@ result of `defhydra'."
(format "%s\n\nCall the head: `%S'." doc (cadr head))
hint-name keymap
body-color body-pre body-post))
heads names)
(cl-delete-duplicates heads)
(cl-delete-duplicates names))
,@(unless (or (null body-key)
(null method)
(hydra--callablep method))

Loading…
Cancel
Save