branch: master commit d678cc06cc245d0fedc6242fe8ee1bed764477ac Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
Work around `overriding-terminal-local-map' being terminal-local * hydra.el (hydra-disable): Try to reset `overriding-terminal-local-map' for each frame, so that it doesn't happen that the hydra is cancelled in one frame, but not in the other. `hydra-curr-on-exit' is called in the first frame for which there's a transient map. (hydra--clearfun): Disable when `overriding-terminal-local-map' is nil. Fixes #105 --- hydra.el | 37 ++++++++++++++++++++----------------- 1 files changed, 20 insertions(+), 17 deletions(-) diff --git a/hydra.el b/hydra.el index fea8701..39c027c 100644 --- a/hydra.el +++ b/hydra.el @@ -107,27 +107,30 @@ warn: keep KEYMAP and issue a warning instead of running the command." (defun hydra--clearfun () "Disable the current Hydra unless `this-command' is a head." - (if (memq this-command '(handle-switch-frame - keyboard-quit)) - (hydra-disable) - (unless (eq this-command - (lookup-key hydra-curr-map (this-single-command-keys))) - (unless (cl-case hydra-curr-foreign-keys - (warn - (setq this-command 'hydra-amaranth-warn)) - (run - t) - (t nil)) - (hydra-disable))))) + (when (or + (memq this-command '(handle-switch-frame keyboard-quit)) + (null overriding-terminal-local-map) + (not (or (eq this-command + (lookup-key hydra-curr-map (this-single-command-keys))) + (cl-case hydra-curr-foreign-keys + (warn + (setq this-command 'hydra-amaranth-warn)) + (run + t) + (t nil))))) + (hydra-disable))) (defun hydra-disable () "Disable the current Hydra." (remove-hook 'pre-command-hook 'hydra--clearfun) - (internal-pop-keymap hydra-curr-map 'overriding-terminal-local-map) - (when hydra-curr-on-exit - (let ((on-exit hydra-curr-on-exit)) - (setq hydra-curr-on-exit nil) - (funcall on-exit)))) + (dolist (frame (frame-list)) + (with-selected-frame frame + (when overriding-terminal-local-map + (internal-pop-keymap hydra-curr-map 'overriding-terminal-local-map) + (when hydra-curr-on-exit + (let ((on-exit hydra-curr-on-exit)) + (setq hydra-curr-on-exit nil) + (funcall on-exit))))))) (unless (fboundp 'internal-push-keymap) (defun internal-push-keymap (keymap symbol)