[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] Changes to emacs/lisp/buff-menu.el
From: |
Juanma Barranquero |
Subject: |
[Emacs-diffs] Changes to emacs/lisp/buff-menu.el |
Date: |
Mon, 16 Dec 2002 03:13:01 -0500 |
Index: emacs/lisp/buff-menu.el
diff -c emacs/lisp/buff-menu.el:1.54 emacs/lisp/buff-menu.el:1.55
*** emacs/lisp/buff-menu.el:1.54 Thu Nov 1 14:32:39 2001
--- emacs/lisp/buff-menu.el Mon Dec 16 03:12:59 2002
***************
*** 1,6 ****
;;; buff-menu.el --- buffer menu main function and support functions
! ;; Copyright (C) 1985, 86, 87, 93, 94, 95, 2000, 2001
;; Free Software Foundation, Inc.
;; Maintainer: FSF
--- 1,6 ----
;;; buff-menu.el --- buffer menu main function and support functions
! ;; Copyright (C) 1985, 86, 87, 93, 94, 95, 2000, 2001, 2002
;; Free Software Foundation, Inc.
;; Maintainer: FSF
***************
*** 64,70 ****
; Put buffer *Buffer List* into proper mode right away
; so that from now on even list-buffers is enough to get a buffer menu.
! (defvar Buffer-menu-buffer-column nil)
(defvar Buffer-menu-mode-map nil "")
--- 64,100 ----
; Put buffer *Buffer List* into proper mode right away
; so that from now on even list-buffers is enough to get a buffer menu.
! (defgroup Buffer-menu nil
! "Show a menu of all buffers in a buffer."
! :group 'tools
! :group 'convenience)
!
! (defcustom Buffer-menu-use-header-line t
! "*Non-nil means to use an immovable header-line."
! :type 'boolean
! :group 'Buffer-menu)
!
! (defface Buffer-menu-buffer-face
! '((t (:weight bold)))
! "Face used to highlight buffer name."
! :group 'font-lock-highlighting-faces)
!
! (defcustom Buffer-menu-buffer+size-width 21
! "*How wide to jointly make the buffer name and size columns."
! :type 'number
! :group 'Buffer-menu)
!
! (defcustom Buffer-menu-mode-width 11
! "*How wide to make the mode name column."
! :type 'number
! :group 'Buffer-menu)
!
! ; This should get updated & resorted when you click on a column heading
! (defvar Buffer-menu-sort-column nil
! "*2 for sorting by buffer names. 5 for sorting by file names.
! nil for default sorting by visited order.")
!
! (defconst Buffer-menu-buffer-column 4)
(defvar Buffer-menu-mode-map nil "")
***************
*** 183,191 ****
marked to be displayed, `D' for one you have marked for
deletion, and `.' for the current buffer.
The M column has a `*' if it is modified,
or `S' if you have marked it for saving.
- The R column has a `%' if the buffer is read-only.
After this come the buffer name, its size in characters,
its major mode, and the visited file name (if any)."
(interactive "P")
--- 213,222 ----
marked to be displayed, `D' for one you have marked for
deletion, and `.' for the current buffer.
+ The C column has a `.' for the buffer from which you came.
+ The R column has a `%' if the buffer is read-only.
The M column has a `*' if it is modified,
or `S' if you have marked it for saving.
After this come the buffer name, its size in characters,
its major mode, and the visited file name (if any)."
(interactive "P")
***************
*** 207,218 ****
(message
"Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help."))
(defun Buffer-menu-mark ()
"Mark buffer on this line for being displayed by
\\<Buffer-menu-mode-map>\\[Buffer-menu-select] command."
(interactive)
! (beginning-of-line)
! (if (looking-at " [-M]")
! (ding)
(let ((buffer-read-only nil))
(delete-char 1)
(insert ?>)
--- 238,256 ----
(message
"Commands: d, s, x, u; f, o, 1, 2, m, v; ~, %%; q to quit; ? for help."))
+ (defun Buffer-menu-no-header ()
+ (beginning-of-line)
+ (if (or Buffer-menu-use-header-line
+ (not (eq (char-after) ?C)))
+ t
+ (ding)
+ (forward-line 1)
+ nil))
+
(defun Buffer-menu-mark ()
"Mark buffer on this line for being displayed by
\\<Buffer-menu-mode-map>\\[Buffer-menu-select] command."
(interactive)
! (when (Buffer-menu-no-header)
(let ((buffer-read-only nil))
(delete-char 1)
(insert ?>)
***************
*** 222,236 ****
"Cancel all requested operations on buffer on this line and move down.
Optional ARG means move up."
(interactive "P")
! (beginning-of-line)
! (if (looking-at " [-M]")
! (ding)
(let* ((buf (Buffer-menu-buffer t))
(mod (buffer-modified-p buf))
(readonly (save-excursion (set-buffer buf) buffer-read-only))
(buffer-read-only nil))
(delete-char 3)
! (insert (if readonly (if mod " *%" " %") (if mod " * " " ")))))
(forward-line (if backup -1 1)))
(defun Buffer-menu-backup-unmark ()
--- 260,272 ----
"Cancel all requested operations on buffer on this line and move down.
Optional ARG means move up."
(interactive "P")
! (when (Buffer-menu-no-header)
(let* ((buf (Buffer-menu-buffer t))
(mod (buffer-modified-p buf))
(readonly (save-excursion (set-buffer buf) buffer-read-only))
(buffer-read-only nil))
(delete-char 3)
! (insert (if readonly (if mod " %*" " % ") (if mod " *" " ")))))
(forward-line (if backup -1 1)))
(defun Buffer-menu-backup-unmark ()
***************
*** 245,253 ****
Prefix arg is how many buffers to delete.
Negative arg means delete backwards."
(interactive "p")
! (beginning-of-line)
! (if (looking-at " [-M]") ;header lines
! (ding)
(let ((buffer-read-only nil))
(if (or (null arg) (= arg 0))
(setq arg 1))
--- 281,287 ----
Prefix arg is how many buffers to delete.
Negative arg means delete backwards."
(interactive "p")
! (when (Buffer-menu-no-header)
(let ((buffer-read-only nil))
(if (or (null arg) (= arg 0))
(setq arg 1))
***************
*** 256,262 ****
(insert ?D)
(forward-line 1)
(setq arg (1- arg)))
! (while (< arg 0)
(delete-char 1)
(insert ?D)
(forward-line -1)
--- 290,297 ----
(insert ?D)
(forward-line 1)
(setq arg (1- arg)))
! (while (and (< arg 0)
! (Buffer-menu-no-header))
(delete-char 1)
(insert ?D)
(forward-line -1)
***************
*** 266,283 ****
"Mark buffer on this line to be deleted by
\\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command
and then move up one line. Prefix arg means move that many lines."
(interactive "p")
! (Buffer-menu-delete (- (or arg 1)))
! (while (looking-at " [-M]")
! (forward-line 1)))
(defun Buffer-menu-save ()
"Mark buffer on this line to be saved by
\\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command."
(interactive)
! (beginning-of-line)
! (if (looking-at " [-M]") ;header lines
! (ding)
(let ((buffer-read-only nil))
! (forward-char 1)
(delete-char 1)
(insert ?S)
(forward-line 1))))
--- 301,314 ----
"Mark buffer on this line to be deleted by
\\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command
and then move up one line. Prefix arg means move that many lines."
(interactive "p")
! (Buffer-menu-delete (- (or arg 1))))
(defun Buffer-menu-save ()
"Mark buffer on this line to be saved by
\\<Buffer-menu-mode-map>\\[Buffer-menu-execute] command."
(interactive)
! (when (Buffer-menu-no-header)
(let ((buffer-read-only nil))
! (forward-char 2)
(delete-char 1)
(insert ?S)
(forward-line 1))))
***************
*** 290,297 ****
(set-buffer-modified-p arg))
(save-excursion
(beginning-of-line)
! (forward-char 1)
! (if (= (char-after (point)) (if arg ? ?*))
(let ((buffer-read-only nil))
(delete-char 1)
(insert (if arg ?* ? ))))))
--- 321,328 ----
(set-buffer-modified-p arg))
(save-excursion
(beginning-of-line)
! (forward-char 2)
! (if (= (char-after) (if arg ? ?*))
(let ((buffer-read-only nil))
(delete-char 1)
(insert (if arg ?* ? ))))))
***************
*** 302,308 ****
(save-excursion
(goto-char (point-min))
(forward-line 1)
! (while (re-search-forward "^.S" nil t)
(let ((modp nil))
(save-excursion
(set-buffer (Buffer-menu-buffer t))
--- 333,339 ----
(save-excursion
(goto-char (point-min))
(forward-line 1)
! (while (re-search-forward "^..S" nil t)
(let ((modp nil))
(save-excursion
(set-buffer (Buffer-menu-buffer t))
***************
*** 437,443 ****
(setq char (if buffer-read-only ?% ? )))
(save-excursion
(beginning-of-line)
! (forward-char 2)
(if (/= (following-char) char)
(let (buffer-read-only)
(delete-char 1)
--- 468,474 ----
(setq char (if buffer-read-only ?% ? )))
(save-excursion
(beginning-of-line)
! (forward-char 1)
(if (/= (following-char) char)
(let (buffer-read-only)
(delete-char 1)
***************
*** 446,454 ****
(defun Buffer-menu-bury ()
"Bury the buffer listed on this line."
(interactive)
! (beginning-of-line)
! (if (looking-at " [-M]") ;header lines
! (ding)
(save-excursion
(beginning-of-line)
(bury-buffer (Buffer-menu-buffer t))
--- 477,483 ----
(defun Buffer-menu-bury ()
"Bury the buffer listed on this line."
(interactive)
! (when (Buffer-menu-no-header)
(save-excursion
(beginning-of-line)
(bury-buffer (Buffer-menu-buffer t))
***************
*** 484,489 ****
--- 513,544 ----
(interactive "P")
(display-buffer (list-buffers-noselect files-only)))
+ (defun Buffer-menu-buffer+size (name size &optional name-props size-props)
+ (if (> (+ (length name) (length size) 2) Buffer-menu-buffer+size-width)
+ (setq name
+ (if (string-match "<[0-9]+>$" name)
+ (concat (substring name 0
+ (- Buffer-menu-buffer+size-width
+ (max (length size) 3)
+ (match-end 0)
+ (- (match-beginning 0))
+ 2))
+ ":" ; narrow ellipsis
+ (match-string 0 name))
+ (concat (substring name 0
+ (- Buffer-menu-buffer+size-width
+ (max (length size) 3)
+ 2))
+ ":")))) ; narrow ellipsis
+ (add-text-properties 0 (length name) name-props name)
+ (add-text-properties 0 (length size) size-props size)
+ (concat name
+ (make-string (- Buffer-menu-buffer+size-width
+ (length name)
+ (length size))
+ ? )
+ size))
+
(defun list-buffers-noselect (&optional files-only)
"Create and return a buffer with a list of names of existing buffers.
The buffer is named `*Buffer List*'.
***************
*** 491,582 ****
Non-null optional arg FILES-ONLY means mention only file buffers.
For more information, see the function `buffer-menu'."
! (let ((old-buffer (current-buffer))
! (standard-output standard-output)
! desired-point)
(save-excursion
(set-buffer (get-buffer-create "*Buffer List*"))
(setq buffer-read-only nil)
(erase-buffer)
(setq standard-output (current-buffer))
! (princ "\
! MR Buffer Size Mode File
! -- ------ ---- ---- ----
! ")
! ;; Record the column where buffer names start.
! (setq Buffer-menu-buffer-column 4)
! (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.
! ((and (string= (substring name 0 1) " ") (null file)))
! ;; 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)
! (put-text-property this-buffer-line-start name-end
! 'help-echo "mouse-2: select this buffer"))
! (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.
(and desired-point
--- 546,639 ----
Non-null optional arg FILES-ONLY means mention only file buffers.
For more information, see the function `buffer-menu'."
! (let* ((old-buffer (current-buffer))
! (standard-output standard-output)
! (mode-end (make-string (- Buffer-menu-mode-width 2) ? ))
! (header (concat "CRM " (Buffer-menu-buffer+size "Buffer" "Size")
! " Mode" mode-end "File\n"))
! list desired-point name file mode)
(save-excursion
(set-buffer (get-buffer-create "*Buffer List*"))
(setq buffer-read-only nil)
(erase-buffer)
(setq standard-output (current-buffer))
! (unless Buffer-menu-use-header-line
! (insert header "--- ------")
! (indent-to Buffer-menu-buffer+size-width)
! (insert "---- ----" mode-end "----\n")
! (put-text-property 1 (point) 'intangible t))
! (setq list
! (delq t
! (mapcar
! (lambda (buffer)
! (with-current-buffer buffer
! (setq name (buffer-name)
! file (buffer-file-name))
! (cond
! ;; Don't mention internal buffers.
! ((and (string= (substring name 0 1) " ") (null file)))
! ;; Maybe don't mention buffers without files.
! ((and files-only (not file)))
! ((string= name "*Buffer List*"))
! ;; Otherwise output info.
! (t
! (unless file
! ;; No visited file. Check local value of
! ;; list-buffers-directory.
! (when (and (boundp 'list-buffers-directory)
! list-buffers-directory)
! (setq file list-buffers-directory)))
! (list buffer
! (format "%c%c%c "
! (if (eq buffer old-buffer) ?. ? )
! ;; Handle readonly status. The output
buffer is special
! ;; cased to appear readonly; it is
actually made so at a
! ;; later date.
! (if (or (eq buffer standard-output)
! buffer-read-only)
! ?% ? )
! ;; Identify modified buffers.
! (if (buffer-modified-p) ?* ? ))
! name (buffer-size) mode-name file)))))
! (buffer-list))))
! (dolist (buffer
! (if Buffer-menu-sort-column
! (sort list
! (if (eq Buffer-menu-sort-column 3)
! (lambda (a b)
! (< (nth Buffer-menu-sort-column a)
! (nth Buffer-menu-sort-column b)))
! (lambda (a b)
! (string< (nth Buffer-menu-sort-column a)
! (nth Buffer-menu-sort-column b)))))
! list))
! (if (eq (car buffer) old-buffer)
! (setq desired-point (point)))
! (insert (cadr buffer)
! ;; 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.
! (Buffer-menu-buffer+size (nth 2 buffer)
! (int-to-string (nth 3 buffer))
! `(buffer-name ,(nth 2 buffer)
! buffer ,(car buffer)
! face Buffer-menu-buffer-face
! mouse-face highlight
! help-echo "mouse-2: select this
buffer"))
! " "
! (if (> (length (nth 4 buffer)) Buffer-menu-mode-width)
! (substring (nth 4 buffer) 0 Buffer-menu-mode-width)
! (nth 4 buffer)))
! (when (nth 5 buffer)
! (indent-to (+ Buffer-menu-buffer-column Buffer-menu-buffer+size-width
! Buffer-menu-mode-width 4) 1)
! (princ (abbreviate-file-name (nth 5 buffer))))
! (princ "\n"))
(Buffer-menu-mode)
+ (when Buffer-menu-use-header-line
+ (set (make-local-variable 'Buffer-menu-header-line)
+ (concat " " header))
+ (setq header-line-format 'Buffer-menu-header-line))
;; DESIRED-POINT doesn't have to be set; it is not when the
;; current buffer is not displayed for some reason.
(and desired-point
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] Changes to emacs/lisp/buff-menu.el,
Juanma Barranquero <=