[slime-devel] Re: REPL frame activation

Helmut Eller heller at common-lisp.net
Tue Aug 19 21:20:37 UTC 2008

* Tobias C. Rittweiler [2008-08-19 11:10+0200] writes:

> I have no luck at customizing this through the variables described in
> `(elisp)Choosing Window'.

Hmm, I had the same problem.  First I implemented focus switching
manually; upgraded Emacs from CVS; dropped the focus switching code and
everything seemed to work.  But now it doesn't.

> And I begin to doubt that these variables are even meant to let you
> customize it. They're to customize the way buffers are _displayed_,
> but what slime-switch-to-output-buffer does it more, it's also about
> setting the input focus, and selecting the window if appropriate.

Well, the docstring of pop-to-buffer says explicitly that it uses
display-buffer.  So every variable that is meant for display-buffer is
also usable for pop-to-buffer.

pop-to-buffer is just (select-window (display-buffer ...)).  The
question is why select-window doesn't switch the input focus.

Obviously (form the source), select-window calls select-frame.  But
select-frame doesn't seem to switch the focus.  It looks kinda strange,
or at least unusual to select a frame without switching focus.  Maybe
it's intended for things like read-from-minibuffer.

> What I did a few days ago was to make this behaviour also happen when
> having two frames side-by-side, some window in the left frame displaying
> the REPL, the right frame displaying .lisp buffers. So I regarded my
> work as improving consistency. 

But we shouldn't ignore or reinvent standard customization variables.

> What I want is the following behaviour:
>  (let ((repl-window (get-buffer-window repl-buffer t)))
>    (if repl-window
>        (progn (select-frame-set-input-focus (window-frame repl-window))
>               (select-window repl-window))
>      (pop-to-buffer repl-buffer t)))

If pop-to-buffer can't be used directly, I rather want:

   (let ((window (display-buffer repl-buffer)))
      (select-window window)
      (select-frame-set-input-focus (window-frame window)))

In fact, I think pop-to-buffer should do that.

> Setting display-buffer-reuse-frames to t results in C-c C-z being a NOP
> because the REPL window is already displayed in a frame, but the window
> within that frame isn't selected and input focus isn't updated
> accordingly.

It's not quite a NOP for me: if I hide one frame behind the other, C-c
C-z brings the hidden frame in front.  It still isn't selected, though.

> Help greatly appreciated,

Maybe we just should ask the Emacs maintainers why pop-to-buffer doesn't
what we expect.


More information about the slime-devel mailing list