branch: master commit bb01930bb74db39bbcf6ca014bc4d7607b1762c7 Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
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