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

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

[elpa] master d678cc0 34/45: Work around `overriding-terminal-local-map'


From: Oleh Krehel
Subject: [elpa] master d678cc0 34/45: Work around `overriding-terminal-local-map' being terminal-local
Date: Thu, 16 Apr 2015 12:45:53 +0000

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

    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)



reply via email to

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