mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-26 07:33:47 +00:00
(list-buffers): New function.
(ctl-x-map): Define C-x C-b to list-buffers.
This commit is contained in:
parent
5259c73786
commit
0b03ce3a17
@ -415,4 +415,94 @@ The current window remains selected."
|
|||||||
(delete-char 1)
|
(delete-char 1)
|
||||||
(insert char))))))
|
(insert char))))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(define-key ctl-x-map "\C-b" 'list-buffers)
|
||||||
|
|
||||||
|
(defun list-buffers (&optional files-only)
|
||||||
|
"Display a list of names of existing buffers.
|
||||||
|
The list is displayed in a buffer named `*Buffer List*'.
|
||||||
|
Note that buffers with names starting with spaces are omitted.
|
||||||
|
Non-null optional arg FILES-ONLY means mention only file buffers.
|
||||||
|
|
||||||
|
The M column contains a * for buffers that are modified.
|
||||||
|
The R column contains a % for buffers that are read-only."
|
||||||
|
(interactive "P")
|
||||||
|
(let ((old-buffer (current-buffer))
|
||||||
|
(blist-buffer (get-buffer-create "*Buffer List*"))
|
||||||
|
(desired-point nil))
|
||||||
|
(with-output-to-temp-buffer "*Buffer List*"
|
||||||
|
(set-buffer standard-output)
|
||||||
|
(princ "\
|
||||||
|
MR Buffer Size Mode File
|
||||||
|
-- ------ ---- ---- ----
|
||||||
|
")
|
||||||
|
(let ((bl (buffer-list)))
|
||||||
|
(while bl
|
||||||
|
(let* ((buffer (car bl))
|
||||||
|
(name (buffer-name buffer))
|
||||||
|
(file (buffer-file-name buffer)))
|
||||||
|
(cond
|
||||||
|
;; Don't mention internal buffers.
|
||||||
|
((string= (substring name 0 1) " "))
|
||||||
|
;; Maybe don't mention buffers without files.
|
||||||
|
((and files-only (not file)))
|
||||||
|
;; Otherwise output info.
|
||||||
|
(t
|
||||||
|
;; 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 be readonly; it is actually made so at a later
|
||||||
|
;; date.
|
||||||
|
(princ (if (or (eq buffer standard-output) buffer-read-only)
|
||||||
|
"% "
|
||||||
|
" "))
|
||||||
|
(princ name)
|
||||||
|
(indent-to 17 2)
|
||||||
|
(let (size
|
||||||
|
mode
|
||||||
|
(excess (- (current-column) 17)))
|
||||||
|
(save-excursion
|
||||||
|
(set-buffer buffer)
|
||||||
|
(setq size (format "%8d" (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 (if (eq buffer standard-output)
|
||||||
|
"Buffer Menu"
|
||||||
|
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)
|
||||||
|
(if file
|
||||||
|
(princ file)
|
||||||
|
;; No visited file. Check local value of
|
||||||
|
;; list-buffers-directory.
|
||||||
|
(save-excursion
|
||||||
|
(set-buffer buffer)
|
||||||
|
(if (and (boundp list-buffers-directory)
|
||||||
|
list-buffers-directory)
|
||||||
|
(princ list-buffers-directory))))
|
||||||
|
(princ "\n"))))
|
||||||
|
(setq bl (cdr bl)))))
|
||||||
|
;; DESIRED-POINT doesn't have to be set; it is not when the
|
||||||
|
;; current buffer is not displayed for some reason.
|
||||||
|
(save-excursion
|
||||||
|
(set-buffer blist-buffer)
|
||||||
|
(Buffer-menu-mode)
|
||||||
|
(and desired-point
|
||||||
|
(goto-char desired-point))
|
||||||
|
(setq ZZZ (point)))))
|
||||||
|
|
||||||
;;; buff-menu.el ends here
|
;;; buff-menu.el ends here
|
||||||
|
Loading…
Reference in New Issue
Block a user