[gnu.emacs.bug] a buffer ring

gildea@ALEXANDER.BBN.COM (Stephen Gildea) (09/30/88)

Here is a function that allows you to run through all your buffers.
Give it an explicit argument of 1.  I usually use it for returning to
recently-visited buffers with an argument of 2 (the default) or 3.

 < Stephen


(defun switch-to-previous-buffer (n)
  "Switch to Nth previously selected buffer.  N defaults to 2,
which switches to the most recently selected buffer.
If N is 1, repeated calls will cycle through all buffers, otherwise
the first N buffers on the buffer list are rotated.  gildea  Sep 88"
  (interactive "P")
  (if (not n)
      (setq n 2)
    (setq n (prefix-numeric-value n)))
  (if (= n 1)
      (progn
	(bury-buffer (current-buffer))
	(setq n 2)))
  (let ((buffer-list (buffer-list)))
    (while (and (> n 1) buffer-list)
      (setq n (1- n))
      (setq buffer-list (cdr buffer-list))
      (while (eq (elt (buffer-name (car buffer-list)) 0) ? )
	(setq buffer-list (cdr buffer-list))))
    (if buffer-list
	(switch-to-buffer (car buffer-list))
      (error "There aren't that many buffers"))))