Mercurial > emacs
changeset 13868:cc995a858ce1
(mouse-buffer-menu): If lots of buffers, group them into multiple panes.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 26 Dec 1995 04:43:32 +0000 |
parents | 19a05b5a597d |
children | e5338c9d4e30 |
files | lisp/mouse.el |
diffstat | 1 files changed, 59 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/mouse.el Tue Dec 26 04:41:21 1995 +0000 +++ b/lisp/mouse.el Tue Dec 26 04:43:32 1995 +0000 @@ -1158,50 +1158,71 @@ and selects that window." (interactive "e") (mouse-minibuffer-check event) - (let ((menu - (list "Buffer Menu" - (cons "Select Buffer" - (let ((tail (buffer-list)) - (maxbuf 0) - head) - (while tail - (or (eq ?\ (aref (buffer-name (car tail)) 0)) - (setq maxbuf - (max maxbuf - (length (buffer-name (car tail)))))) - (setq tail (cdr tail))) - (setq tail (buffer-list)) - (while tail - (let ((elt (car tail))) - (if (not (string-match "^ " - (buffer-name elt))) - (setq head - (cons - (cons - (format - (format "%%%ds %%s%%s %%s" maxbuf) - (buffer-name elt) - (if (buffer-modified-p elt) "*" " ") - (save-excursion - (set-buffer elt) - (if buffer-read-only "%" " ")) - (or (buffer-file-name elt) - (save-excursion - (set-buffer elt) - (if list-buffers-directory - (expand-file-name - list-buffers-directory))) - "")) - elt) - head)))) - (setq tail (cdr tail))) - (reverse head)))))) + (let* ((buffers + ;; Make an alist of (MENU-ITEM . BUFFER). + (let ((tail (buffer-list)) + (maxlen 0) + head) + (while tail + (or (eq ?\ (aref (buffer-name (car tail)) 0)) + (setq maxlen + (max maxlen + (length (buffer-name (car tail)))))) + (setq tail (cdr tail))) + (setq tail (buffer-list)) + (while tail + (let ((elt (car tail))) + (if (not (string-match "^ " + (buffer-name elt))) + (setq head + (cons + (cons + (format + (format "%%%ds %%s%%s %%s" maxlen) + (buffer-name elt) + (if (buffer-modified-p elt) "*" " ") + (save-excursion + (set-buffer elt) + (if buffer-read-only "%" " ")) + (or (buffer-file-name elt) + (save-excursion + (set-buffer elt) + (if list-buffers-directory + (expand-file-name + list-buffers-directory))) + "")) + elt) + head)))) + (setq tail (cdr tail))) + head)) + (menu + ;; If we have lots of buffers, divide them into groups of 20 + ;; and make a pane (or submenu) for each one. + (if (> (length buffers) 30) + (let ((buffers (reverse buffers)) sublists next + (i 1)) + (while buffers + ;; Pull off the next 20 buffers + ;; and make them the next element of sublist. + (setq next (nthcdr 20 buffers)) + (if next + (setcdr (nthcdr 19 buffers) nil)) + (setq sublists (cons (cons (format "Buffers %d" i) buffers) + sublists)) + (setq i (1+ i)) + (setq buffers next)) + (cons "Buffer Menu" (nreverse sublists))) + ;; Few buffers--put them all in one pane. + (list "Buffer Menu" (cons "Select Buffer" buffers))))) + (setq foo menu) (let ((buf (x-popup-menu event menu)) (window (posn-window (event-start event)))) (if buf (progn (or (framep window) (select-window window)) (switch-to-buffer buf)))))) + +(defun mouse-buffer-menu-split (alist) ;;; These need to be rewritten for the new scroll bar implementation.