[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Why does buffer list not stay stable?
From: |
Xah Lee |
Subject: |
Re: Why does buffer list not stay stable? |
Date: |
Fri, 6 Mar 2009 09:00:12 -0800 (PST) |
User-agent: |
G2/1.0 |
On Mar 5, 9:47 pm, Samuel Wales <samolog...@gmail.com> wrote:
> I have a vexing problem with buffer ordering.
>
> I very frequently use next-buffer and previous-buffer[1]
> to navigate to buffers. If I am in a buffer and create a
> few more, I want all of them to be next to each other in the
> buffer list.
>
> I treat the list like a ring (or want to) -- I want the two
> commands to go in opposite directions on the ring. I don't
> care where the beginning and end of the buffer list are.
>
> But I want buffers that I create or switch to to be
> *nearby*.
>
> And I want the two commands to be *opposites*. Doing one a
> few times then the other the same number of times should
> return me to the same buffer.
>
> But it doesn't always work like that. Some buffers end up
> far away from where I am, for no apparent reason. And the
> commands are not opposites. This is disconcerting.
>
> If I am in an org mode buffer (say), and do egg-status, this
> brings up a buffer with diffs in it. If I then call a
> function that calls pop-to-buffer or switch-to-buffer, it
> takes me to a new buffer.[2] so far so good.
>
> Yet the egg-status buffer is nowhere to be seen (i.e. very
> far away on the ring).
>
> Any ideas here?
>
> P.S. I have also noticed that w3m buffers cluster together.
> I assume it's unrelated, although it is sometimes annoying.
>
> [1] I also tried a raise-buffer I came across many years
> ago, and bury-buffer.
>
> [2] Please disregard windows here. 99% of the time I
> use a single window. I almost never split them. I have
> pop-up-windows and same-window-* set to try to enforce this
> and most of the time they work (except where commands fail
> to respect pop-up-windows).
Do you have tabbar-mode on? that mode does some reordering as far is i
know, to keep its buffers in a tab group together.
i haven't studied exactly how buffers are ordered, but i do notice it
switch about, but probably in a severity you depict.
I have been using my own code for next/previous buffer for about over
a year. However, they are wrapper to next-buffer and previous-buffer,
and i don't notice ordering problems (unless if i have tabbar-mode
on). You might find it useful.
Here's the code:
(defun next-user-buffer ()
"Switch to the next user buffer in cyclic order.\n
User buffers are those not starting with *."
(interactive)
(next-buffer)
(let ((i 0))
(while (and (string-match "^*" (buffer-name)) (< i 50))
(setq i (1+ i)) (next-buffer) )))
(defun previous-user-buffer ()
"Switch to the previous user buffer in cyclic order.\n
User buffers are those not starting with *."
(interactive)
(previous-buffer)
(let ((i 0))
(while (and (string-match "^*" (buffer-name)) (< i 50))
(setq i (1+ i)) (previous-buffer) )))
(defun next-emacs-buffer ()
"Switch to the next emacs buffer in cyclic order.\n
Emacs buffers are those starting with *."
(interactive)
(next-buffer)
(let ((i 0))
(while (and (not (string-match "^*" (buffer-name))) (< i 50))
(setq i (1+ i)) (next-buffer) )))
(defun previous-emacs-buffer ()
"Switch to the previous emacs buffer in cyclic order.\n
Emacs buffers are those starting with *."
(interactive)
(previous-buffer)
(let ((i 0))
(while (and (not (string-match "^*" (buffer-name))) (< i 50))
(setq i (1+ i)) (previous-buffer) )))
The code is used in my ergoemacs project here:
http://code.google.com/p/ergoemacs/
by default, next-user-buffer has the shortcut key Ctrl+PageDown, and
next-emacs-buffer is Ctrl+Shift+PageDown.
(it was Ctrl + left/right arrows, but i decided those keys should stay
the standard editor behavior across platforms, of moving cursor by
word.)
Xah
∑ http://xahlee.org/
☄