Subject: Re: bug#12921: 24.2.50; resizing backtrace buffer not persistent (again)

From: martin rudalics <[email-masked]>
Date: Sun, 18 Nov 2012 12:36:52 +0100

> In emacs -Q, type M-x debug.  The frame gets split vertically.  The
 > window below displays *Backtrace*.  But dragging the mode-line in the
 > middle doesn't resize the window persistently when you step in the
 > debugger.
 >
 > Resizing is performed here in these lines of `debug':
 >
 >       (if (eq debugger-previous-window debugger-window)
 > 	  (when debugger-jumping-flag
 > 	    ;; Try to restore previous height of debugger
 > 	    ;; window.
 > 	    (condition-case nil
 > 		(window-resize
 > 		 debugger-window
 > 		 (- debugger-previous-window-height
 > 		    (window-total-size debugger-window)))
 > 	      (error nil)))
 > 	(setq debugger-previous-window debugger-window))
 >
 > However, in the above case, (eq debugger-previous-window
 > debugger-window) is never true, probably because the vertical splitting
 > into two windows is performed and undone on each step.
 >
 > Would it be harmful to perform resizing unconditionally?  This fixes
 > the problem for me, but I'm not sure if it could be harmful in certain
 > situations.  OTOH, if the window was created newly when the debugger had
 > been reentered, we already changed the window layout, so forcing a
 > certain size should not be dangerous, in general.

You mean a patch like the below?  Note that I have no idea how the
debugger should behave when the window layout is changed by the debugged
code.

martin

*** lisp/emacs-lisp/debug.el	2012-11-11 01:16:25 +0000
--- lisp/emacs-lisp/debug.el	2012-11-18 09:55:27 +0000
***************
*** 228,247 ****
   	       debugger-buffer
   	       `((display-buffer-reuse-window
   		  display-buffer-in-previous-window)
! 		  . (,(when debugger-previous-window
! 			`(previous-window . ,debugger-previous-window)))))
   	      (setq debugger-window (selected-window))
! 	      (if (eq debugger-previous-window debugger-window)
! 		  (when debugger-jumping-flag
! 		    ;; Try to restore previous height of debugger
! 		    ;; window.
! 		    (condition-case nil
! 			(window-resize
! 			 debugger-window
! 			 (- debugger-previous-window-height
! 			    (window-total-size debugger-window)))
! 		      (error nil)))
! 		(setq debugger-previous-window debugger-window))
   	      (debugger-mode)
   	      (debugger-setup-buffer debugger-args)
   	      (when noninteractive
--- 228,246 ----
   	       debugger-buffer
   	       `((display-buffer-reuse-window
   		  display-buffer-in-previous-window)
! 		 . (,(when debugger-previous-window
! 		       `(previous-window . ,debugger-previous-window)))))
   	      (setq debugger-window (selected-window))
! 	      (when debugger-jumping-flag
! 		;; Try to restore previous height of debugger
! 		;; window.
! 		(condition-case nil
! 		    (window-resize
! 		     debugger-window
! 		     (- debugger-previous-window-height
! 			(window-total-size debugger-window)))
! 		  (error nil)))
! 	      (setq debugger-previous-window debugger-window)
   	      (debugger-mode)
   	      (debugger-setup-buffer debugger-args)
   	      (when noninteractive