changeset 28751:6a79bbe8bf72

*** empty log message ***
author Gerd Moellmann <gerd@gnu.org>
date Fri, 28 Apr 2000 11:53:43 +0000
parents 4ed5e6dadc6e
children 3d8dd587e377
files etc/NEWS lisp/ChangeLog lisp/subr.el
diffstat 3 files changed, 67 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/etc/NEWS	Fri Apr 28 04:04:04 2000 +0000
+++ b/etc/NEWS	Fri Apr 28 11:53:43 2000 +0000
@@ -1150,12 +1150,25 @@
 ** The function `add-minor-mode' simplifies the definition of minor
 modes.
 
-- Function: add-minor-mode SYMBOL NAME MAP
-
-Register a new minor mode.  SYMBOL is the name of a buffer-local
-variable that is toggled on or off to say whether the minor mode is
-active or not.  NAME is the string that will appear in the mode line
-when the minor mode is active.  MAP is the keymap for the minor mode.
+- Function: add-minor-mode TOGGLE NAME &optional KEYMAP AFTER TOGGLE-FUN
+
+Register a new minor mode.
+
+TOGGLE is a symbol which is the name of a buffer-local variable that
+is toggled on or off to say whether the minor mode is active or not.
+
+NAME specifies what will appear in the mode line when the minor mode
+is active.  NAME should be either a string starting with a space, or a
+symbol whose value is such a string.
+
+Optional KEYMAP is the keymap for the minor mode that will be added
+to `minor-mode-map-alist'.
+
+Optional AFTER specifies that TOGGLE should be added after AFTER
+in `minor-mode-alist'.
+
+Optional TOGGLE-FUN is there for compatiblity with other Emacssen.
+It is currently not used.
 
 ** The function `shell-command' now sets the default directory of the
 `*Shell Command Output*' buffer to the default directory of the buffer
--- a/lisp/ChangeLog	Fri Apr 28 04:04:04 2000 +0000
+++ b/lisp/ChangeLog	Fri Apr 28 11:53:43 2000 +0000
@@ -1,3 +1,7 @@
+2000-04-28  Gerd Moellmann  <gerd@gnu.org>
+
+	* subr.el (add-minor-mode): Rewritten.
+
 2000-04-28  Kenichi Handa  <handa@etl.go.jp>
 
 	* mail/sendmail.el (sendmail-send-it): Set
--- a/lisp/subr.el	Fri Apr 28 04:04:04 2000 +0000
+++ b/lisp/subr.el	Fri Apr 28 11:53:43 2000 +0000
@@ -1486,18 +1486,51 @@
     file))
 
 
-(defun add-minor-mode (symbol name &optional map)
+(defun add-minor-mode (toggle name &optional keymap after toggle-fun)
   "Register a new minor mode.
-SYMBOL is the name of a buffer-local variable that is toggled on
-or off to say whether the minor mode is active or not.  NAME is the
-string that will appear in the mode line when the minor mode is
-active.  Optional MAP is the keymap for the minor mode."
-  (make-local-variable symbol)
-  (set symbol t)
-  (unless (assq symbol minor-mode-alist)
-    (add-to-list 'minor-mode-alist (list symbol name)))
-  (when (and map (not (assq symbol minor-mode-map-alist)))
-    (add-to-list 'minor-mode-map-alist (cons symbol map))))
+
+TOGGLE is a symbol which is the name of a buffer-local variable that
+is toggled on or off to say whether the minor mode is active or not.
+
+NAME specifies what will appear in the mode line when the minor mode
+is active.  NAME should be either a string starting with a space, or a
+symbol whose value is such a string.
+
+Optional KEYMAP is the keymap for the minor mode that will be added
+to `minor-mode-map-alist'.
+
+Optional AFTER specifies that TOGGLE should be added after AFTER
+in `minor-mode-alist'.
+
+Optional TOGGLE-FUN is there for compatiblity with other Emacssen.
+It is currently not used."
+  (make-local-variable toggle)
+  (set toggle t)
+  
+  (when name
+    (let ((existing (assq toggle minor-mode-alist))
+	  (name (if (symbolp name) (symbol-value name) name)))
+      (cond ((null existing)
+	     (let ((tail minor-mode-alist) found)
+	       (while (and tail (not found))
+		 (if (eq after (caar tail))
+		     (setq found tail)
+		   (setq tail (cdr tail))))
+	       (if found
+		   (let ((rest (cdr found)))
+		     (setcdr found nil)
+		     (nconc found (list toggle name) rest))
+		 (setq minor-mode-alist (cons (list toggle name)
+					      minor-mode-alist)))))
+	    (t
+	     (setcdr existing (list name))))))
+    
+  (when keymap
+    (let ((existing (assq toggle minor-mode-map-alist)))
+      (if existing
+	  (setcdr existing keymap)
+	(setq minor-mode-map-alist (cons (cons toggle keymap)
+					 minor-mode-map-alist))))))
 
 
 ;;; subr.el ends here