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

[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 <address@hidden> 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/

reply via email to

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