From 8f9175c25eb358928e5b32817bc1599c3ad7d0eb Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Sun, 7 Jan 2018 13:06:42 -0500 Subject: [PATCH] feature/popup: fix popup window-parameters in Emacs 25.x #261 The window parameters of popup windows weren't being set in Emacs 25.x. Turns out `display-buffer-alist`'s ALIST argument didn't support the windows-parameters alist entry until Emacs 26. --- modules/feature/popup/autoload.el | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/feature/popup/autoload.el b/modules/feature/popup/autoload.el index 5e069fd7d..2aece169c 100644 --- a/modules/feature/popup/autoload.el +++ b/modules/feature/popup/autoload.el @@ -1,5 +1,7 @@ ;;; feature/popup/autoload.el -*- lexical-binding: t; -*- +(defvar +popup--populate-wparams (version< emacs-version "26.1")) + (defun +popup--remember (windows) "Remember WINDOWS (a list of windows) for later restoration." (cl-assert (cl-every #'windowp windows) t) @@ -23,18 +25,24 @@ the buffer is visible, then set another timer and try again later." (kill-process process)) (kill-buffer buffer))))) -(defun +popup--init (window) +(defun +popup--init (window 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 - (set-window-parameter window 'popup t) - (set-window-parameter window 'no-other-window t) - (set-window-parameter window 'delete-window #'+popup--destroy) (window-preserve-size window (memq (window-parameter window 'window-side) '(left right)) t) - (+popup-buffer-mode +1))) + (when +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 'no-other-window t) + (set-window-parameter window 'delete-window #'+popup--destroy) + (+popup-buffer-mode +1) + (run-hooks '+popup-create-window-hook))) (defun +popup--destroy (window) "Do housekeeping before destroying a popup window. @@ -110,7 +118,7 @@ current buffer." (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) + (+popup--init new-window alist) (let ((select (+popup-parameter 'select new-window))) (if (functionp select) (funcall select new-window old-window)