Subject: Re: bug#1237: 23.0.60; `switch-to-buffer-other-window' sometimes uses selected window

From: martin rudalics <[email-masked]>
Date: Fri, 24 Oct 2008 19:37:27 +0200

>    (defun my-walk () (walk-windows 'identity))
 >
 >    (add-hook 'window-configuration-change-hook 'my-walk nil t)
 >
 >    (split-window)
 >
 >    (switch-to-buffer-other-window "test")
 >
 > If you put these forms in the *scratch* buffer of "emacs -Q" and then
 > evaluate them one after another, you should be able to see the problem.
 > The problem does not occur if the hook is NOT made buffer-local.

Yes.  Replacing `split-window' by

(progn
   (split-window)
   (message "sel %s .. lru %s" (selected-window) (get-lru-window)))

shows the problem immediately.  Everything seems alright when you put
that message into my-walk.

run_window_configuration_change_hook selects each window before running
the hook buffer-locally which makes any reasoning (within the function
run by the hook) about which window will be selected when the command
completes void.  In addition it unwinds with select_window_norecord
which won't restore the current buffer when the selected window gets
reselected.  Both of these don't explain the problem that somewhere
`select-window' must get called with norecord nil :-(

martin