From: Juri Linkov Date: Wed, 24 Apr 2019 21:40:27 +0000 (+0300) Subject: * lisp/windmove.el (windmove-display-in-direction): Support consecutive calls X-Git-Tag: emacs-27.0.90~3100 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=62072bad4146598e9a88b158ef343b1d1a04a7d2;p=emacs.git * lisp/windmove.el (windmove-display-in-direction): Support consecutive calls Remember action and delete it from display-buffer-overriding-action afterwards --- diff --git a/lisp/windmove.el b/lisp/windmove.el index 0853f7ec7f9..ab47565dfae 100644 --- a/lisp/windmove.el +++ b/lisp/windmove.el @@ -596,12 +596,25 @@ When `switch-to-buffer-obey-display-actions' is non-nil, (old-window (or (minibuffer-selected-window) (selected-window))) (new-window) (minibuffer-depth (minibuffer-depth)) - (action display-buffer-overriding-action) + (action (lambda (buffer alist) + (unless (> (minibuffer-depth) minibuffer-depth) + (let ((window (if (eq dir 'same-window) + (selected-window) + (window-in-direction + dir nil nil + (and arg (prefix-numeric-value arg)) + windmove-wrap-around))) + (type 'reuse)) + (unless window + (setq window (split-window nil nil dir) type 'window)) + (setq new-window (window--display-buffer buffer window + type alist)))))) (command this-command) (clearfun (make-symbol "clear-display-buffer-overriding-action")) (exitfun (lambda () - (setq display-buffer-overriding-action action) + (setq display-buffer-overriding-action + (delq action display-buffer-overriding-action)) (when (window-live-p (if no-select old-window new-window)) (select-window (if no-select old-window new-window))) (remove-hook 'post-command-hook clearfun)))) @@ -616,19 +629,7 @@ When `switch-to-buffer-obey-display-actions' is non-nil, (eq this-command command)) (funcall exitfun)))) (add-hook 'post-command-hook clearfun) - (push (lambda (buffer alist) - (unless (> (minibuffer-depth) minibuffer-depth) - (let ((window (if (eq dir 'same-window) - (selected-window) - (window-in-direction - dir nil nil - (and arg (prefix-numeric-value arg)) - windmove-wrap-around))) - (type 'reuse)) - (unless window - (setq window (split-window nil nil dir) type 'window)) - (setq new-window (window--display-buffer buffer window type alist))))) - display-buffer-overriding-action) + (push action display-buffer-overriding-action) (message "[display-%s]" dir))) ;;;###autoload