1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-15 10:30:25 -08:00

Keyboard interface (C-f10) to `mouse-buffer-menu' (C-down-mouse-1).

* lisp/mouse.el (mouse-buffer-menu-map): Extract from `mouse-buffer-menu'.
(mouse-buffer-menu): Use `mouse-buffer-menu-map'.
* lisp/menu-bar.el (menu-bar-buffer-vector): Extract from
`menu-bar-update-buffers'.
(menu-bar-update-buffers): Use `menu-bar-buffer-vector'.
(buffer-menu-open): New user command, bound globally to C-f10,
provides a keyboard interface to `mouse-buffer-menu' (C-down-mouse-1).
(mouse-buffer-menu-keymap): Use `menu-bar-buffer-vector' to
convert the value returned by `mouse-buffer-menu-map' to a list
acceptable to `popup-menu' for `buffer-menu-open'.
This commit is contained in:
Sam Steingold 2014-12-18 16:41:34 -05:00
parent 645a6aa4a5
commit 87f9ec7afb
4 changed files with 64 additions and 25 deletions

View file

@ -1938,6 +1938,19 @@ Buffers menu is regenerated."
"Function to select the buffer chosen from the `Buffers' menu-bar menu.
It must accept a buffer as its only required argument.")
(defun menu-bar-buffer-vector (alist)
;; turn ((name . buffer) ...) into a menu
(let ((buffers-vec (make-vector (length alist) nil))
(i (length alist)))
(dolist (pair alist)
(setq i (1- i))
(aset buffers-vec i
(cons (car pair)
`(lambda ()
(interactive)
(funcall menu-bar-select-buffer-function ,(cdr pair))))))
buffers-vec))
(defun menu-bar-update-buffers (&optional force)
;; If user discards the Buffers item, play along.
(and (lookup-key (current-global-map) [menu-bar buffer])
@ -1973,17 +1986,7 @@ It must accept a buffer as its only required argument.")
name)
))
alist))))
;; Now make the actual list of items.
(let ((buffers-vec (make-vector (length alist) nil))
(i (length alist)))
(dolist (pair alist)
(setq i (1- i))
(aset buffers-vec i
(cons (car pair)
`(lambda ()
(interactive)
(funcall menu-bar-select-buffer-function ,(cdr pair))))))
(list buffers-vec))))
(list (menu-bar-buffer-vector alist))))
;; Make a Frames menu if we have more than one frame.
(when (cdr frames)
@ -2311,6 +2314,25 @@ If FRAME is nil or not given, use the selected frame."
(global-set-key [f10] 'menu-bar-open)
(defun buffer-menu-open ()
"Start key navigation of the buffer menu.
This is the keyboard interface to \\[mouse-buffer-menu]."
(interactive)
(popup-menu (mouse-buffer-menu-keymap)
(posn-at-x-y 0 0 nil t)))
(global-set-key [C-f10] 'buffer-menu-open)
(defun mouse-buffer-menu-keymap ()
(let* ((menu (mouse-buffer-menu-map))
(km (make-sparse-keymap (pop menu))))
(dolist (item (nreverse menu))
(let* ((name (pop item)))
(define-key km (vector (intern name))
(list name 'keymap name
(menu-bar-buffer-vector item)))))
km))
(defvar tty-menu-navigation-map
(let ((map (make-sparse-keymap)))
;; The next line is disabled because it breaks interpretation of