diff options
Diffstat (limited to 'lisp/menu-bar.el')
-rw-r--r-- | lisp/menu-bar.el | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el index 1bb226f7a8c..693cba220fd 100644 --- a/lisp/menu-bar.el +++ b/lisp/menu-bar.el @@ -429,6 +429,8 @@ A large number or nil slows down menu responsiveness.") file)) (car elt))) +(defvar menu-bar-buffers-menu-list-buffers-entry nil) + (defun menu-bar-update-buffers () ;; If user discards the Buffers item, play along. (and (lookup-key (current-global-map) [menu-bar buffer]) @@ -486,6 +488,25 @@ A large number or nil slows down menu responsiveness.") (setq maxlen (length (car (car alist)))))) (setq tail (cdr tail))) (setq alist (nreverse alist)) + ;; Make the menu item for list-buffers + ;; or reuse the one we already have. + ;; The advantage in reusing one + ;; is that it already has the keyboard equivalent + ;; cached, so we save the time to look that up again. + (or menu-bar-buffers-menu-list-buffers-entry + (setq menu-bar-buffers-menu-list-buffers-entry + (cons + 'list-buffers + (cons + "" + 'list-buffers)))) + ;; Update the item string for menu's new width. + (setcar (cdr menu-bar-buffers-menu-list-buffers-entry) + (concat (make-string (max (- (/ maxlen 2) 8) 0) + ?\ ) + "List All Buffers")) + ;; Now make the actual list of items, + ;; ending with the list-buffers item. (nconc (mapcar '(lambda (pair) ;; This is somewhat risque, to use ;; the buffer name itself as the event @@ -498,14 +519,7 @@ A large number or nil slows down menu responsiveness.") (cons nil nil)) 'menu-bar-select-buffer)) alist) - (list - (cons - 'list-buffers - (cons - (concat (make-string (max (- (/ maxlen 2) 8) 0) - ?\ ) - "List All Buffers") - 'list-buffers))))))) + (list menu-bar-buffers-menu-list-buffers-entry))))) ;; Make a Frames menu if we have more than one frame. |