changeset 31563:96b9757bfd45

(add-minor-mode): Use toggle-fun arg.
author Dave Love <fx@gnu.org>
date Tue, 12 Sep 2000 12:56:25 +0000
parents a2d8210661c8
children 00efca34e7d0
files lisp/subr.el
diffstat 1 files changed, 23 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Tue Sep 12 12:54:31 2000 +0000
+++ b/lisp/subr.el	Tue Sep 12 12:56:25 2000 +0000
@@ -658,6 +658,7 @@
 (defalias 'search-backward-regexp (symbol-function 're-search-backward))
 (defalias 'int-to-string 'number-to-string)
 (defalias 'store-match-data 'set-match-data)
+;; These are the XEmacs names:
 (defalias 'point-at-eol 'line-end-position)
 (defalias 'point-at-bol 'line-beginning-position)
 
@@ -1509,13 +1510,33 @@
 Optional AFTER specifies that TOGGLE should be added after AFTER
 in `minor-mode-alist'.
 
-Optional TOGGLE-FUN is there for compatiblity with other Emacsen.
-It is currently not used.
+Optional TOGGLE-FUN is an interactive function to toggle the mode.  If
+supplied, it is used to make mouse clicks on the mode-line string turn
+off the mode.
+
+If TOGGLE-FUN is supplied and TOGGLE has a non-nil `:included'
+property, an entry for the mode is included in the mode-line minor
+mode menu.  If TOGGLE has a `:menu-tag', that is used for the menu
+item's label instead of NAME.
 
 In most cases, `define-minor-mode' should be used instead."
   (when name
     (let ((existing (assq toggle minor-mode-alist))
 	  (name (if (symbolp name) (symbol-value name) name)))
+      (when (functionp toggle-fun)
+	(setq name
+	      (apply 'propertize name
+		     'local-map (make-mode-line-mouse2-map toggle-fun)
+		     (unless (get-text-property 0 'help-echo name)
+		       (list 'help-echo
+			     (format "mouse-2: turn off %S" toggle)))))
+	(when (get toggle :included)
+	  (define-key mode-line-mode-menu
+	    (vector toggle)
+	    (list 'menu-item
+		  (or (get toggle :menu-tag) name)
+		  toggle-fun
+		  :button (cons :toggle toggle)))))
       (cond ((null existing)
 	     (let ((tail minor-mode-alist) found)
 	       (while (and tail (not found))