Preserve window state when toggling popups

e.g. size
This commit is contained in:
Henrik Lissner 2018-08-26 17:24:27 +02:00
parent d8fa5f39ad
commit af045213e3
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 15 additions and 3 deletions

View file

@ -97,6 +97,12 @@ and enables `+popup-buffer-mode'."
(defun +popup--normalize-alist (alist)
"Merge `+popup-default-alist' and `+popup-default-parameters' with ALIST."
(when alist
;; In case ALIST is window state (from `window-state-get'), we map its
;; entries to display-buffer alist parameters.
(dolist (prop +popup-window-state-alist)
(when-let* ((val (assq (car prop) alist)))
(setf (alist-get (cdr prop) alist) (cdr val))
(setq alist (delq val alist))))
(let ((alist ; handle defaults
(cl-remove-duplicates
(append alist +popup-default-alist)
@ -359,9 +365,8 @@ the message buffer in a popup window."
(unless +popup--last
(error "No popups to restore"))
(cl-loop for (buffer . state) in +popup--last
if (and (buffer-live-p buffer)
(display-buffer buffer))
do (window-state-put state it))
if (buffer-live-p buffer)
do (+popup-buffer buffer state))
(setq +popup--last nil)
t)

View file

@ -20,6 +20,13 @@ Modifying this has no effect, unless done before ui/popup loads.")
(no-other-window . t))
"The default window parameters.")
(defvar +popup-window-state-alist
'((total-width . window-width)
(total-height . window-height)
(parameters . window-parameters))
"An alist mapping `window-state-get' entries to display-buffer alist entries.
Used by `+popup--normalize-alist'.")
(defvar +popup-margin-width 1
"Size of the margins to give popup windows. Set this to nil to disable margin
adjustment.")