[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master e21d1d8 1/7: Update the call order and allow called functi
From: |
Oleh Krehel |
Subject: |
[elpa] master e21d1d8 1/7: Update the call order and allow called functions to exit |
Date: |
Sun, 08 Feb 2015 15:06:31 +0000 |
branch: master
commit e21d1d8e89d2af70bccb72d9b169115cf977da1c
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>
Update the call order and allow called functions to exit
* hydra.el (defhydra): First disable the transient map, then call red
head, allowing it to throw `hydra-disable' to break, then re-set
transient map.
If the called function raises an error, display this error for a
while, but still set the transient map.
* hydra-test.el: Update test.
Re #15.
---
hydra-test.el | 290 ++++++++++++++++++++++++++++++---------------------------
hydra.el | 18 +++-
2 files changed, 167 insertions(+), 141 deletions(-)
diff --git a/hydra-test.el b/hydra-test.el
index 07d0a74..f3b4094 100644
--- a/hydra-test.el
+++ b/hydra-test.el
@@ -46,39 +46,45 @@ The body can be accessed via `hydra-error/body'.
Call the head: `first-error'."
(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 '(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))
- (call-interactively (function first-error)))
+ (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 '(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',
@@ -89,39 +95,45 @@ The body can be accessed via `hydra-error/body'.
Call the head: `next-error'."
(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 '(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))
- (call-interactively (function next-error)))
+ (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 '(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',
@@ -132,39 +144,45 @@ The body can be accessed via `hydra-error/body'.
Call the head: `previous-error'."
(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 '(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))
- (call-interactively (function previous-error)))
+ (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 '(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))
@@ -237,8 +255,8 @@ The body can be accessed via `toggle/body'.
Call the head: `toggle-truncate-lines'."
(interactive)
- (hydra-disable)
- (call-interactively (function toggle-truncate-lines)))
+(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',
@@ -250,8 +268,8 @@ The body can be accessed via `toggle/body'.
Call the head: `auto-fill-mode'."
(interactive)
- (hydra-disable)
- (call-interactively (function auto-fill-mode)))
+(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',
@@ -263,8 +281,8 @@ The body can be accessed via `toggle/body'.
Call the head: `abbrev-mode'."
(interactive)
- (hydra-disable)
- (call-interactively (function abbrev-mode)))
+(hydra-disable)
+(call-interactively (function abbrev-mode)))
(defun toggle/nil nil "Create a hydra with no body and the heads:
\"t\": `toggle-truncate-lines',
@@ -276,7 +294,7 @@ The body can be accessed via `toggle/body'.
Call the head: `nil'."
(interactive)
- (hydra-disable))
+(hydra-disable))
(defun toggle/body nil "Create a hydra with no body and the heads:
\"t\": `toggle-truncate-lines',
@@ -286,40 +304,40 @@ 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))))
+(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
'(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)
+ (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)))))))
+ t)))))))
(provide 'hydra-test)
diff --git a/hydra.el b/hydra.el
index 738b77c..043b2a3 100644
--- a/hydra.el
+++ b/hydra.el
@@ -313,11 +313,19 @@ in turn can be either red or blue."
`((hydra-disable)
,@(unless (null (cadr head))
`((call-interactively #',(cadr head)))))
- `((when hydra-is-helpful
- (message ,hint))
- (setq hydra-last
- (hydra-set-transient-map (setq hydra-curr-map
',keymap) t))
- (call-interactively #',(cadr head))))))
+ `((catch 'hydra-disable
+ (hydra-disable)
+ (condition-case err
+ (prog1 t
+ (call-interactively #',(cadr head)))
+ ((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)))))))
heads names)
,@(unless (or (null body-key)
(null method)
- [elpa] master updated (8b585bc -> 2fb700c), Oleh Krehel, 2015/02/08
- [elpa] master 37b6177 3/7: README.md: update for 0.7.0, Oleh Krehel, 2015/02/08
- [elpa] master e8bbb70 2/7: Add :pre and :post clauses to Hydra body, Oleh Krehel, 2015/02/08
- [elpa] master 843bc70 4/7: Add amaranth (immortal) Hydras, Oleh Krehel, 2015/02/08
- [elpa] master e21d1d8 1/7: Update the call order and allow called functions to exit,
Oleh Krehel <=
- [elpa] master 68bcaa8 6/7: Bump version, Oleh Krehel, 2015/02/08
- [elpa] master 07e4aaa 5/7: hydra-test.el: add test, Oleh Krehel, 2015/02/08
- [elpa] master 2fb700c 7/7: Merge commit '68bcaa8d8df5518217a3833fd1bb400c8225fe02' from hydra, Oleh Krehel, 2015/02/08