summaryrefslogtreecommitdiff
path: root/lisp/mouse.el
diff options
context:
space:
mode:
authorDan Nicolaescu <dann@ics.uci.edu>2008-02-21 09:15:32 +0000
committerDan Nicolaescu <dann@ics.uci.edu>2008-02-21 09:15:32 +0000
commitfb1a03c9f5ae50bdc573599fcec0dfceb97480a7 (patch)
tree87643fa659f0ede260d50c530bc8e3586fa19460 /lisp/mouse.el
parent796abee9d8ff0bc26c4bd6f5a423cc73b7a15e9a (diff)
downloademacs-fb1a03c9f5ae50bdc573599fcec0dfceb97480a7.tar.gz
* 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.
Diffstat (limited to 'lisp/mouse.el')
-rw-r--r--lisp/mouse.el37
1 files changed, 26 insertions, 11 deletions
diff --git a/lisp/mouse.el b/lisp/mouse.el
index a0e823e2098..8b3195ac010 100644
--- a/lisp/mouse.el
+++ b/lisp/mouse.el
@@ -152,18 +152,33 @@ PREFIX is the prefix argument (if any) to pass to the command."
(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."