From 10e1dad96138dda35864ccb2885bb1c1fb33f8ba Mon Sep 17 00:00:00 2001 From: Sam Steingold Date: Wed, 16 Aug 2000 14:33:21 +0000 Subject: [PATCH] * 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. --- lisp/ChangeLog | 16 +++-- lisp/buff-menu.el | 154 +++++++++++++++++++++------------------------- 2 files changed, 82 insertions(+), 88 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e6c2423b900..f7a25e44de3 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2000-08-16 Sam Steingold + + * 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 * 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 @@ -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 * 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 - + * comint.el (comint-output-filter): Don't bother frobbing window-start, it doesn't seem to be necessary. diff --git a/lisp/buff-menu.el b/lisp/buff-menu.el index c84ed105d9b..02036891cda 100644 --- a/lisp/buff-menu.el +++ b/lisp/buff-menu.el @@ -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 @@ This command deletes and replaces all the previously existing windows 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 @@ The R column contains a % for buffers that are read-only." ") ;; 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. -- 2.39.2