From 6b099f07ce50423ce9362ab0cf3bfa06a65de9ef Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 7 Oct 2016 19:25:32 +0200 Subject: [PATCH] Fix #12: don't shadow major-mode bindings with local map --- core/defuns/defuns-popups.el | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/core/defuns/defuns-popups.el b/core/defuns/defuns-popups.el index 418bf6805..444c25549 100644 --- a/core/defuns/defuns-popups.el +++ b/core/defuns/defuns-popups.el @@ -16,17 +16,12 @@ (define-key map [remap evil-window-move-far-right] 'ignore) (define-key map [remap evil-window-split] 'ignore) (define-key map [remap evil-window-vsplit] 'ignore) + (define-key map [remap evil-force-normal-state] 'doom/popup-close-maybe) + (define-key map [escape] 'doom/popup-close-maybe) + (define-key map (kbd "ESC") 'doom/popup-close-maybe) map) "Active keymap in popup windows.") -(defvar doom-popup-mode-local-map - (let ((map (make-sparse-keymap))) - (define-key map [remap evil-force-normal-state] 'doom/popup-close) - (define-key map [escape] 'doom/popup-close) - (define-key map (kbd "ESC") 'doom/popup-close) - map) - "Active keymap in popup windows with ESC bindings.") - (advice-add 'doom/evil-window-move :around 'doom*popup-window-move) ;;;###autoload @@ -93,6 +88,15 @@ window. Returns nil or the popup window." (delete-window window) (unless dont-redraw (redraw-frame)))) +;;;###autoload +(defun doom/popup-close-maybe () + "Close the current popup *if* its buffer doesn't have a :noesc rule in +`doom-popup-rules'." + (interactive) + (if (memq :noesc doom-popup-rule) + (call-interactively 'evil-force-normal-state) + (doom/popup-close))) + ;;;###autoload (defun doom/popup-close-all (&optional dont-kill dont-redraw) "Closes all popups (kill them if DONT-KILL-BUFFERS is non-nil). Then redraw @@ -155,10 +159,7 @@ variables." (cdr it))) doom-popup-rules))) (setq doom-last-popup (current-buffer)) - (setq-local doom-popup-rule rules) - (let ((map doom-popup-mode-map)) - (unless (memq :noesc rules) - (use-local-map doom-popup-mode-local-map))))) + (setq-local doom-popup-rule rules))) (provide 'defuns-popups) ;;; defuns-popups.el ends here