changeset 28794:2274787ba380

(add-minor-mode): Handle AFTER for keymaps. Don't set TOGGLE's value.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 03 May 2000 12:33:16 +0000
parents e56af637f7a2
children 48790063f744
files lisp/subr.el
diffstat 1 files changed, 16 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/subr.el	Wed May 03 11:39:25 2000 +0000
+++ b/lisp/subr.el	Wed May 03 12:33:16 2000 +0000
@@ -1502,10 +1502,9 @@
 Optional AFTER specifies that TOGGLE should be added after AFTER
 in `minor-mode-alist'.
 
-Optional TOGGLE-FUN is there for compatiblity with other Emacssen.
+Optional TOGGLE-FUN is there for compatiblity with other Emacsen.
 It is currently not used."
   (make-local-variable toggle)
-  (set toggle t)
   
   (when name
     (let ((existing (assq toggle minor-mode-alist))
@@ -1519,7 +1518,7 @@
 	       (if found
 		   (let ((rest (cdr found)))
 		     (setcdr found nil)
-		     (nconc found (list toggle name) rest))
+		     (nconc found (list (list toggle name)) rest))
 		 (setq minor-mode-alist (cons (list toggle name)
 					      minor-mode-alist)))))
 	    (t
@@ -1527,10 +1526,20 @@
     
   (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))))))
+      (cond ((null existing)
+	     (let ((tail minor-mode-map-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 (cons toggle keymap)) rest))
+		 (setq minor-mode-map-alist (cons (cons toggle keymap)
+						  minor-mode-map-alist)))))
+	    (t
+	     (setcdr existing keymap))))))
 
 
 ;;; subr.el ends here