emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master bb01930 09/17: Fix "catch 'hydra-disable"


From: Oleh Krehel
Subject: [elpa] master bb01930 09/17: Fix "catch 'hydra-disable"
Date: Tue, 10 Feb 2015 07:13:25 +0000

branch: master
commit bb01930bb74db39bbcf6ca014bc4d7607b1762c7
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Fix "catch 'hydra-disable"
    
    * hydra.el (hydra--make-defun): `(catch 'hydra-disable ...)' should
      extend thoughout the whole defun. The scope was reduced by mistake
      earlier, now restoring.
    
    * hydra-test.el: Update tests.
---
 hydra-test.el |  779 +++++++++++++++++++++++----------------------------------
 hydra.el      |   35 ++--
 2 files changed, 329 insertions(+), 485 deletions(-)

diff --git a/hydra-test.el b/hydra-test.el
index 5e7c0d4..4376ab3 100644
--- a/hydra-test.el
+++ b/hydra-test.el
@@ -46,46 +46,46 @@ The body can be accessed via `hydra-error/body'.
 
 Call the head: `first-error'."
              (interactive)
+             (hydra-disable)
              (catch (quote hydra-disable)
-               (hydra-disable)
                (condition-case err (prog1 t (call-interactively (function 
first-error)))
                  ((debug error)
                   (message "%S" err)
                   (sit-for 0.8)
-                  nil)))
-             (when hydra-is-helpful (message #("error: [h]: first, [j]: next, 
[k]: prev." 8 9 (face hydra-face-red)
-                                               20 21 (face hydra-face-red)
-                                               31 32 (face hydra-face-red))))
-             (setq hydra-last
-                   (hydra-set-transient-map
-                    (setq hydra-curr-map
-                          (quote (keymap (107 . hydra-error/previous-error)
-                                         (106 . hydra-error/next-error)
-                                         (104 . hydra-error/first-error)
-                                         (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)))
+                  nil))
+               (when hydra-is-helpful (message #("error: [h]: first, [j]: 
next, [k]: prev." 8 9 (face hydra-face-red)
+                                                 20 21 (face hydra-face-red)
+                                                 31 32 (face hydra-face-red))))
+               (setq hydra-last
+                     (hydra-set-transient-map
+                      (setq hydra-curr-map
+                            (quote (keymap (107 . hydra-error/previous-error)
+                                           (106 . hydra-error/next-error)
+                                           (104 . hydra-error/first-error)
+                                           (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-error/next-error nil "Create a hydra with a \"M-g\" body 
and the heads:
 
 \"h\":    `first-error',
@@ -96,46 +96,46 @@ The body can be accessed via `hydra-error/body'.
 
 Call the head: `next-error'."
              (interactive)
+             (hydra-disable)
              (catch (quote hydra-disable)
-               (hydra-disable)
                (condition-case err (prog1 t (call-interactively (function 
next-error)))
                  ((debug error)
                   (message "%S" err)
                   (sit-for 0.8)
-                  nil)))
-             (when hydra-is-helpful (message #("error: [h]: first, [j]: next, 
[k]: prev." 8 9 (face hydra-face-red)
-                                               20 21 (face hydra-face-red)
-                                               31 32 (face hydra-face-red))))
-             (setq hydra-last
-                   (hydra-set-transient-map
-                    (setq hydra-curr-map
-                          (quote (keymap (107 . hydra-error/previous-error)
-                                         (106 . hydra-error/next-error)
-                                         (104 . hydra-error/first-error)
-                                         (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)))
+                  nil))
+               (when hydra-is-helpful (message #("error: [h]: first, [j]: 
next, [k]: prev." 8 9 (face hydra-face-red)
+                                                 20 21 (face hydra-face-red)
+                                                 31 32 (face hydra-face-red))))
+               (setq hydra-last
+                     (hydra-set-transient-map
+                      (setq hydra-curr-map
+                            (quote (keymap (107 . hydra-error/previous-error)
+                                           (106 . hydra-error/next-error)
+                                           (104 . hydra-error/first-error)
+                                           (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-error/previous-error nil "Create a hydra with a \"M-g\" 
body and the heads:
 
 \"h\":    `first-error',
@@ -146,46 +146,46 @@ The body can be accessed via `hydra-error/body'.
 
 Call the head: `previous-error'."
              (interactive)
+             (hydra-disable)
              (catch (quote hydra-disable)
-               (hydra-disable)
                (condition-case err (prog1 t (call-interactively (function 
previous-error)))
                  ((debug error)
                   (message "%S" err)
                   (sit-for 0.8)
-                  nil)))
-             (when hydra-is-helpful (message #("error: [h]: first, [j]: next, 
[k]: prev." 8 9 (face hydra-face-red)
-                                               20 21 (face hydra-face-red)
-                                               31 32 (face hydra-face-red))))
-             (setq hydra-last
-                   (hydra-set-transient-map
-                    (setq hydra-curr-map
-                          (quote (keymap (107 . hydra-error/previous-error)
-                                         (106 . hydra-error/next-error)
-                                         (104 . hydra-error/first-error)
-                                         (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)))
+                  nil))
+               (when hydra-is-helpful (message #("error: [h]: first, [j]: 
next, [k]: prev." 8 9 (face hydra-face-red)
+                                                 20 21 (face hydra-face-red)
+                                                 31 32 (face hydra-face-red))))
+               (setq hydra-last
+                     (hydra-set-transient-map
+                      (setq hydra-curr-map
+                            (quote (keymap (107 . hydra-error/previous-error)
+                                           (106 . hydra-error/next-error)
+                                           (104 . hydra-error/first-error)
+                                           (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))))
       (unless (keymapp (lookup-key global-map (kbd "M-g")))
         (define-key global-map (kbd "M-g")
           nil))
@@ -203,39 +203,41 @@ Call the head: `previous-error'."
 
 The body can be accessed via `hydra-error/body'."
              (interactive)
-             (when hydra-is-helpful (message #("error: [h]: first, [j]: next, 
[k]: prev." 8 9 (face hydra-face-red)
-                                               20 21 (face hydra-face-red)
-                                               31 32 (face hydra-face-red))))
-             (setq hydra-last
-                   (hydra-set-transient-map
-                    (setq hydra-curr-map
-                          (quote (keymap (107 . hydra-error/previous-error)
-                                         (106 . hydra-error/next-error)
-                                         (104 . hydra-error/first-error)
-                                         (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)))))))
+             (hydra-disable)
+             (catch (quote hydra-disable)
+               (when hydra-is-helpful (message #("error: [h]: first, [j]: 
next, [k]: prev." 8 9 (face hydra-face-red)
+                                                 20 21 (face hydra-face-red)
+                                                 31 32 (face hydra-face-red))))
+               (setq hydra-last
+                     (hydra-set-transient-map
+                      (setq hydra-curr-map
+                            (quote (keymap (107 . hydra-error/previous-error)
+                                           (106 . hydra-error/next-error)
+                                           (104 . hydra-error/first-error)
+                                           (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))))))))
 
 (ert-deftest hydra-blue-toggle ()
   (should
@@ -260,7 +262,8 @@ The body can be accessed via `toggle/body'.
 Call the head: `toggle-truncate-lines'."
              (interactive)
              (hydra-disable)
-             (call-interactively (function toggle-truncate-lines)))
+             (catch (quote hydra-disable)
+               (call-interactively (function toggle-truncate-lines))))
       (defun toggle/auto-fill-mode nil "Create a hydra with no body and the 
heads:
 
 \"t\":    `toggle-truncate-lines',
@@ -273,7 +276,8 @@ The body can be accessed via `toggle/body'.
 Call the head: `auto-fill-mode'."
              (interactive)
              (hydra-disable)
-             (call-interactively (function auto-fill-mode)))
+             (catch (quote hydra-disable)
+               (call-interactively (function auto-fill-mode))))
       (defun toggle/abbrev-mode nil "Create a hydra with no body and the heads:
 
 \"t\":    `toggle-truncate-lines',
@@ -286,7 +290,8 @@ The body can be accessed via `toggle/body'.
 Call the head: `abbrev-mode'."
              (interactive)
              (hydra-disable)
-             (call-interactively (function abbrev-mode)))
+             (catch (quote hydra-disable)
+               (call-interactively (function abbrev-mode))))
       (defun toggle/nil nil "Create a hydra with no body and the heads:
 
 \"t\":    `toggle-truncate-lines',
@@ -298,7 +303,8 @@ The body can be accessed via `toggle/body'.
 
 Call the head: `nil'."
              (interactive)
-             (hydra-disable))
+             (hydra-disable)
+             (catch (quote hydra-disable)))
       (defun toggle/body nil "Create a hydra with no body and the heads:
 
 \"t\":    `toggle-truncate-lines',
@@ -308,105 +314,19 @@ Call the head: `nil'."
 
 The body can be accessed via `toggle/body'."
              (interactive)
-             (when hydra-is-helpful (message #("toggle: [t]: truncate, [f]: 
fill, [a]: abbrev, [q]: cancel." 9 10 (face hydra-face-blue)
-                                               24 25 (face hydra-face-blue)
-                                               35 36 (face hydra-face-blue)
-                                               48 49 (face hydra-face-blue))))
-             (setq hydra-last
-                   (hydra-set-transient-map
-                    (setq hydra-curr-map
-                          '(keymap (113 . toggle/nil)
-                            (97 . toggle/abbrev-mode)
-                            (102 . toggle/auto-fill-mode)
-                            (116 . toggle/toggle-truncate-lines)
-                            (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)))))))
-
-(ert-deftest hydra-amaranth-vi ()
-  (unless (version< emacs-version "24.4")
-    (should
-     (equal
-      (macroexpand
-       '(defhydra hydra-vi
-         (:pre
-          (set-cursor-color "#e52b50")
-          :post
-          (set-cursor-color "#ffffff")
-          :color amaranth)
-         "vi"
-         ("l" forward-char)
-         ("h" backward-char)
-         ("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:
-
-\"l\":    `forward-char',
-\"h\":    `backward-char',
-\"j\":    `next-line',
-\"k\":    `previous-line',
-\"q\":    `nil'
-
-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))))
+             (hydra-disable)
+             (catch (quote hydra-disable)
+               (when hydra-is-helpful (message #("toggle: [t]: truncate, [f]: 
fill, [a]: abbrev, [q]: cancel." 9 10 (face hydra-face-blue)
+                                                 24 25 (face hydra-face-blue)
+                                                 35 36 (face hydra-face-blue)
+                                                 48 49 (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)
+                            (quote (keymap (113 . toggle/nil)
+                                           (97 . toggle/abbrev-mode)
+                                           (102 . toggle/auto-fill-mode)
+                                           (116 . toggle/toggle-truncate-lines)
                                            (kp-subtract . 
hydra--negative-argument)
                                            (kp-9 . hydra--digit-argument)
                                            (kp-8 . hydra--digit-argument)
@@ -430,80 +350,26 @@ Call the head: `forward-char'."
                                            (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',
-\"h\":    `backward-char',
-\"j\":    `next-line',
-\"k\":    `previous-line',
-\"q\":    `nil'
-
-The body can be accessed via `hydra-vi/body'.
+                      t))))))))
 
-Call the head: `backward-char'."
-               (interactive)
-               (set-cursor-color "#e52b50")
-               (catch (quote hydra-disable)
-                 (hydra-disable)
-                 (condition-case err (prog1 t (call-interactively (function 
backward-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)))
+(ert-deftest hydra-amaranth-vi ()
+  (unless (version< emacs-version "24.4")
+    (should
+     (equal
+      (macroexpand
+       '(defhydra hydra-vi
+         (:pre
+          (set-cursor-color "#e52b50")
+          :post
+          (set-cursor-color "#ffffff")
+          :color amaranth)
+         "vi"
+         ("j" next-line)
+         ("k" previous-line)
+         ("q" nil "quit")))
+      '(progn
         (defun hydra-vi/next-line nil "Create a hydra with no body and the 
heads:
 
-\"l\":    `forward-char',
-\"h\":    `backward-char',
 \"j\":    `next-line',
 \"k\":    `previous-line',
 \"q\":    `nil'
@@ -513,66 +379,58 @@ The body can be accessed via `hydra-vi/body'.
 Call the head: `next-line'."
                (interactive)
                (set-cursor-color "#e52b50")
+               (hydra-disable)
                (catch (quote hydra-disable)
-                 (hydra-disable)
                  (condition-case err (prog1 t (call-interactively (function 
next-line)))
                    ((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)))
+                    nil))
+                 (when hydra-is-helpful (message #("vi: j, k, [q]: quit." 4 5 
(face hydra-face-amaranth)
+                                                   7 8 (face 
hydra-face-amaranth)
+                                                   11 12 (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: j, k, 
[q]: quit." 4 5 (face hydra-face-amaranth)
+                                                                 7 8 (face 
hydra-face-amaranth)
+                                                                 11 12 (face 
hydra-face-blue)))))
+                                             (113 . hydra-vi/nil)
+                                             (107 . hydra-vi/previous-line)
+                                             (106 . hydra-vi/next-line)
+                                             (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/previous-line nil "Create a hydra with no body and the 
heads:
 
-\"l\":    `forward-char',
-\"h\":    `backward-char',
 \"j\":    `next-line',
 \"k\":    `previous-line',
 \"q\":    `nil'
@@ -582,66 +440,58 @@ The body can be accessed via `hydra-vi/body'.
 Call the head: `previous-line'."
                (interactive)
                (set-cursor-color "#e52b50")
+               (hydra-disable)
                (catch (quote hydra-disable)
-                 (hydra-disable)
                  (condition-case err (prog1 t (call-interactively (function 
previous-line)))
                    ((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)))
+                    nil))
+                 (when hydra-is-helpful (message #("vi: j, k, [q]: quit." 4 5 
(face hydra-face-amaranth)
+                                                   7 8 (face 
hydra-face-amaranth)
+                                                   11 12 (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: j, k, 
[q]: quit." 4 5 (face hydra-face-amaranth)
+                                                                 7 8 (face 
hydra-face-amaranth)
+                                                                 11 12 (face 
hydra-face-blue)))))
+                                             (113 . hydra-vi/nil)
+                                             (107 . hydra-vi/previous-line)
+                                             (106 . hydra-vi/next-line)
+                                             (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/nil nil "Create a hydra with no body and the heads:
 
-\"l\":    `forward-char',
-\"h\":    `backward-char',
 \"j\":    `next-line',
 \"k\":    `previous-line',
 \"q\":    `nil'
@@ -652,11 +502,10 @@ Call the head: `nil'."
                (interactive)
                (set-cursor-color "#e52b50")
                (hydra-disable)
-               (set-cursor-color "#ffffff"))
+               (catch (quote hydra-disable)
+                 (set-cursor-color "#ffffff")))
         (defun hydra-vi/body nil "Create a hydra with no body and the heads:
 
-\"l\":    `forward-char',
-\"h\":    `backward-char',
 \"j\":    `next-line',
 \"k\":    `previous-line',
 \"q\":    `nil'
@@ -664,55 +513,51 @@ Call the head: `nil'."
 The body can be accessed via `hydra-vi/body'."
                (interactive)
                (set-cursor-color "#e52b50")
-               (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))))))))
+               (hydra-disable)
+               (catch (quote hydra-disable)
+                 (when hydra-is-helpful (message #("vi: j, k, [q]: quit." 4 5 
(face hydra-face-amaranth)
+                                                   7 8 (face 
hydra-face-amaranth)
+                                                   11 12 (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: j, k, 
[q]: quit." 4 5 (face hydra-face-amaranth)
+                                                                 7 8 (face 
hydra-face-amaranth)
+                                                                 11 12 (face 
hydra-face-blue)))))
+                                             (113 . hydra-vi/nil)
+                                             (107 . hydra-vi/previous-line)
+                                             (106 . hydra-vi/next-line)
+                                             (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)))))))))
 
 (provide 'hydra-test)
 
diff --git a/hydra.el b/hydra.el
index b8eef4a..86abcfc 100644
--- a/hydra.el
+++ b/hydra.el
@@ -247,29 +247,28 @@ BODY-COLOR, BODY-PRE, and BODY-POST are used as well."
      ,doc
      (interactive)
      ,@(when body-pre (list body-pre))
-     ,@(delq nil
-             (if (eq color 'blue)
-                 `((hydra-disable)
-                   ,(when cmd `(call-interactively #',cmd))
-                   ,body-post)
-               `(,(when cmd
-                        `(catch 'hydra-disable
-                           (hydra-disable)
-                           (condition-case err
+     (hydra-disable)
+     (catch 'hydra-disable
+       ,@(delq nil
+               (if (eq color 'blue)
+                   `(,(when cmd `(call-interactively #',cmd))
+                      ,body-post)
+                 `(,(when cmd
+                          `(condition-case err
                                (prog1 t
                                  (call-interactively #',cmd))
                              ((debug error)
                               (message "%S" err)
                               (sit-for 0.8)
-                              nil))))
-                  (when hydra-is-helpful
-                    (message ,hint))
-                  (setq hydra-last
-                        (hydra-set-transient-map
-                         (setq hydra-curr-map ',keymap)
-                         t
-                         ,@(if (and (not (eq body-color 'amaranth)) body-post)
-                               `((lambda () ,body-post))))))))))
+                              nil)))
+                    (when hydra-is-helpful
+                      (message ,hint))
+                    (setq hydra-last
+                          (hydra-set-transient-map
+                           (setq hydra-curr-map ',keymap)
+                           t
+                           ,@(if (and (not (eq body-color 'amaranth)) 
body-post)
+                                 `((lambda () ,body-post)))))))))))
 
 ;;* Macros
 ;;** hydra-create



reply via email to

[Prev in Thread] Current Thread [Next in Thread]