From 734a6b72d1c357244222465cfaa3e547159615be Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sat, 25 Mar 2023 13:00:02 +0000 Subject: [PATCH] el/dot-emacs.el: Fix designated-window machinery for Emacs 23. This lacks the `display-buffer-base-action' hook, so use `display-buffer-function'. This adds some messy conditional stuff, but we'll survive. --- el/dot-emacs.el | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 16ee196..4e162fd 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -663,6 +663,14 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'." (defvar mdw-designated-window nil "The window chosen by `mdw-designate-window', or nil.") +(defun mdw-designated-window-display-buffer-function (buffer not-this-window) + "Display buffer function to use the designated window." + (unless mdw-designated-window (error "No designated window!")) + (prog1 mdw-designated-window + (with-selected-window mdw-designated-window (switch-to-buffer buffer)) + (setq mdw-designated-window nil + display-buffer-function nil))) + (defun mdw-display-buffer-in-designated-window (buffer alist) "Display function to use the designated window." (prog1 mdw-designated-window @@ -675,18 +683,28 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'." "Use the selected window for the next pop-up buffer. With a prefix argument, clear the designated window." (interactive "P") - (cond (cancel - (setq mdw-designated-window nil) - (message "Window designation cleared.")) - (t - (setq mdw-designated-window (selected-window)) - (message "Window designated.")))) - -(setq display-buffer-base-action - (let* ((action display-buffer-base-action) - (funcs (car action)) - (alist (cdr action))) - (cons (cons 'mdw-display-buffer-in-designated-window funcs) alist))) + (let ((window (selected-window))) + (cond (cancel + (setq mdw-designated-window nil) + (unless (mdw-emacs-version-p 24) + (setq display-buffer-function nil)) + (message "Window designation cleared.")) + ((window-dedicated-p window) + (error "Window is dedicated to its buffer.")) + (t + (setq mdw-designated-window window) + (unless (mdw-emacs-version-p 24) + (setq display-buffer-function + #'mdw-designated-window-display-buffer-function)) + (message "Window designated."))))) + +(when (mdw-emacs-version-p 24) + (setq display-buffer-base-action + (let* ((action display-buffer-base-action) + (funcs (car action)) + (alist (cdr action))) + (cons (cons 'mdw-display-buffer-in-designated-window funcs) + alist)))) (defun mdw-clobber-other-windows-showing-buffer (buffer-or-name) "Arrange that no windows on other frames are showing BUFFER-OR-NAME." -- 2.11.0