From: Gerd Moellmann Date: Fri, 28 Apr 2000 11:53:43 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: emacs-pretest-21.0.90~4104 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=c94f4677169587f105e3ee894a19d734a7187546;p=emacs.git *** empty log message *** --- diff --git a/etc/NEWS b/etc/NEWS index 720277d0437..4881906f90b 100644 --- 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 diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c4c132ea87b..b7cddec1f4f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -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 --git a/lisp/subr.el b/lisp/subr.el index ebaaaf4d1fd..03e215a2230 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -1486,18 +1486,51 @@ If DIR-FLAG is non-nil, create a new empty directory instead of a file." 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