[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Elusive buffer(s).
From: |
martin rudalics |
Subject: |
Re: Elusive buffer(s). |
Date: |
Thu, 29 Dec 2011 16:16:57 +0100 |
User-agent: |
Thunderbird 2.0.0.21 (Windows/20090302) |
> I see that not all the displayed buffers are there in the `buffer-list'
> frame parameter.
Yes.
> $ emacs -Q
>
> M-x compile<ENTER> C-a C-k<ENTER>
>
> ... *compilation* window should appear below the *scratch* window.
>
> (frame-parameter nil 'buffer-list) C-j
> (#<buffer *scratch*> #<buffer *Minibuf-1*>)
>
> Where is *compilation* that I do see on the screen? Is it bug or
> feature?
Since the *compilation* buffer is only displayed, its window is not
selected. If you select the window, you will see the buffer in that
frame's buffer list. I'm not sure whether this should qualify as a
feature - let's call it "traditional behavior".
> Reading the manual only adds to my confusion. On one hand:
>
> File: elisp, Node: Buffer Parameters:
>
> `buffer-list'
> A list of buffers that have been selected in this frame, ordered
> most-recently-selected first.
>
> Suggests that only ever _selected_ buffers should appear in the list
> (that matches observed behavior),
If you want to look at the C code of Emacs, you will find out that the
function responsible for managing this behavior is record_buffer (in
buffer.c) and you will find out that this function is called once only -
in select_window (in window.c). So unless you select a buffer's window,
that buffer is not recorded. [Emacs 23 called record_buffer also from
`switch-to-buffer' but these calls have been removed in Emacs 24. In
any case, `switch-to-buffer' does also select the window so this fits
the behavior described above.]
If we assume that the manual has to describe what the code does, the
manual entry above is valid.
> but on the other hand:
>
> File: elisp, Node: The Buffer List:
>
> In addition to the fundamental buffer list just described, Emacs
> maintains a local buffer list for each frame, in which the buffers that
> have been displayed (or had their windows selected) in that frame come
> first.
>
> Seems to suggest that displayed buffers should also be there in the
> frame-local buffer list?
Yes. This text is misleading. You should file a bug report.
> BTW, the question relates to the issue I've reported 2 years ago here:
>
> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=5185
>
> but in that case *cvs* buffer was also current buffer in the original
> frame, so that report is definitely a bug that I'm still able to
> reproduce.
Emacs 24 has two functions `switch-to-prev-buffer' and
`switch-to-next-buffer' which respectively switch to the buffer
previously shown in a window and undo that. You should try them because
they do not depend on whether a buffer's window was previously selected
or not.
martin