From 44b2d66f0ba061fa24581b950c5f77e60fe35e5b Mon Sep 17 00:00:00 2001 From: Jimmy Yuen Ho Wong Date: Sun, 14 Feb 2021 21:26:41 +0000 Subject: [PATCH 1/2] Fix #153 delete popup window where there aren't any prev buffers --- window-purpose-x.el | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/window-purpose-x.el b/window-purpose-x.el index f7e89cb..fc2767f 100644 --- a/window-purpose-x.el +++ b/window-purpose-x.el @@ -505,6 +505,18 @@ the popup window doesn't need to close." (purpose-x-popwin-close-windows) (purpose-x-popwin-remove-hooks)))) +(defun purpose-x-popwin-quit-restore-window-advice (fn &optional window bury-or-kill) + "Close pop up window when there aren't previous buffers can be shown in it." + (when-let* ((window (ignore-errors (window-normalize-window window t))) + (is-popup (eq 'popup (purpose-window-purpose window)))) + (funcall fn window bury-or-kill) + (when (and is-popup + (window-live-p window) + ;; quit-restore-window did not kill window + (null (window-parameter window 'quit-restore)) + (not (window-prev-buffers window))) + (ignore-errors (delete-window window))))) + ;;;###autoload (defun purpose-x-popwin-setup () "Activate `popwin' emulation. @@ -521,14 +533,16 @@ Look at `purpose-x-popwin-*' variables and functions to learn more." (purpose-x-popwin-update-conf) (setq purpose-special-action-sequences (cl-delete 'popup purpose-special-action-sequences :key #'car)) - (purpose-x-popupify-purpose 'popup #'purpose-x-popwin-display-buffer)) + (purpose-x-popupify-purpose 'popup #'purpose-x-popwin-display-buffer) + (advice-add 'quit-restore-window :around 'purpose-x-popwin-quit-restore-window-advice)) (defun purpose-x-popwin-unset () "Deactivate `popwin' emulation." (interactive) (purpose-del-extension-configuration :popwin) (purpose-x-unpopupify-purpose 'popup) - (purpose-x-popwin-remove-hooks)) + (purpose-x-popwin-remove-hooks) + (advice-remove 'quit-restore-window 'purpose-x-popwin-quit-restore-window-advice)) ;;; --- purpose-x-popup ends here --- From eb98688a8100255e2a78abf18eeb8d0609b79c1a Mon Sep 17 00:00:00 2001 From: Jimmy Yuen Ho Wong Date: Sun, 14 Feb 2021 22:07:16 +0000 Subject: [PATCH 2/2] Don't check window purpose so all quittable windows can be closed --- window-purpose-x.el | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/window-purpose-x.el b/window-purpose-x.el index fc2767f..81b9add 100644 --- a/window-purpose-x.el +++ b/window-purpose-x.el @@ -507,11 +507,9 @@ the popup window doesn't need to close." (defun purpose-x-popwin-quit-restore-window-advice (fn &optional window bury-or-kill) "Close pop up window when there aren't previous buffers can be shown in it." - (when-let* ((window (ignore-errors (window-normalize-window window t))) - (is-popup (eq 'popup (purpose-window-purpose window)))) + (when-let* ((window (ignore-errors (window-normalize-window window t)))) (funcall fn window bury-or-kill) - (when (and is-popup - (window-live-p window) + (when (and (window-live-p window) ;; quit-restore-window did not kill window (null (window-parameter window 'quit-restore)) (not (window-prev-buffers window)))