]> git.eshelyaron.com Git - emacs.git/commitdiff
*** empty log message ***
authorGerd Moellmann <gerd@gnu.org>
Fri, 28 Apr 2000 11:53:43 +0000 (11:53 +0000)
committerGerd Moellmann <gerd@gnu.org>
Fri, 28 Apr 2000 11:53:43 +0000 (11:53 +0000)
etc/NEWS
lisp/ChangeLog
lisp/subr.el

index 720277d0437f7b68160ed032064f400607c9f9eb..4881906f90bafe0f766686f34370291a4e279dfa 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1150,12 +1150,25 @@ so I will know I still need to look at it -- rms.
 ** The function `add-minor-mode' simplifies the definition of minor
 modes.
 
-- Function: add-minor-mode SYMBOL NAME MAP
+- Function: 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.  MAP is the keymap for the minor mode.
+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
index c4c132ea87b6c957d740dccf8d8463da3c5cae54..b7cddec1f4fb43b488e17138efb9e577c1ea07b3 100644 (file)
@@ -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
index ebaaaf4d1fd9b3e0d8b46520e9b1d52edb448e9a..03e215a22308f4142fb250374836e5c02e9b1914 100644 (file)
@@ -1486,18 +1486,51 @@ If DIR-FLAG is non-nil, create a new empty directory instead of a file."
     file))
 
 \f
-(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