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

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

[elpa] master d0cc1c5 01/45: Define a keymap var for each hydra and re-u


From: Oleh Krehel
Subject: [elpa] master d0cc1c5 01/45: Define a keymap var for each hydra and re-use it
Date: Thu, 16 Apr 2015 12:45:39 +0000

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

    Define a keymap var for each hydra and re-use it
    
    * hydra.el (hydra--make-defun): It will receive not the keymap, but the
      variable that hold the keymap.
    (defhydra): Define keymap as a variable.
    
    * hydra-test.el (hydra-red-error): Update test.
    (hydra-blue-toggle): Update test.
    (hydra-amaranth-vi): Update test.
    (hydra-zoom-duplicate-1): Update test.
    (hydra-zoom-duplicate-2): Update test.
---
 hydra-test.el |  620 ++++++++++++++++++---------------------------------------
 hydra.el      |   17 +-
 2 files changed, 207 insertions(+), 430 deletions(-)

diff --git a/hydra-test.el b/hydra-test.el
index 155c047..9fc4ad0 100644
--- a/hydra-test.el
+++ b/hydra-test.el
@@ -37,6 +37,37 @@
        ("k" previous-error "prev")
        ("SPC" hydra-repeat "rep" :bind nil)))
     '(progn
+      (defvar hydra-error/keymap
+        (quote (keymap (7 . hydra-keyboard-quit)
+                       (32 . hydra-repeat)
+                       (107 . hydra-error/previous-error)
+                       (106 . hydra-error/next-error)
+                       (104 . hydra-error/first-error)
+                       (switch-frame . hydra--handle-switch-frame)
+                       (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)))
+        "Keymap for hydra-error.")
       (defun hydra-error/first-error nil "Create a hydra with a \"M-g\" body 
and the heads:
 
 \"h\":    `first-error',
@@ -51,45 +82,13 @@ Call the head: `first-error'."
              (hydra-default-pre)
              (hydra-disable)
              (catch (quote hydra-disable)
-               (condition-case err (prog1 t (call-interactively (function 
first-error)))
+               (condition-case err (call-interactively (function first-error))
                  ((quit error)
                   (message "%S" err)
-                  (unless hydra-lv (sit-for 0.8))
-                  nil))
+                  (unless hydra-lv (sit-for 0.8))))
                (when hydra-is-helpful (hydra-error/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (32 . hydra-repeat)
-                                           (107 . hydra-error/previous-error)
-                                           (106 . hydra-error/next-error)
-                                           (104 . hydra-error/first-error)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-error/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))))
       (defun hydra-error/next-error nil "Create a hydra with a \"M-g\" body 
and the heads:
 
 \"h\":    `first-error',
@@ -104,45 +103,13 @@ Call the head: `next-error'."
              (hydra-default-pre)
              (hydra-disable)
              (catch (quote hydra-disable)
-               (condition-case err (prog1 t (call-interactively (function 
next-error)))
+               (condition-case err (call-interactively (function next-error))
                  ((quit error)
                   (message "%S" err)
-                  (unless hydra-lv (sit-for 0.8))
-                  nil))
+                  (unless hydra-lv (sit-for 0.8))))
                (when hydra-is-helpful (hydra-error/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (32 . hydra-repeat)
-                                           (107 . hydra-error/previous-error)
-                                           (106 . hydra-error/next-error)
-                                           (104 . hydra-error/first-error)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-error/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))))
       (defun hydra-error/previous-error nil "Create a hydra with a \"M-g\" 
body and the heads:
 
 \"h\":    `first-error',
@@ -157,54 +124,22 @@ Call the head: `previous-error'."
              (hydra-default-pre)
              (hydra-disable)
              (catch (quote hydra-disable)
-               (condition-case err (prog1 t (call-interactively (function 
previous-error)))
+               (condition-case err (call-interactively (function 
previous-error))
                  ((quit error)
                   (message "%S" err)
-                  (unless hydra-lv (sit-for 0.8))
-                  nil))
+                  (unless hydra-lv (sit-for 0.8))))
                (when hydra-is-helpful (hydra-error/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (32 . hydra-repeat)
-                                           (107 . hydra-error/previous-error)
-                                           (106 . hydra-error/next-error)
-                                           (104 . hydra-error/first-error)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-error/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))))
       (unless (keymapp (lookup-key global-map (kbd "M-g")))
         (define-key global-map (kbd "M-g")
           nil))
       (define-key global-map [134217831 104]
-        (function hydra-error/first-error))
+       (function hydra-error/first-error))
       (define-key global-map [134217831 106]
-        (function hydra-error/next-error))
+       (function hydra-error/next-error))
       (define-key global-map [134217831 107]
-        (function hydra-error/previous-error))
+       (function hydra-error/previous-error))
       (defun hydra-error/hint nil
         (if hydra-lv (lv-message (format #("error: [h]: first, [j]: next, [k]: 
prev, [SPC]: rep." 8 9 (face hydra-face-red)
                                            20 21 (face hydra-face-red)
@@ -227,39 +162,8 @@ The body can be accessed via `hydra-error/body'."
              (hydra-disable)
              (catch (quote hydra-disable)
                (when hydra-is-helpful (hydra-error/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (32 . hydra-repeat)
-                                           (107 . hydra-error/previous-error)
-                                           (106 . hydra-error/next-error)
-                                           (104 . hydra-error/first-error)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-error/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))
                (setq prefix-arg current-prefix-arg)))))))
 
 (ert-deftest hydra-blue-toggle ()
@@ -273,6 +177,37 @@ The body can be accessed via `hydra-error/body'."
        ("a" abbrev-mode "abbrev")
        ("q" nil "cancel")))
     '(progn
+      (defvar hydra-toggle/keymap
+        (quote (keymap (7 . hydra-keyboard-quit)
+                       (113 . hydra-toggle/nil)
+                       (97 . hydra-toggle/abbrev-mode-and-exit)
+                       (102 . hydra-toggle/auto-fill-mode-and-exit)
+                       (116 . hydra-toggle/toggle-truncate-lines-and-exit)
+                       (switch-frame . hydra--handle-switch-frame)
+                       (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)))
+        "Keymap for hydra-toggle.")
       (defun hydra-toggle/toggle-truncate-lines-and-exit nil "Create a hydra 
with no body and the heads:
 
 \"t\":    `toggle-truncate-lines',
@@ -358,39 +293,8 @@ The body can be accessed via `hydra-toggle/body'."
              (hydra-disable)
              (catch (quote hydra-disable)
                (when hydra-is-helpful (hydra-toggle/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (113 . hydra-toggle/nil)
-                                           (97 . 
hydra-toggle/abbrev-mode-and-exit)
-                                           (102 . 
hydra-toggle/auto-fill-mode-and-exit)
-                                           (116 . 
hydra-toggle/toggle-truncate-lines-and-exit)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-toggle/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))
                (setq prefix-arg current-prefix-arg)))))))
 
 (ert-deftest hydra-amaranth-vi ()
@@ -408,6 +312,41 @@ The body can be accessed via `hydra-toggle/body'."
        ("k" previous-line)
        ("q" nil "quit")))
     '(progn
+      (defvar hydra-vi/keymap
+        (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 (unless hydra-lv (sit-for 
0.8))
+                                (hydra-vi/hint)))
+                       (113 . hydra-vi/nil)
+                       (107 . hydra-vi/previous-line)
+                       (106 . hydra-vi/next-line)
+                       (7 . hydra-vi/hydra-keyboard-quit-and-exit)
+                       (switch-frame . hydra--handle-switch-frame)
+                       (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)))
+        "Keymap for hydra-vi.")
       (defun hydra-vi/hydra-keyboard-quit-and-exit nil "Create a hydra with no 
body and the heads:
 
 \"\":    `hydra-keyboard-quit',
@@ -441,49 +380,13 @@ Call the head: `next-line'."
              (set-cursor-color "#e52b50")
              (hydra-disable)
              (catch (quote hydra-disable)
-               (condition-case err (prog1 t (call-interactively (function 
next-line)))
+               (condition-case err (call-interactively (function next-line))
                  ((quit error)
                   (message "%S" err)
-                  (unless hydra-lv (sit-for 0.8))
-                  nil))
+                  (unless hydra-lv (sit-for 0.8))))
                (when hydra-is-helpful (hydra-vi/hint))
-               (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 (unless 
hydra-lv (sit-for 0.8))
-                                                    (hydra-vi/hint)))
-                                           (113 . hydra-vi/nil)
-                                           (107 . hydra-vi/previous-line)
-                                           (106 . hydra-vi/next-line)
-                                           (7 . 
hydra-vi/hydra-keyboard-quit-and-exit)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-vi/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))))
       (defun hydra-vi/previous-line nil "Create a hydra with no body and the 
heads:
 
 \"\":    `hydra-keyboard-quit',
@@ -499,49 +402,13 @@ Call the head: `previous-line'."
              (set-cursor-color "#e52b50")
              (hydra-disable)
              (catch (quote hydra-disable)
-               (condition-case err (prog1 t (call-interactively (function 
previous-line)))
+               (condition-case err (call-interactively (function 
previous-line))
                  ((quit error)
                   (message "%S" err)
-                  (unless hydra-lv (sit-for 0.8))
-                  nil))
+                  (unless hydra-lv (sit-for 0.8))))
                (when hydra-is-helpful (hydra-vi/hint))
-               (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 (unless 
hydra-lv (sit-for 0.8))
-                                                    (hydra-vi/hint)))
-                                           (113 . hydra-vi/nil)
-                                           (107 . hydra-vi/previous-line)
-                                           (106 . hydra-vi/next-line)
-                                           (7 . 
hydra-vi/hydra-keyboard-quit-and-exit)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-vi/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))))
       (defun hydra-vi/nil nil "Create a hydra with no body and the heads:
 
 \"\":    `hydra-keyboard-quit',
@@ -580,43 +447,8 @@ The body can be accessed via `hydra-vi/body'."
              (hydra-disable)
              (catch (quote hydra-disable)
                (when hydra-is-helpful (hydra-vi/hint))
-               (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 (unless 
hydra-lv (sit-for 0.8))
-                                                    (hydra-vi/hint)))
-                                           (113 . hydra-vi/nil)
-                                           (107 . hydra-vi/previous-line)
-                                           (106 . hydra-vi/next-line)
-                                           (7 . 
hydra-vi/hydra-keyboard-quit-and-exit)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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 (lambda nil (hydra-cleanup))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-vi/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))
                (setq prefix-arg current-prefix-arg)))))))
 
 (ert-deftest defhydradio ()
@@ -906,6 +738,34 @@ _f_ auto-fill-mode:    %`auto-fill-function
        ("0" (text-scale-set 0) :bind nil :exit t)
        ("1" (text-scale-set 0) nil :bind nil :exit t)))
     '(progn
+      (defvar hydra-zoom/keymap
+        (quote (keymap (7 . hydra-keyboard-quit)
+                       (114 . hydra-zoom/lambda-r)
+                       (switch-frame . hydra--handle-switch-frame)
+                       (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-zoom/lambda-0-and-exit)
+                       (48 . hydra-zoom/lambda-0-and-exit)
+                       (45 . hydra--negative-argument)
+                       (21 . hydra--universal-argument)))
+        "Keymap for hydra-zoom.")
       (defun hydra-zoom/lambda-r nil "Create a hydra with no body and the 
heads:
 
 \"r\":    `(text-scale-set 0)',
@@ -919,43 +779,14 @@ Call the head: `(text-scale-set 0)'."
              (hydra-default-pre)
              (hydra-disable)
              (catch (quote hydra-disable)
-               (condition-case err (prog1 t (call-interactively (function 
(lambda nil (interactive)
-                                                                             
(text-scale-set 0)))))
+               (condition-case err (call-interactively (function (lambda nil 
(interactive)
+                                                                    
(text-scale-set 0))))
                  ((quit error)
                   (message "%S" err)
-                  (unless hydra-lv (sit-for 0.8))
-                  nil))
+                  (unless hydra-lv (sit-for 0.8))))
                (when hydra-is-helpful (hydra-zoom/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (114 . hydra-zoom/lambda-r)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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-zoom/lambda-0-and-exit)
-                                           (48 . hydra-zoom/lambda-0-and-exit)
-                                           (45 . hydra--negative-argument)
-                                           (21 . hydra--universal-argument))))
-                      t (lambda nil (hydra-cleanup))))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-zoom/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))))
       (defun hydra-zoom/lambda-0-and-exit nil "Create a hydra with no body and 
the heads:
 
 \"r\":    `(text-scale-set 0)',
@@ -989,36 +820,8 @@ The body can be accessed via `hydra-zoom/body'."
              (hydra-disable)
              (catch (quote hydra-disable)
                (when hydra-is-helpful (hydra-zoom/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (114 . hydra-zoom/lambda-r)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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-zoom/lambda-0-and-exit)
-                                           (48 . hydra-zoom/lambda-0-and-exit)
-                                           (45 . hydra--negative-argument)
-                                           (21 . hydra--universal-argument))))
-                      t (lambda nil (hydra-cleanup))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-zoom/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))
                (setq prefix-arg current-prefix-arg)))))))
 
 (ert-deftest hydra-zoom-duplicate-2 ()
@@ -1031,6 +834,34 @@ The body can be accessed via `hydra-zoom/body'."
        ("0" (text-scale-set 0) :bind nil :exit t)
        ("1" (text-scale-set 0) nil :bind nil)))
     '(progn
+      (defvar hydra-zoom/keymap
+        (quote (keymap (7 . hydra-keyboard-quit)
+                       (114 . hydra-zoom/lambda-r)
+                       (switch-frame . hydra--handle-switch-frame)
+                       (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-zoom/lambda-r)
+                       (48 . hydra-zoom/lambda-0-and-exit)
+                       (45 . hydra--negative-argument)
+                       (21 . hydra--universal-argument)))
+        "Keymap for hydra-zoom.")
       (defun hydra-zoom/lambda-r nil "Create a hydra with no body and the 
heads:
 
 \"r\":    `(text-scale-set 0)',
@@ -1044,43 +875,14 @@ Call the head: `(text-scale-set 0)'."
              (hydra-default-pre)
              (hydra-disable)
              (catch (quote hydra-disable)
-               (condition-case err (prog1 t (call-interactively (function 
(lambda nil (interactive)
-                                                                             
(text-scale-set 0)))))
+               (condition-case err (call-interactively (function (lambda nil 
(interactive)
+                                                                         
(text-scale-set 0))))
                  ((quit error)
                   (message "%S" err)
-                  (unless hydra-lv (sit-for 0.8))
-                  nil))
+                  (unless hydra-lv (sit-for 0.8))))
                (when hydra-is-helpful (hydra-zoom/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (114 . hydra-zoom/lambda-r)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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-zoom/lambda-r)
-                                           (48 . hydra-zoom/lambda-0-and-exit)
-                                           (45 . hydra--negative-argument)
-                                           (21 . hydra--universal-argument))))
-                      t (lambda nil (hydra-cleanup))))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-zoom/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))))
       (defun hydra-zoom/lambda-0-and-exit nil "Create a hydra with no body and 
the heads:
 
 \"r\":    `(text-scale-set 0)',
@@ -1096,7 +898,7 @@ Call the head: `(text-scale-set 0)'."
              (hydra-cleanup)
              (catch (quote hydra-disable)
                (call-interactively (function (lambda nil (interactive)
-                                                (text-scale-set 0))))))
+                                                     (text-scale-set 0))))))
       (defun hydra-zoom/hint nil
         (if hydra-lv (lv-message (format #("zoom: [r 0]: reset." 7 8 (face 
hydra-face-red)
                                            9 10 (face hydra-face-blue))))
@@ -1114,36 +916,8 @@ The body can be accessed via `hydra-zoom/body'."
              (hydra-disable)
              (catch (quote hydra-disable)
                (when hydra-is-helpful (hydra-zoom/hint))
-               (setq hydra-last
-                     (hydra-set-transient-map
-                      (setq hydra-curr-map
-                            (quote (keymap (7 . hydra-keyboard-quit)
-                                           (114 . hydra-zoom/lambda-r)
-                                           (switch-frame . 
hydra--handle-switch-frame)
-                                           (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-zoom/lambda-r)
-                                           (48 . hydra-zoom/lambda-0-and-exit)
-                                           (45 . hydra--negative-argument)
-                                           (21 . hydra--universal-argument))))
-                      t (lambda nil (hydra-cleanup))))
+               (setq hydra-last (hydra-set-transient-map (setq hydra-curr-map 
hydra-zoom/keymap)
+                                                         t (lambda nil 
(hydra-cleanup))))
                (setq prefix-arg current-prefix-arg)))))))
 
 (ert-deftest hydra--pad ()
diff --git a/hydra.el b/hydra.el
index 18233af..47badef 100644
--- a/hydra.el
+++ b/hydra.el
@@ -598,18 +598,16 @@ OTHER-POST is an optional extension to the :post key of 
BODY."
                         ,body-post)
                    `(,(when cmd
                             `(condition-case err
-                                 (prog1 t
-                                   (call-interactively #',cmd))
+                                 (call-interactively #',cmd)
                                ((quit error)
                                 (message "%S" err)
                                 (unless hydra-lv
-                                  (sit-for 0.8))
-                                nil)))
+                                  (sit-for 0.8)))))
                       (when hydra-is-helpful
                         (,hint))
                       (setq hydra-last
                             (hydra-set-transient-map
-                             (setq hydra-curr-map ',keymap)
+                             (setq hydra-curr-map ,keymap)
                              t
                              ,(if (and
                                    (not (memq body-color
@@ -886,6 +884,7 @@ result of `defhydra'."
   (when (keywordp (car body))
     (setq body (cons nil (cons nil body))))
   (let* ((keymap (copy-keymap hydra-base-map))
+         (keymap-name (intern (format "%S/keymap" name)))
          (body-name (intern (format "%S/body" name)))
          (body-key (cadr body))
          (body-plist (cddr body))
@@ -930,10 +929,14 @@ result of `defhydra'."
       (hydra--make-funcall body-body-pre)
       (hydra--handle-nonhead keymap name body heads)
       `(progn
+         ;; create keymap
+         (defvar ,keymap-name
+           ',keymap
+           ,(format "Keymap for %S." name))
          ;; create defuns
          ,@(mapcar
             (lambda (head)
-              (hydra--make-defun name body doc head keymap
+              (hydra--make-defun name body doc head keymap-name
                                  body-pre body-post))
             heads-nodup)
          ;; free up keymap prefix
@@ -970,7 +973,7 @@ result of `defhydra'."
            ,(hydra--message name body docstring heads))
          ,(hydra--make-defun
            name body doc '(nil body)
-           keymap
+           keymap-name
            (or body-body-pre body-pre) body-post
            '(setq prefix-arg current-prefix-arg))))))
 



reply via email to

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