Mercurial > emacs
changeset 92046:3831642b30d0
* mouse.el (minor-mode-menu-from-indicator): Create a menu with a
"Turn off" and a "Help" entry when the minor mode has no menu.
author | Dan Nicolaescu <dann@ics.uci.edu> |
---|---|
date | Thu, 21 Feb 2008 09:15:32 +0000 |
parents | eeb9265e0ea5 |
children | 0c8c96c56510 |
files | lisp/ChangeLog lisp/mouse.el |
diffstat | 2 files changed, 31 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Thu Feb 21 09:12:20 2008 +0000 +++ b/lisp/ChangeLog Thu Feb 21 09:15:32 2008 +0000 @@ -1,3 +1,8 @@ +2008-02-21 Drew Adams <drew.adams@oracle.com> + + * mouse.el (minor-mode-menu-from-indicator): Create a menu with a + "Turn off" and a "Help" entry when the minor mode has no menu. + 2008-02-21 Dan Nicolaescu <dann@ics.uci.edu> * vc.el (vc-status-mark, vc-status-unmark): New functions.
--- a/lisp/mouse.el Thu Feb 21 09:12:20 2008 +0000 +++ b/lisp/mouse.el Thu Feb 21 09:15:32 2008 +0000 @@ -152,18 +152,33 @@ (call-interactively cmd)))) (defun minor-mode-menu-from-indicator (indicator) - "Show menu, if any, for minor mode specified by INDICATOR. -Interactively, INDICATOR is read using completion." - (interactive (list (completing-read "Minor mode indicator: " - (describe-minor-mode-completion-table-for-indicator)))) + "Show menu for minor mode specified by INDICATOR. +Interactively, INDICATOR is read using completion. +If there is no menu defined for the minor mode, then create one with +items `Turn Off' and `Help'." + (interactive + (list (completing-read + "Minor mode indicator: " + (describe-minor-mode-completion-table-for-indicator)))) (let ((minor-mode (lookup-minor-mode-from-indicator indicator))) - (if minor-mode - (let* ((map (cdr-safe (assq minor-mode minor-mode-map-alist))) - (menu (and (keymapp map) (lookup-key map [menu-bar])))) - (if menu - (popup-menu menu) - (message "No menu for minor mode `%s'" minor-mode))) - (error "Cannot find minor mode for `%s'" indicator)))) + (unless minor-mode (error "Cannot find minor mode for `%s'" indicator)) + (let* ((map (cdr-safe (assq minor-mode minor-mode-map-alist))) + (menu (and (keymapp map) (lookup-key map [menu-bar])))) + (unless menu + (setq menu + `(keymap + (,(intern indicator) ,indicator + keymap + (turn-off menu-item "Turn Off minor mode" + (lambda () + (interactive) + (,minor-mode -1) + (message ,(format "`%S' turned OFF" minor-mode)))) + (help menu-item "Help for minor mode" + (lambda () (interactive) + (describe-function + ',minor-mode))))))) + (popup-menu menu)))) (defun mouse-minor-mode-menu (event) "Show minor-mode menu for EVENT on minor modes area of the mode line."