# HG changeset patch # User Gerd Moellmann # Date 956922823 0 # Node ID 6a79bbe8bf72fcd309027e8d457f03a856bef9aa # Parent 4ed5e6dadc6e6bf6612c226876da1b7f3107eaec *** empty log message *** diff -r 4ed5e6dadc6e -r 6a79bbe8bf72 etc/NEWS --- 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 diff -r 4ed5e6dadc6e -r 6a79bbe8bf72 lisp/ChangeLog --- 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 + + * subr.el (add-minor-mode): Rewritten. + 2000-04-28 Kenichi Handa * mail/sendmail.el (sendmail-send-it): Set diff -r 4ed5e6dadc6e -r 6a79bbe8bf72 lisp/subr.el --- 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