bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#64405: `toggle-side-windows' with 3 or more side windows leads to er


From: martin rudalics
Subject: bug#64405: `toggle-side-windows' with 3 or more side windows leads to error; reproducer included
Date: Fri, 7 Jul 2023 15:56:22 +0200

>>  From a fresh Emacs 28 emacs -Q:
>>
>> (progn
>>    (display-buffer-in-side-window (get-buffer-create "AA") '((side . right) 
(slot . -1)))
>>    (display-buffer-in-side-window (get-buffer-create "BB") '((side . right) 
(slot . 0)))
>>    (display-buffer-in-side-window (get-buffer-create "CC") '((side . right) 
(slot . 1)))
>>    (window-toggle-side-windows)
>>    (window-toggle-side-windows))
>>
>> Leads to the error `Specified root is not an ancestor of specified window’.  
This arises as:
>>
>> Debugger entered--Lisp error: (error "Specified root is not an ancestor of 
specified win...")
>>    delete-other-windows-internal(nil #<window 16>)
>>    window-state-put((((min-height . 4) (min-width . 10) (min-height-ignore . 2) (min-width-ignore . 7) 
(min-height-safe . 1) (min-width-safe . 2) (min-pixel-height . 64) (min-pixel-width . 70) (min-pixel-height-ignore 
. 32) (min-pixel-width-ignore . 49) (min-pixel-height-safe . 16) (min-pixel-width-safe . 14)) leaf (pixel-width . 
591) (pixel-height . 560) (total-width . 84) (total-height . 35) (normal-height . 1.0) (normal-width . 1.0) 
(parameters (clone-of . #<window 3 on *scratch*>)) (buffer #<buffer *scratch*> (selected . t) (hscroll 
. 0) (fringes 8 8 nil nil) (margins nil) (scroll-bars nil 3 t nil 0 t nil) (vscroll . 0) (dedicated) (point . 
#<marker at 480 in *scratch*>) (start . #<marker at 1 in *scratch*>))) #<window 16>)
>>    window-toggle-side-windows()
>>    (progn (display-buffer-in-side-window (get-buffer-create "AA") '((side . right) (slot . -1))) 
(display-buffer-in-side-window (get-buffer-create "BB") '((side . right) (slot . 0))) 
(display-buffer-in-side-window (get-buffer-create "CC") '((side . right) (slot . 1))) 
(window-toggle-side-windows) (window-toggle-side-windows))
>>    (progn (progn (display-buffer-in-side-window (get-buffer-create "AA") '((side . right) (slot 
. -1))) (display-buffer-in-side-window (get-buffer-create "BB") '((side . right) (slot . 0))) 
(display-buffer-in-side-window (get-buffer-create "CC") '((side . right) (slot . 1))) 
(window-toggle-side-windows) (window-toggle-side-windows)))
>>    elisp--eval-last-sexp(nil)
>>    eval-last-sexp(nil)
>>    funcall-interactively(eval-last-sexp nil)
>>    command-execute(eval-last-sexp)
>>
>> Strangely no error is seen with 1 or 2 side windows.
>
> Martin, any ideas or comments?  This still happens in Emacs 29 and
> Emacs 30.

The bug is an immediate consequence of my ill-advised "fix" for
Bug#50867.  A better fix for both bugs should be the attached one.
Please test it for the scenarios of Bug#50867 and the present one.

martin

Attachment: window-state-put.diff
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]