Skip to content

Commit

Permalink
prefer-other-window: don't reuse selected window unless necessary
Browse files Browse the repository at this point in the history
Fixes #122 and #98
  • Loading branch information
bmag committed Aug 7, 2018
1 parent 2012a07 commit b06397d
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 6 deletions.
4 changes: 2 additions & 2 deletions test/switch-test.el
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@
(set-window-buffer nil "xxx-p0-0")
;; (purpose-pop-buffer "xxx-p0-1")
(pop-to-buffer "xxx-p0-1")
(purpose-check-displayed-buffers '("xxx-p0-1"))
(purpose-check-displayed-buffers '("xxx-p0-0" "xxx-p0-1"))
;; 2
(message "2...")
(delete-other-windows)
Expand All @@ -183,7 +183,7 @@
(set-window-buffer nil "xxx-p0-0")
(purpose-pop-buffer "xxx-p0-1")
;; (pop-to-buffer "xxx-p0-1")
(purpose-check-displayed-buffers '("xxx-p0-1" "xxx-p1-0"))
(purpose-check-displayed-buffers '("xxx-p0-0" "xxx-p0-1"))
;; 3
(message "3...")
(delete-other-windows)
Expand Down
21 changes: 17 additions & 4 deletions window-purpose-switch.el
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ it yourself.")
purpose-display-maybe-pop-up-window
purpose-display-maybe-pop-up-frame))
(force-same-window . (purpose-display-maybe-same-window))
(prefer-other-window . (purpose-display-reuse-window-buffer
purpose-display-reuse-window-purpose
(prefer-other-window . (purpose-display-reuse-window-buffer-other-window
purpose-display-reuse-window-purpose-other-window
purpose-display-maybe-other-window
purpose-display-maybe-pop-up-window
purpose-display-maybe-other-frame
Expand Down Expand Up @@ -326,6 +326,18 @@ that a window on another frame is chosen, avoid raising that frame."
(purpose-change-buffer buffer window 'reuse alist))
window)))

(defun purpose-display-reuse-window-buffer-other-window (buffer alist)
"Return a non-selected window that is already displaying BUFFER.
This is the same `purpose-display-reuse-window-buffer', except
the currently selected window is not eligible for reuse."
(purpose-display-reuse-window-buffer buffer (cons '(inhibit-same-window . t) alist)))

(defun purpose-display-reuse-window-purpose-other-window (buffer alist)
"Return a non-selected window that is already used for the purpose PURPOSE.
This is the same `purpose-display-reuse-window-purpose', except
the currently selected window is not eligible for reuse."
(purpose-display-reuse-window-purpose buffer (cons '(inhibit-same-window . t) alist)))

(defun purpose-display-reuse-window-buffer-other-frame (buffer alist)
"Return a window that is already displaying BUFFER.
Return nil if no usable window is found.
Expand Down Expand Up @@ -492,8 +504,9 @@ used window, split the selected window."
(new-window (or (split-window-sensibly old-window)
(and force-split
(split-window old-window)))))
(purpose-change-buffer buffer new-window 'window alist)
new-window))
(when new-window
(purpose-change-buffer buffer new-window 'window alist)
new-window)))

(defun purpose-display-pop-up-window (buffer alist)
"Display BUFFER in a new window.
Expand Down

0 comments on commit b06397d

Please sign in to comment.