changeset 30851:f9233f642b88

* buff-menu.el (list-buffers-noselect): Use `dolist' instead of `while'; use `with-current-buffer' instead of `save-excursion'. Removed unnecessary kludges now that "*Buffer List*" is excluded.
author Sam Steingold <sds@gnu.org>
date Wed, 16 Aug 2000 14:33:21 +0000
parents befd90253848
children e12c02781da9
files lisp/ChangeLog lisp/buff-menu.el
diffstat 2 files changed, 82 insertions(+), 88 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Wed Aug 16 12:47:20 2000 +0000
+++ b/lisp/ChangeLog	Wed Aug 16 14:33:21 2000 +0000
@@ -1,3 +1,9 @@
+2000-08-16  Sam Steingold  <sds@gnu.org>
+
+	* buff-menu.el (list-buffers-noselect): Use `dolist' instead of
+	`while'; use `with-current-buffer' instead of `save-excursion'.
+	Removed unnecessary kludges now that "*Buffer List*" is excluded.
+
 2000-08-16  Kenichi Handa  <handa@etl.go.jp>
 
 	* international/ccl.el (declare-ccl-program): Docstring modified.
@@ -17,7 +23,7 @@
 	(Buffer-menu-execute): When deleting, test `(and buf (buffer-name
 	buf))', instead of `(Buffer-menu-buffer nil)', to see if buffer
 	wasn't killed.
-	
+
 	* buff-menu.el (list-buffers-noselect): Don't display the
 	*Buffer List* buffer.
 
@@ -25,7 +31,7 @@
 	`Loading jit-lock' message.
 
 	* emacs-lisp/cust-print.el, emacs-lisp/cl-specs.el
-	* emacs-lisp/edebug.el, progmodes/hideif.el: Change authors' 
+	* emacs-lisp/edebug.el, progmodes/hideif.el: Change authors'
 	mail address.
 
 2000-08-15  Miles Bader  <miles@gnu.org>
@@ -104,7 +110,7 @@
 	* paren.el (show-paren-priority): New user option.
 	(show-paren-function): Set overlay priorities to
 	show-paren-priority.
-	
+
 2000-08-14  Miles Bader  <miles@gnu.org>
 
 	* comint.el (comint-bol): Use `forward-line 0' instead of calling
@@ -124,9 +130,9 @@
 
 	* xml.el (xml-parse-tag, xml-parse-attlist): Do not downcase
         identifiers, since XML is case sensitive
-	
+
 2000-08-12  Miles Bader  <miles@gnu.org>
-	
+
 	* comint.el (comint-output-filter): Don't bother frobbing
 	window-start, it doesn't seem to be necessary.
 
--- a/lisp/buff-menu.el	Wed Aug 16 12:47:20 2000 +0000
+++ b/lisp/buff-menu.el	Wed Aug 16 14:33:21 2000 +0000
@@ -44,7 +44,7 @@
 ;; Based on FSF code dating back to 1985.
 
 ;;; Code:
- 
+
 ;;;Trying to preserve the old window configuration works well in
 ;;;simple scenarios, when you enter the buffer menu, use it, and exit it.
 ;;;But it does strange things when you switch back to the buffer list buffer
@@ -322,7 +322,7 @@
 in the selected frame."
   (interactive)
   (let ((buff (Buffer-menu-buffer t))
-	(menu (current-buffer))	      
+	(menu (current-buffer))
 	(others ())
 	tem)
     (goto-char (point-min))
@@ -494,87 +494,75 @@
 ")
       ;; Record the column where buffer names start.
       (setq Buffer-menu-buffer-column 4)
-      (let ((bl (buffer-list)))
-	(while bl
-	  (let* ((buffer (car bl))
-		 (name (buffer-name buffer))
-		 (file (buffer-file-name buffer))
-		 this-buffer-line-start
-		 this-buffer-read-only
-		 this-buffer-size
-		 this-buffer-mode-name
-		 this-buffer-directory)
-	    (save-excursion
-	      (set-buffer buffer)
-	      (setq this-buffer-read-only buffer-read-only)
-	      (setq this-buffer-size (buffer-size))
-	      (setq this-buffer-mode-name
-		    (if (eq buffer standard-output)
-			"Buffer Menu" mode-name))
-	      (or file
-		  ;; No visited file.  Check local value of
-		  ;; list-buffers-directory.
-		  (if (and (boundp 'list-buffers-directory)
-			   list-buffers-directory)
-		      (setq this-buffer-directory list-buffers-directory))))
-	    (cond
-	     ;; Don't mention internal buffers.
-	     ((string= (substring name 0 1) " "))
-	     ;; Maybe don't mention buffers without files.
-	     ((and files-only (not file)))
-             ((string= name "*Buffer List*"))
-	     ;; Otherwise output info.
-	     (t
-	      (setq this-buffer-line-start (point))
-	      ;; Identify current buffer.
-	      (if (eq buffer old-buffer)
-		  (progn
-		    (setq desired-point (point))
-		    (princ "."))
-		(princ " "))
-	      ;; Identify modified buffers.
-	      (princ (if (buffer-modified-p buffer) "*" " "))
-	      ;; Handle readonly status.  The output buffer is special
-	      ;; cased to appear readonly; it is actually made so at a later
-	      ;; date.
-	      (princ (if (or (eq buffer standard-output)
-			     this-buffer-read-only)
-			 "% "
-		       "  "))
-	      (princ name)
-	      ;; Put the buffer name into a text property
-	      ;; so we don't have to extract it from the text.
-	      ;; This way we avoid problems with unusual buffer names.
-	      (setq this-buffer-line-start
-		    (+ this-buffer-line-start Buffer-menu-buffer-column))
-	      (let ((name-end (point)))
-		(indent-to 17 2)
-		(put-text-property this-buffer-line-start name-end
-				   'buffer-name name)
-		(put-text-property this-buffer-line-start (point)
-				   'buffer buffer)
-		(put-text-property this-buffer-line-start name-end
-				   'mouse-face 'highlight))
-	      (let (size
-		    mode
-		    (excess (- (current-column) 17)))
-		(setq size (format "%8d" this-buffer-size))
-		;; Ack -- if looking at the *Buffer List* buffer,
-		;; always use "Buffer Menu" mode.  Otherwise the
-		;; first time the buffer is created, the mode will be wrong.
-		(setq mode this-buffer-mode-name)
-		(while (and (> excess 0) (= (aref size 0) ?\ ))
-		  (setq size (substring size 1))
-		  (setq excess (1- excess)))
-		(princ size)
-		(indent-to 27 1)
-		(princ mode))
-	      (indent-to 40 1)
-	      (or file (setq file this-buffer-directory))
-	      (if file
-		  (princ (abbreviate-file-name file)))
-	      (princ "\n"))))
-	  (setq bl (cdr bl))))
+      (dolist (buffer (buffer-list))
+        (let ((name (buffer-name buffer))
+              (file (buffer-file-name buffer))
+              this-buffer-line-start
+              this-buffer-read-only
+              (this-buffer-size (buffer-size buffer))
+              this-buffer-mode-name
+              this-buffer-directory)
+          (with-current-buffer buffer
+            (setq this-buffer-read-only buffer-read-only
+                  this-buffer-mode-name mode-name)
+            (unless file
+              ;; No visited file.  Check local value of
+              ;; list-buffers-directory.
+              (when (and (boundp 'list-buffers-directory)
+                         list-buffers-directory)
+                (setq this-buffer-directory list-buffers-directory))))
+          (cond
+            ;; Don't mention internal buffers.
+            ((string= (substring name 0 1) " "))
+            ;; Maybe don't mention buffers without files.
+            ((and files-only (not file)))
+            ((string= name "*Buffer List*"))
+            ;; Otherwise output info.
+            (t
+             (setq this-buffer-line-start (point))
+             ;; Identify current buffer.
+             (if (eq buffer old-buffer)
+                 (progn
+                   (setq desired-point (point))
+                   (princ "."))
+               (princ " "))
+             ;; Identify modified buffers.
+             (princ (if (buffer-modified-p buffer) "*" " "))
+             ;; Handle readonly status.  The output buffer is special
+             ;; cased to appear readonly; it is actually made so at a
+             ;; later date.
+             (princ (if (or (eq buffer standard-output)
+                            this-buffer-read-only)
+                        "% "
+                      "  "))
+             (princ name)
+             ;; Put the buffer name into a text property
+             ;; so we don't have to extract it from the text.
+             ;; This way we avoid problems with unusual buffer names.
+             (setq this-buffer-line-start
+                   (+ this-buffer-line-start Buffer-menu-buffer-column))
+             (let ((name-end (point)))
+               (indent-to 17 2)
+               (put-text-property this-buffer-line-start name-end
+                                  'buffer-name name)
+               (put-text-property this-buffer-line-start (point)
+                                  'buffer buffer)
+               (put-text-property this-buffer-line-start name-end
+                                  'mouse-face 'highlight))
+             (let ((size (format "%8d" this-buffer-size))
+                   (mode this-buffer-mode-name)
+                   (excess (- (current-column) 17)))
+               (while (and (> excess 0) (= (aref size 0) ?\ ))
+                 (setq size (substring size 1)
+                       excess (1- excess)))
+               (princ size)
+               (indent-to 27 1)
+               (princ mode))
+             (indent-to 40 1)
+             (or file (setq file this-buffer-directory))
+             (when file
+               (princ (abbreviate-file-name file)))
+             (princ "\n")))))
       (Buffer-menu-mode)
       ;; DESIRED-POINT doesn't have to be set; it is not when the
       ;; current buffer is not displayed for some reason.