[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#8789: 23.3; debug backtrace buffer changes window on step-through
From: |
martin rudalics |
Subject: |
bug#8789: 23.3; debug backtrace buffer changes window on step-through |
Date: |
Wed, 15 Feb 2012 18:00:59 +0100 |
> The general approach sounds good, but we should probably try to refine
> it so as to minimize changes in behavior, and so it works right in the
> multi-frame and even multi-terminal case.
>
> We could try to store the last-used-window in a variable
> `debugger-last-used-window' and use that window after checking that it's
> still live and is visible in the selected terminal.
We could also try `window-prev-buffers' and `window-next-buffers' as in
the rather untested patch below.
martin
=== modified file 'lisp/window.el'
--- lisp/window.el 2012-02-12 05:10:30 +0000
+++ lisp/window.el 2012-02-15 16:54:41 +0000
@@ -4846,6 +4846,39 @@
(and pop-up-windows
(display-buffer-pop-up-window buffer alist))))
+(defun window-previously-showing (buffer &optional all-frames dedicated)
+ "Return a window that previously showed BUFFER.
+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. Avoid returning the selected
+window if possible.
+
+The following non-nil values of the optional argument ALL-FRAMES
+have special meanings:
+
+- t means consider all windows on all existing frames.
+
+- `visible' means consider all windows on all visible frames on
+ the current terminal.
+
+- 0 (the number zero) means consider all windows on all visible
+ and iconified frames on the current terminal.
+
+- A frame means consider all windows on that frame only.
+
+Any other value of ALL-FRAMES means consider all windows on the
+selected frame and no others."
+ (let (best-window second-best-window)
+ (dolist (window (window-list-1 nil 'nomini all-frames))
+ (when (and (or (assq buffer (window-prev-buffers window))
+ (assq buffer (window-next-buffers window)))
+ (or dedicated (not (window-dedicated-p window))))
+ (if (eq window (selected-window))
+ (setq second-best-window window)
+ ;; We probably should throw WINDOW here.
+ (setq best-window window))))
+ (or best-window second-best-window)))
+
(defun display-buffer-use-some-window (buffer alist)
"Display BUFFER in an existing window.
Search for a usable window, set that window to the buffer, and
@@ -4864,7 +4897,8 @@
(unwind-protect
(setq window
;; Reuse an existing window.
- (or (get-lru-window frame)
+ (or (window-previously-showing buffer 'visible)
+ (get-lru-window frame)
(let ((window (get-buffer-window buffer 'visible)))
(unless (and not-this-window
(eq window (selected-window)))
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, Michael Heerdegen, 2012/02/09
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, Stefan Monnier, 2012/02/09
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, Michael Heerdegen, 2012/02/10
- bug#8789: 23.3; debug backtrace buffer changes window on step-through,
martin rudalics <=
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, Stefan Monnier, 2012/02/15
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, martin rudalics, 2012/02/16
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, Stefan Monnier, 2012/02/16
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, martin rudalics, 2012/02/16
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, Michael Heerdegen, 2012/02/16
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, martin rudalics, 2012/02/17
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, martin rudalics, 2012/02/24
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, Michael Heerdegen, 2012/02/28
- bug#8789: 23.3; debug backtrace buffer changes window on step-through, martin rudalics, 2012/02/29
bug#8789: 23.3; debug backtrace buffer changes window on step-through, martin rudalics, 2012/02/09