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.
This commit is contained in:
parent
750f6ca1f5
commit
8f9175c25e
1 changed files with 14 additions and 6 deletions
|
@ -1,5 +1,7 @@
|
||||||
;;; feature/popup/autoload.el -*- lexical-binding: t; -*-
|
;;; feature/popup/autoload.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
|
(defvar +popup--populate-wparams (version< emacs-version "26.1"))
|
||||||
|
|
||||||
(defun +popup--remember (windows)
|
(defun +popup--remember (windows)
|
||||||
"Remember WINDOWS (a list of windows) for later restoration."
|
"Remember WINDOWS (a list of windows) for later restoration."
|
||||||
(cl-assert (cl-every #'windowp windows) t)
|
(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-process process))
|
||||||
(kill-buffer buffer)))))
|
(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
|
"Initializes a popup window. Run any time a popup is opened. It sets the
|
||||||
default window parameters for popup windows, clears leftover transient timers
|
default window parameters for popup windows, clears leftover transient timers
|
||||||
and enables `+popup-buffer-mode'."
|
and enables `+popup-buffer-mode'."
|
||||||
(with-selected-window window
|
(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-preserve-size
|
||||||
window (memq (window-parameter window 'window-side)
|
window (memq (window-parameter window 'window-side)
|
||||||
'(left right)) t)
|
'(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)
|
(defun +popup--destroy (window)
|
||||||
"Do housekeeping before destroying a popup window.
|
"Do housekeeping before destroying a popup window.
|
||||||
|
@ -110,7 +118,7 @@ current buffer."
|
||||||
(new-window (let ((window-min-height 3))
|
(new-window (let ((window-min-height 3))
|
||||||
(or (display-buffer-reuse-window buffer alist)
|
(or (display-buffer-reuse-window buffer alist)
|
||||||
(display-buffer-in-side-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)))
|
(let ((select (+popup-parameter 'select new-window)))
|
||||||
(if (functionp select)
|
(if (functionp select)
|
||||||
(funcall select new-window old-window)
|
(funcall select new-window old-window)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue