From 0b2b62ff6dcaf77d2897a284013af3ff4b8ae268 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Wed, 9 Apr 2008 03:53:48 +0000 Subject: [PATCH] * 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. --- lisp/ChangeLog | 12 +++++++++ lisp/bindings.el | 15 ++++++----- lisp/mouse.el | 66 ++++++++++++++++++++++++++++++------------------ 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 542dbb7e5ab..a2f7f47a4b5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,15 @@ +2008-04-09 Stefan Monnier + + * 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 * vc-svn.el (vc-svn-modify-change-comment): Add support for the diff --git a/lisp/bindings.el b/lisp/bindings.el index d1045002a04..af94fcd9d85 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -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 diff --git a/lisp/mouse.el b/lisp/mouse.el index eb20a73f43f..dba63ce3084 100644 --- a/lisp/mouse.el +++ b/lisp/mouse.el @@ -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 -- 2.39.2