From: Lars Ingebrigtsen Date: Thu, 4 Feb 2021 14:22:40 +0000 (+0100) Subject: Allow a :variable keyword in define-globalized-minor-mode X-Git-Tag: emacs-28.0.90~3938 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=e1d54bb638dfb017acb778a45092f97bb0d3427c;p=emacs.git Allow a :variable keyword in define-globalized-minor-mode * doc/lispref/modes.texi (Defining Minor Modes): Document it. * lisp/emacs-lisp/easy-mmode.el (define-globalized-minor-mode): Allow specifying a :variable to be used if the underlying mode has a divergent variable to store the state (bug#29081). --- diff --git a/doc/lispref/modes.texi b/doc/lispref/modes.texi index abc12546410..ce7727b87eb 100644 --- a/doc/lispref/modes.texi +++ b/doc/lispref/modes.texi @@ -1826,6 +1826,11 @@ starts, for example by providing a @code{:require} keyword. Use @code{:group @var{group}} in @var{keyword-args} to specify the custom group for the mode variable of the global minor mode. +By default, the buffer-local minor mode variable that says whether the +mode is switched on or off is the same as the name of the mode itself. +Use @code{:variable @var{variable}} if that's not the case--some minor +modes use a different variable to store this state information. + Generally speaking, when you define a globalized minor mode, you should also define a non-globalized version, so that people can use (or disable) it in individual buffers. This also allows them to disable a diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el index 54c0cf08b78..2916ae4adea 100644 --- a/lisp/emacs-lisp/easy-mmode.el +++ b/lisp/emacs-lisp/easy-mmode.el @@ -418,6 +418,7 @@ on if the hook has explicitly disabled it. (pretty-global-name (easy-mmode-pretty-mode-name global-mode)) (group nil) (extra-keywords nil) + (MODE-variable mode) (MODE-buffers (intern (concat global-mode-name "-buffers"))) (MODE-enable-in-buffers (intern (concat global-mode-name "-enable-in-buffers"))) @@ -439,6 +440,7 @@ on if the hook has explicitly disabled it. (pcase keyw (:group (setq group (nconc group (list :group (pop body))))) (:global (pop body)) + (:variable (setq MODE-variable (pop body))) (:predicate (setq predicate (list (pop body))) (setq turn-on-function @@ -541,7 +543,7 @@ list." (with-current-buffer buf (unless ,MODE-set-explicitly (unless (eq ,MODE-major-mode major-mode) - (if ,mode + (if ,MODE-variable (progn (,mode -1) (funcall ,turn-on-function))