Fix delete-other-windows in popups #858
Originally, calling delete-other-windows from a popup window would kill only popup windows. This has been corrected to raise the popup, *then* delete other windows. As if you'd done `M-x +popup/raise` then `M-x delete-other-windows`
This commit is contained in:
parent
31bcac9a1e
commit
5e25cfd6a7
1 changed files with 31 additions and 23 deletions
|
@ -28,29 +28,6 @@ the buffer is visible, then set another timer and try again later."
|
||||||
(let (kill-buffer-hook kill-buffer-query-functions)
|
(let (kill-buffer-hook kill-buffer-query-functions)
|
||||||
(kill-buffer buffer))))))))))
|
(kill-buffer buffer))))))))))
|
||||||
|
|
||||||
;;;###autoload
|
|
||||||
(defun +popup--init (window &optional alist)
|
|
||||||
"Initializes a popup window. Run any time a popup is opened. It sets the
|
|
||||||
default window parameters for popup windows, clears leftover transient timers
|
|
||||||
and enables `+popup-buffer-mode'."
|
|
||||||
(with-selected-window window
|
|
||||||
(setq alist (delq (assq 'actions alist) alist))
|
|
||||||
(when (and alist +popup--populate-wparams)
|
|
||||||
;; Emacs 26+ will automatically map the window-parameters alist entry to
|
|
||||||
;; the popup window, so we need this for Emacs 25.x users
|
|
||||||
(dolist (param (cdr (assq 'window-parameters alist)))
|
|
||||||
(set-window-parameter window (car param) (cdr param))))
|
|
||||||
(set-window-parameter window 'popup t)
|
|
||||||
(set-window-parameter window 'delete-window #'+popup--delete-window)
|
|
||||||
(set-window-parameter window 'delete-other-windows #'+popup/close-all)
|
|
||||||
(set-window-dedicated-p window 'popup)
|
|
||||||
(window-preserve-size
|
|
||||||
window (memq (window-parameter window 'window-side)
|
|
||||||
'(left right))
|
|
||||||
t)
|
|
||||||
(+popup-buffer-mode +1)
|
|
||||||
(run-hooks '+popup-create-window-hook)))
|
|
||||||
|
|
||||||
(defun +popup--delete-window (window)
|
(defun +popup--delete-window (window)
|
||||||
"Do housekeeping before destroying a popup window.
|
"Do housekeeping before destroying a popup window.
|
||||||
|
|
||||||
|
@ -94,6 +71,14 @@ and enables `+popup-buffer-mode'."
|
||||||
(run-at-time ttl nil #'+popup--kill-buffer
|
(run-at-time ttl nil #'+popup--kill-buffer
|
||||||
buffer ttl))))))))))
|
buffer ttl))))))))))
|
||||||
|
|
||||||
|
(defun +popup--delete-other-windows (window)
|
||||||
|
"Called in lieu of `delete-other-windows' in popup windows.
|
||||||
|
|
||||||
|
Raises WINDOW (assumed to be a popup), then deletes other windows."
|
||||||
|
(when-let* ((window (+popup/raise)))
|
||||||
|
(delete-other-windows window))
|
||||||
|
nil)
|
||||||
|
|
||||||
(defun +popup--normalize-alist (alist)
|
(defun +popup--normalize-alist (alist)
|
||||||
"Merge `+popup-default-alist' and `+popup-default-parameters' with ALIST."
|
"Merge `+popup-default-alist' and `+popup-default-parameters' with ALIST."
|
||||||
(when alist
|
(when alist
|
||||||
|
@ -118,6 +103,29 @@ and enables `+popup-buffer-mode'."
|
||||||
parameters)
|
parameters)
|
||||||
alist)))
|
alist)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +popup--init (window &optional alist)
|
||||||
|
"Initializes a popup window. Run any time a popup is opened. It sets the
|
||||||
|
default window parameters for popup windows, clears leftover transient timers
|
||||||
|
and enables `+popup-buffer-mode'."
|
||||||
|
(with-selected-window window
|
||||||
|
(setq alist (delq (assq 'actions alist) alist))
|
||||||
|
(when (and alist +popup--populate-wparams)
|
||||||
|
;; Emacs 26+ will automatically map the window-parameters alist entry to
|
||||||
|
;; the popup window, so we need this for Emacs 25.x users
|
||||||
|
(dolist (param (cdr (assq 'window-parameters alist)))
|
||||||
|
(set-window-parameter window (car param) (cdr param))))
|
||||||
|
(set-window-parameter window 'popup t)
|
||||||
|
(set-window-parameter window 'delete-window #'+popup--delete-window)
|
||||||
|
(set-window-parameter window 'delete-other-windows #'+popup--delete-other-windows)
|
||||||
|
(set-window-dedicated-p window 'popup)
|
||||||
|
(window-preserve-size
|
||||||
|
window (memq (window-parameter window 'window-side)
|
||||||
|
'(left right))
|
||||||
|
t)
|
||||||
|
(+popup-buffer-mode +1)
|
||||||
|
(run-hooks '+popup-create-window-hook)))
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;; Public library
|
;; Public library
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue