From 604bcc03782008500f27a6467c5684b8dde582ae Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Mon, 9 Jan 2017 16:38:40 -0500 Subject: [PATCH] Improve stability of popups Now, popup windows are marked as dedicated to their buffer. This makes it much less likely (if not impossible) for new buffers to be loaded in that window, particularly through interactive file selecting tools, like projectile-find-file or counsel-recentf. --- core/defuns/defuns-popups.el | 53 +++++++++++++++++------------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/core/defuns/defuns-popups.el b/core/defuns/defuns-popups.el index 67fd1d71b..fb16026c8 100644 --- a/core/defuns/defuns-popups.el +++ b/core/defuns/defuns-popups.el @@ -22,7 +22,25 @@ map) "Active keymap in popup windows.") -(advice-add 'doom/evil-window-move :around 'doom*popup-window-move) +;;;###autoload +(define-minor-mode doom-popup-mode + "Minor mode for pop-up windows. Enables local keymaps and sets state +variables." + :global nil + :init-value nil + :keymap doom-popup-mode-map + (let ((rules (--any (let ((key (car it))) + (when (cond ((symbolp key) + (or (eq major-mode key) + (derived-mode-p key))) + ((stringp key) + (string-match-p key (buffer-name)))) + (cdr it))) + doom-popup-rules))) + (set-window-dedicated-p nil doom-popup-mode) + (setq doom-last-popup (current-buffer)) + (setq-local doom-popup-rule rules))) +(put 'doom-popup-mode 'permanent-local t) ;;;###autoload (defun doom*popup-window-move (orig-fn &rest args) @@ -80,12 +98,12 @@ window. Returns nil or the popup window." ;; If REPL... (when (bound-and-true-p repl-toggle-mode) (setq rtog/--last-buffer nil)) - (if (not (or dont-kill (memq :nokill doom-popup-rule))) - (let ((kill-buffer-query-functions - (delq 'process-kill-buffer-query-function - kill-buffer-query-functions))) - (kill-buffer (window-buffer window))) - (doom-popup-mode -1))) + (doom-popup-mode -1) + (unless (or dont-kill (memq :nokill doom-popup-rule)) + (let ((kill-buffer-query-functions + (delq 'process-kill-buffer-query-function + kill-buffer-query-functions))) + (kill-buffer (window-buffer window))))) (delete-window window))) ;;;###autoload @@ -136,26 +154,5 @@ window. Returns nil or the popup window." "Prevents messing up a popup buffer on window changes" (doom/popup-save (apply orig-fun args))) -(put 'doom-popup-mode 'permanent-local t) -(put 'doom-popup-rule 'permanent-local t) - -;;;###autoload -(define-minor-mode doom-popup-mode - "Minor mode for pop-up windows. Enables local keymaps and sets state -variables." - :global nil - :init-value nil - :keymap doom-popup-mode-map - (let ((rules (--any (let ((key (car it))) - (when (cond ((symbolp key) - (or (eq major-mode key) - (derived-mode-p key))) - ((stringp key) - (string-match-p key (buffer-name)))) - (cdr it))) - doom-popup-rules))) - (setq doom-last-popup (current-buffer)) - (setq-local doom-popup-rule rules))) - (provide 'defuns-popups) ;;; defuns-popups.el ends here