From ca63b0bbfc1342c7192d601af847eeeb85153c3f Mon Sep 17 00:00:00 2001 From: Yiming Chen Date: Wed, 4 Dec 2019 08:20:17 +0800 Subject: [PATCH 1/4] ui/popup: respect :select nil when reusing a window - before this change: when reusing a window, select option would get ignored - after this change: when reusing a window, select option would be used just as a new popup --- modules/ui/popup/autoload/popup.el | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/ui/popup/autoload/popup.el b/modules/ui/popup/autoload/popup.el index 5979ca636..9d93da4d4 100644 --- a/modules/ui/popup/autoload/popup.el +++ b/modules/ui/popup/autoload/popup.el @@ -189,7 +189,10 @@ and enables `+popup-buffer-mode'." (window (display-buffer-reuse-window buffer alist))) (when window (unless +popup--inhibit-select - (select-window window)) + (let ((select (+popup-parameter 'select window))) + (if (functionp select) + (funcall select window origin) + (select-window (if select window origin))))) window)) (when-let (popup (cl-loop for func in actions if (funcall func buffer alist) From 359ae77250431e868508fcfe8052196ec7f2757e Mon Sep 17 00:00:00 2001 From: Yiming Chen Date: Wed, 4 Dec 2019 08:32:27 +0800 Subject: [PATCH 2/4] ui/popup: extract +popup--maybe-select-window helper function --- modules/ui/popup/autoload/popup.el | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/modules/ui/popup/autoload/popup.el b/modules/ui/popup/autoload/popup.el index 9d93da4d4..b98b55e48 100644 --- a/modules/ui/popup/autoload/popup.el +++ b/modules/ui/popup/autoload/popup.el @@ -132,6 +132,15 @@ the buffer is visible, then set another timer and try again later." (let ((ignore-window-parameters t)) (split-window window size side))) +(defun +popup--maybe-select-window (window) + "Select a window based on `+popup--inhibit-select' and this window's `select' parameter." + (unless +popup--inhibit-select + (let ((origin (selected-window)) + (select (+popup-parameter 'select window))) + (if (functionp select) + (funcall select window origin) + (select-window (if select window origin)))))) + ;;;###autoload (defun +popup--init (window &optional alist) "Initializes a popup window. Run any time a popup is opened. It sets the @@ -179,8 +188,7 @@ and enables `+popup-buffer-mode'." ;;;###autoload (defun +popup-buffer (buffer &optional alist) "Open BUFFER in a popup window. ALIST describes its features." - (let* ((origin (selected-window)) - (window-min-height 3) + (let* ((window-min-height 3) (alist (+popup--normalize-alist alist)) (actions (or (cdr (assq 'actions alist)) +popup-default-display-buffer-actions))) @@ -188,21 +196,13 @@ and enables `+popup-buffer-mode'." (alist (remove (assq 'window-height alist) alist)) (window (display-buffer-reuse-window buffer alist))) (when window - (unless +popup--inhibit-select - (let ((select (+popup-parameter 'select window))) - (if (functionp select) - (funcall select window origin) - (select-window (if select window origin))))) + (+popup--maybe-select-window window) window)) (when-let (popup (cl-loop for func in actions if (funcall func buffer alist) return it)) (+popup--init popup alist) - (unless +popup--inhibit-select - (let ((select (+popup-parameter 'select popup))) - (if (functionp select) - (funcall select popup origin) - (select-window (if select popup origin))))) + (+popup--maybe-select-window popup) popup)))) ;;;###autoload From 79faa02d6b966ee6f03ec4ea710c23b1cc055521 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 3 Dec 2019 19:59:27 -0500 Subject: [PATCH 3/4] Record origin window earlier The selected window could change in between +popup--maybe-select-window calls. --- modules/ui/popup/autoload/popup.el | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/ui/popup/autoload/popup.el b/modules/ui/popup/autoload/popup.el index b98b55e48..fc945beb4 100644 --- a/modules/ui/popup/autoload/popup.el +++ b/modules/ui/popup/autoload/popup.el @@ -132,11 +132,10 @@ the buffer is visible, then set another timer and try again later." (let ((ignore-window-parameters t)) (split-window window size side))) -(defun +popup--maybe-select-window (window) +(defun +popup--maybe-select-window (window &optional origin) "Select a window based on `+popup--inhibit-select' and this window's `select' parameter." (unless +popup--inhibit-select - (let ((origin (selected-window)) - (select (+popup-parameter 'select window))) + (let ((select (+popup-parameter 'select window))) (if (functionp select) (funcall select window origin) (select-window (if select window origin)))))) @@ -188,7 +187,8 @@ and enables `+popup-buffer-mode'." ;;;###autoload (defun +popup-buffer (buffer &optional alist) "Open BUFFER in a popup window. ALIST describes its features." - (let* ((window-min-height 3) + (let* ((origin (selected-window)) + (window-min-height 3) (alist (+popup--normalize-alist alist)) (actions (or (cdr (assq 'actions alist)) +popup-default-display-buffer-actions))) @@ -196,13 +196,13 @@ and enables `+popup-buffer-mode'." (alist (remove (assq 'window-height alist) alist)) (window (display-buffer-reuse-window buffer alist))) (when window - (+popup--maybe-select-window window) + (+popup--maybe-select-window window origin) window)) (when-let (popup (cl-loop for func in actions if (funcall func buffer alist) return it)) (+popup--init popup alist) - (+popup--maybe-select-window popup) + (+popup--maybe-select-window popup origin) popup)))) ;;;###autoload From bcdb9f583a7c61e95080bc37972b458782d93275 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 3 Dec 2019 20:00:38 -0500 Subject: [PATCH 4/4] Require origin argument If it doesn't satisfy windowp, it'll cause errors. --- modules/ui/popup/autoload/popup.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ui/popup/autoload/popup.el b/modules/ui/popup/autoload/popup.el index fc945beb4..f658454c3 100644 --- a/modules/ui/popup/autoload/popup.el +++ b/modules/ui/popup/autoload/popup.el @@ -132,7 +132,7 @@ the buffer is visible, then set another timer and try again later." (let ((ignore-window-parameters t)) (split-window window size side))) -(defun +popup--maybe-select-window (window &optional origin) +(defun +popup--maybe-select-window (window origin) "Select a window based on `+popup--inhibit-select' and this window's `select' parameter." (unless +popup--inhibit-select (let ((select (+popup-parameter 'select window)))