changeset 46597:ea15c9ca1d86

(last-buffer): Use buffer-list with frame arg. Create *scratch* if no other choice exists. Fix bugs.
author Richard M. Stallman <rms@gnu.org>
date Sun, 21 Jul 2002 20:23:32 +0000
parents 5502ee23a19b
children 6262acd6c7ac
files lisp/bindings.el
diffstat 1 files changed, 11 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/bindings.el	Sun Jul 21 20:22:11 2002 +0000
+++ b/lisp/bindings.el	Sun Jul 21 20:23:32 2002 +0000
@@ -277,24 +277,24 @@
 Return the last non-hidden buffer in the buffer list."
   ;; This logic is more or less copied from bury-buffer,
   ;; except that we reverse the buffer list.
-  (let ((fbl  (frame-parameter nil 'buffer-list))
-	(list (buffer-list))
+  (let ((list (nreverse (buffer-list (selected-frame))))
 	(pred (frame-parameter nil 'buffer-predicate))
 	found notsogood)
-    ;; Merge the frame buffer list with the whole buffer list,
-    ;; and reverse it.
-    (dolist (buffer fbl)
-      (setq list (delq buffer list)))
-    (setq list (nreverse (append fbl list)))
-    (while (not found)
+    (while (and list (not found))
       (unless (or (eq (aref (buffer-name (car list)) 0) ? )
 		  ;; If the selected frame has a buffer_predicate,
 		  ;; disregard buffers that don't fit the predicate.
 		  (and pred (not (funcall pred (car list)))))
 	(if (get-buffer-window (car list) 'visible)
-	    (unless notsogood (setq notsogood (car list)))
-	  (setq found (car list)))))
-    (or found notsogood)))
+	    (or notsogood (eq (car list) (current-buffer)))
+	  (setq found (car list))))
+      (pop list))
+    (or found notsogood
+	(get-buffer "*scratch*")
+	(progn
+	  (set-buffer-major-mode
+	   (get-buffer-create "*scratch*"))
+	  (get-buffer "*scratch*")))))
 
 (defun unbury-buffer () "\
 Switch to the last buffer in the buffer list."