diff --git a/lisp/window.el b/lisp/window.el index 0f17bb28b4..0a422b4305 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -2531,14 +2531,15 @@ get-lru-window (setq best-window window))))) (or best-window second-best-window))) -(defun get-mru-window (&optional all-frames dedicated not-selected no-other) +(defun get-mru-window (&optional all-frames dedicated not-selected no-other minibuf) "Return the most recently used window on frames specified by ALL-FRAMES. -A minibuffer window is never a candidate. A dedicated window is -never a candidate unless DEDICATED is non-nil, so if all windows -are dedicated, the value is nil. Optional argument NOT-SELECTED -non-nil means never return the selected window. Optional +A dedicated window is never a candidate unless DEDICATED is non-nil, +so if all windows are dedicated, the value is nil. Optional argument +NOT-SELECTED non-nil means never return the selected window. Optional argument NO-OTHER non-nil means to never return a window whose -'no-other-window' parameter is non-nil. +'no-other-window' parameter is non-nil. A minibuffer window is never +a candidate when MINIBUF is nil or omitted. MINIBUF t means consider +the minibuffer window only if the minibuffer is active. The following non-nil values of the optional argument ALL-FRAMES have special meanings: @@ -2556,7 +2557,7 @@ get-mru-window Any other value of ALL-FRAMES means consider all windows on the selected frame and no others." (let (best-window best-time time) - (dolist (window (window-list-1 nil 'nomini all-frames)) + (dolist (window (window-list-1 nil (unless minibuf 'nomini) all-frames)) (setq time (window-use-time window)) (when (and (or dedicated (not (window-dedicated-p window))) (or (not not-selected) (not (eq window (selected-window)))) @@ -4205,6 +4206,7 @@ delete-window (let* ((frame (window-frame window)) (function (window-parameter window 'delete-window)) (parent (window-parent window)) + (choose-selected delete-window-choose-selected) atom-root) (window--check frame) (catch 'done @@ -4255,7 +4257,7 @@ delete-window ;; Can't do without resizing fixed-size windows. (window--resize-siblings window (- size) horizontal t))) - (when (eq delete-window-choose-selected 'pos) + (when (eq choose-selected 'pos) ;; Remember edges and position of point of the selected window ;; of WINDOW'S frame. (setq frame-selected-window-edges @@ -4289,9 +4291,9 @@ delete-window ;; Select window at WINDOW's position at point. (set-frame-selected-window frame new-frame-selected-window))))) - ((and (eq delete-window-choose-selected 'mru) + ((and (eq choose-selected 'mru) ;; Try to use the most recently used window. - (let ((mru-window (get-mru-window frame nil nil t))) + (let ((mru-window (get-mru-window frame nil nil t t))) (and mru-window (set-frame-selected-window frame mru-window))))) ((and (window-parameter diff --git a/lisp/simple.el b/lisp/simple.el index 84928caa31..73c5840e02 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -9252,6 +9278,7 @@ completion-setup-function (setq-local completion-base-position base-position) (setq-local completion-list-insert-choice-function insert-fun)) (setq-local completion-reference-buffer mainbuf) + (setq-local delete-window-choose-selected 'mru) (if base-dir (setq default-directory base-dir)) (when completion-tab-width (setq tab-width completion-tab-width))