Subject: Re: bug#69093: window-state-put doesn't update current buffer

From: Juri Linkov <[email-masked]>
Date: Sat, 24 Feb 2024 19:32:56 +0200

>> 'window-state-put' fails to select the previously selected
>> window's buffer with the property (selected . t).
>
> It should have selected it here
>
> 		;; Select window if it's the selected one.
> 		(when (cdr (assq 'selected state))
> 		  (select-window window))
>
> Please first check whether this 'select-window' call is executed at all
> in your scenario.  If it is, please find out which window apparently
> gets selected instead afterwards and try to find out why.

The right window is selected, and its buffer becomes current.

> If there's no clue, you would have to find out who undoes that
> selection first by putting a breakpoint into Fselect_window and, if
> that fails, by putting a breakpoint into select_window (which can be
> a pain).

The problem is that afterwards the same function undoes the setting of
current buffer.  In window--state-put-2, select-window is inside
with-current-buffer that undoes the current buffer selection:

	      (with-current-buffer buffer
                ...
		;; Select window if it's the selected one.
		(when (cdr (assq 'selected state))
                  (select-window window))

Also in window-state-put, with-temp-buffer undoes the current buffer:

      (with-temp-buffer
	(set-window-buffer window (current-buffer))
	(window--state-put-1 state window nil totals pixelwise)
	(window--state-put-2 ignore pixelwise))