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

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

bug#61102: 28.1; with-selected-window/save-window-excursion calls buffer


From: martin rudalics
Subject: bug#61102: 28.1; with-selected-window/save-window-excursion calls buffer-list-update-hook only once
Date: Thu, 2 Feb 2023 16:04:52 +0100

>> The following code:
>>
>> --8<---------------cut here---------------start------------->8---
>>
>> (let ((fn (lambda () (message "Buffer changed: %S" (current-buffer)))))
>>    (add-hook 'buffer-list-update-hook fn)
>>    (with-selected-window (minibuffer-window)
>>      (save-window-excursion nil) nil)
>>    (remove-hook 'buffer-list-update-hook fn)
>>    nil)
>>
>> --8<---------------cut here---------------end--------------->8---
>>
>> Prints "Buffer changed: #<buffer  *Minibuf-0*>" once, even though the 
selection should return to the currently selected buffer (which is different from the mini-buffer).
>>
>> I would expect either that the hook 'buffer-list-update-hook is not called 
at all, or that it is called twice (one time for every change of the selected buffer).

"for every change of the selected buffer" is ambiguous.  I suppose the
OP means "for every change of the selected window" here.

> Martin, any comments on this?  FWIW, I'm not sure this is a bug, but
> maybe I'm missing something.

The doc-string of 'with-selected-window' says that:

  "It does not alter the buffer list ordering."

and the Elisp manual is more explicit by saying that

  "The ordering of recently selected windows and the buffer list remain
   unchanged unless you deliberately change them within FORMS; for
   example, by calling ‘select-window’ with argument NORECORD ‘nil’.
   Hence, this macro is the preferred way to temporarily work with
   WINDOW as the selected window without needlessly running
   ‘buffer-list-update-hook’."

The one message the OP sees comes from this call in
'set-window-configuration'

        select_window (data->current_window, Qnil, false);

'set-window-configuration' itself is called by 'save-window-excursion'.

martin

reply via email to

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