Subject: bug#76911: dedicated side windows lose their dedication upon reuse

From: martin rudalics <[email-masked]>
Date: Mon, 10 Mar 2025 18:47:21 +0100

>> Consider the code below:
 >>
 >>      (let ((b1 (get-buffer-create "*b1*"))
 >>            (b2 (get-buffer-create "*b2*"))
 >>            (action '(display-buffer-in-side-window
 >>                      (dedicated . t)
 >>                      (side . left))))
 >>        (display-buffer b1 action)
 >>        (sit-for 1)
 >>        (display-buffer b2 action))
 >>
 >> It puts b1 in a side window, then reuses that side window for b2.
 >> When we display b2, the window loses the strong dedication it had to b1
 >> despite the display action for b2 including a request for a
 >> dedicated window.
 >>
 >> I'd expect the window to be dedicated to b2 at the end of the
 >> above snippet.
 >
 > Martin, any comments?

The following emacs -Q example shows what may happen then:

(let* ((b1 (get-buffer-create "*b1*"))
        (b2 (get-buffer-create "*b2*"))
        (b3 (get-buffer-create "*b3*"))
        (action '(display-buffer-in-side-window
                  (dedicated . t)
                  (side . left)))
        (window (display-buffer b1 action)))
   (message "%s" (window-dedicated-p window))
   (sit-for 3)
   (display-buffer b2 action)
   (message "%s" (window-dedicated-p window))
   (sit-for 3)
   (display-buffer b3 t))

*b3* is shown in the side window although this is reserved for buffers
displayed via 'display-buffer-in-side-window'.

I checked in a fix.  Please try again.

Thanks for the report, martin