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."