* mouse.el (mouse-menu-major-mode-map): New fun extracted from

mouse-major-mode-menu.
(mouse-menu-bar-map): New fun extracted from mouse-popup-menubar.
(mouse-major-mode-menu, mouse-popup-menubar)
(mouse-popup-menubar-stuff): Use them.
(C-down-mouse-3): Bind to a dynamic map rather than to
mouse-popup-menubar-stuff.
* bindings.el (mode-line-major-mode-keymap): Bind down-mouse-1
to mouse-menu-major-mode-map rather than to mouse-major-mode-menu.
This commit is contained in:
Stefan Monnier 2008-04-09 03:53:48 +00:00
parent 6e6c6aafa3
commit 0b2b62ff6d
3 changed files with 62 additions and 31 deletions

View file

@ -1,3 +1,15 @@
2008-04-09 Stefan Monnier <monnier@iro.umontreal.ca>
* mouse.el (mouse-menu-major-mode-map): New fun extracted from
mouse-major-mode-menu.
(mouse-menu-bar-map): New fun extracted from mouse-popup-menubar.
(mouse-major-mode-menu, mouse-popup-menubar)
(mouse-popup-menubar-stuff): Use them.
(C-down-mouse-3): Bind to a dynamic map rather than to
mouse-popup-menubar-stuff.
* bindings.el (mode-line-major-mode-keymap): Bind down-mouse-1
to mouse-menu-major-mode-map rather than to mouse-major-mode-menu.
2008-04-09 Dan Nicolaescu <dann@ics.uci.edu>
* vc-svn.el (vc-svn-modify-change-comment): Add support for the

View file

@ -287,7 +287,9 @@ Menu of mode operations in the mode line.")
(defvar mode-line-major-mode-keymap
(let ((map (make-sparse-keymap)))
(define-key map [mode-line down-mouse-1] 'mouse-major-mode-menu)
(define-key map [mode-line down-mouse-1]
'(menu-item "Menu Bar" ignore
:filter (lambda (_) (mouse-menu-major-mode-map))))
(define-key map [mode-line mouse-2] 'describe-mode)
(define-key map [mode-line down-mouse-3] mode-line-mode-menu)
map) "\
@ -565,12 +567,11 @@ Actually, STRING need not be a string; any possible mode-line element
is okay. See `mode-line-format'.")
;; Don't use purecopy here--some people want to change these strings.
(setq minor-mode-alist
(list
(list 'abbrev-mode " Abbrev")
'(overwrite-mode overwrite-mode)
(list 'auto-fill-function " Fill")
;; not really a minor mode...
'(defining-kbd-macro " Def")))
'((abbrev-mode " Abbrev")
(overwrite-mode overwrite-mode)
(auto-fill-function " Fill")
;; not really a minor mode...
(defining-kbd-macro " Def")))
;; These variables are used by autoloadable packages.
;; They are defined here so that they do not get overridden

View file

@ -181,14 +181,7 @@ items `Turn Off' and `Help'."
(let ((indicator (car (nth 4 (car (cdr event))))))
(minor-mode-menu-from-indicator indicator)))
(defun mouse-major-mode-menu (event &optional prefix)
"Pop up a mode-specific menu of mouse commands.
Default to the Edit menu if the major mode doesn't define a menu."
;; Switch to the window clicked on, because otherwise
;; the mode's commands may not make sense.
(interactive "@e\nP")
;; Let the mode update its menus first.
(run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
(defun mouse-menu-major-mode-map ()
(let* (;; Keymap from which to inherit; may be null.
(ancestor (mouse-menu-non-singleton
(and (current-local-map)
@ -202,8 +195,7 @@ Default to the Edit menu if the major mode doesn't define a menu."
uniq)
(if ancestor
(set-keymap-parent newmap ancestor))
(popup-menu newmap event prefix)))
newmap))
(defun mouse-menu-non-singleton (menubar)
"Given menu keymap,
@ -218,12 +210,10 @@ Otherwise return the whole menu."
menubar
(lookup-key menubar (vector (car submap)))))))
(defun mouse-popup-menubar (event prefix)
"Pop up a menu equivalent to the menu bar for keyboard EVENT with PREFIX.
(defun mouse-menu-bar-map ()
"Return a keymap equivalent to the menu bar.
The contents are the items that would be in the menu bar whether or
not it is actually displayed."
(interactive "@e \nP")
(run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
(let* ((local-menu (and (current-local-map)
(lookup-key (current-local-map) [menu-bar])))
(global-menu (lookup-key global-map [menu-bar]))
@ -262,19 +252,42 @@ not it is actually displayed."
(cons "Global Menu"
(cdr global-menu)))))
;; Supplying the list is faster than making a new map.
(popup-menu (append (list global-menu)
(if local-menu
(list local-menu))
minor-mode-menus)
event prefix)))
;; FIXME: We have a problem here: we have to use the global/local/minor
;; so they're displayed in the expected order, but later on in the command
;; loop, they're actually looked up in the opposite order.
(apply 'append
global-menu
local-menu
minor-mode-menus)))
(defun mouse-major-mode-menu (event &optional prefix)
"Pop up a mode-specific menu of mouse commands.
Default to the Edit menu if the major mode doesn't define a menu."
(interactive "@e\nP")
(run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
(popup-menu (mouse-menu-major-mode-map) event prefix))
(make-obsolete 'mouse-major-mode-menu 'mouse-menu-major-mode-map)
(defun mouse-popup-menubar (event prefix)
"Pop up a menu equivalent to the menu bar for keyboard EVENT with PREFIX.
The contents are the items that would be in the menu bar whether or
not it is actually displayed."
(interactive "@e \nP")
(run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
(popup-menu (mouse-menu-bar-map) event prefix))
(make-obsolete 'mouse-popup-menubar 'mouse-menu-bar-map)
(defun mouse-popup-menubar-stuff (event prefix)
"Popup a menu like either `mouse-major-mode-menu' or `mouse-popup-menubar'.
Use the former if the menu bar is showing, otherwise the latter."
(interactive "@e \nP")
(if (zerop (assoc-default 'menu-bar-lines (frame-parameters) 'eq 0))
(mouse-popup-menubar event prefix)
(mouse-major-mode-menu event prefix)))
(interactive "@e\nP")
(run-hooks 'activate-menubar-hook 'menu-bar-update-hook)
(popup-menu
(if (zerop (or (frame-parameter nil 'menu-bar-lines) 0))
(mouse-menu-bar-map)
(mouse-menu-major-mode-map))
event prefix))
(make-obsolete 'mouse-popup-menubar-stuff nil)
;; Commands that operate on windows.
@ -2466,7 +2479,12 @@ and selects that window."
(if (not (eq system-type 'ms-dos))
(global-set-key [S-down-mouse-1] 'mouse-set-font))
;; C-down-mouse-2 is bound in facemenu.el.
(global-set-key [C-down-mouse-3] 'mouse-popup-menubar-stuff)
(global-set-key [C-down-mouse-3]
'(menu-item "Menu Bar" ignore
:filter (lambda (_)
(if (zerop (or (frame-parameter nil 'menu-bar-lines) 0))
(mouse-menu-bar-map)
(mouse-menu-major-mode-map)))))
;; Replaced with dragging mouse-1