diff --git a/modules/feature/popup/autoload.el b/modules/feature/popup/autoload.el index 21c7b4d77..7acc9a00e 100644 --- a/modules/feature/popup/autoload.el +++ b/modules/feature/popup/autoload.el @@ -43,6 +43,7 @@ and enables `+popup-buffer-mode'." (set-window-parameter window 'popup t) (set-window-parameter window 'no-other-window t) (set-window-parameter window 'delete-window #'+popup--destroy) + (set-window-dedicated-p window 'popup) (+popup-buffer-mode +1) (run-hooks '+popup-create-window-hook))) @@ -122,17 +123,17 @@ and enables `+popup-buffer-mode'." ;;;###autoload (defun +popup-buffer (buffer &optional alist) "Open BUFFER in a popup window. ALIST describes its features." - (let* ((old-window (selected-window)) - (alist (+popup--normalize-alist alist)) - (new-window (let ((window-min-height 3)) - (or (display-buffer-reuse-window buffer alist) - (display-buffer-in-side-window buffer alist))))) - (+popup--init new-window alist) - (let ((select (+popup-parameter 'select new-window))) - (if (functionp select) - (funcall select new-window old-window) - (select-window (if select new-window old-window)))) - new-window)) + (let ((old-window (selected-window)) + (alist (+popup--normalize-alist alist)) + (window-min-height 3)) + (when-let* ((new-window (run-hook-with-args-until-success + '+popup-display-buffer-actions buffer alist))) + (+popup--init new-window alist) + (let ((select (+popup-parameter 'select new-window))) + (if (functionp select) + (funcall select new-window old-window) + (select-window (if select new-window old-window)))) + new-window))) ;;;###autoload (defun +popup-parameter (parameter &optional window) diff --git a/modules/feature/popup/config.el b/modules/feature/popup/config.el index e85db3b55..a02137738 100644 --- a/modules/feature/popup/config.el +++ b/modules/feature/popup/config.el @@ -66,6 +66,10 @@ a brief description of some native window parameters that Emacs uses: If CDR is non-nil, this window becomes invisible to `other-window' and `pop-to-buffer'. Doom popups sets this. The default is nil.") +(defvar +popup-display-buffer-actions + '(display-buffer-reuse-window display-buffer-in-side-window) + "The functions to use to display the popup buffer.") + (defvar +popup-default-alist '((window-height . 0.16) (reusable-frames . visible))