From af045213e305452a768f32dfbd62de54d173f5ab Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 26 Aug 2018 17:24:27 +0200 Subject: [PATCH] Preserve window state when toggling popups e.g. size --- modules/ui/popup/autoload/popup.el | 11 ++++++++--- modules/ui/popup/config.el | 7 +++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/modules/ui/popup/autoload/popup.el b/modules/ui/popup/autoload/popup.el index 755d0ba7d..63300a122 100644 --- a/modules/ui/popup/autoload/popup.el +++ b/modules/ui/popup/autoload/popup.el @@ -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) diff --git a/modules/ui/popup/config.el b/modules/ui/popup/config.el index 3f7e8382b..d24fd8378 100644 --- a/modules/ui/popup/config.el +++ b/modules/ui/popup/config.el @@ -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.")