Add a new variable `global-minor-modes'
* doc/lispref/modes.texi (Minor Modes): Document it. * lisp/simple.el (global-minor-modes): New variable. (completion-in-mode-p): Use it. (completion-with-modes-p): Use it. * lisp/emacs-lisp/easy-mmode.el (define-minor-mode): Support it.
This commit is contained in:
parent
0bd846c174
commit
b535c8ba87
4 changed files with 30 additions and 9 deletions
|
@ -1466,6 +1466,11 @@ This buffer-local variable lists the currently enabled minor modes in
|
|||
the current buffer, and is a list of symbols.
|
||||
@end defvar
|
||||
|
||||
@defvar global-minor-modes
|
||||
This variable lists the currently enabled global minor modes, and is a
|
||||
list of symbols.
|
||||
@end defvar
|
||||
|
||||
@defvar minor-mode-list
|
||||
The value of this variable is a list of all minor mode commands.
|
||||
@end defvar
|
||||
|
|
8
etc/NEWS
8
etc/NEWS
|
@ -2297,7 +2297,13 @@ that is not compatible with byte code in previous Emacs versions.
|
|||
+++
|
||||
** New buffer-local variable 'local-minor-modes'.
|
||||
This permanently buffer-local variable holds a list of currently
|
||||
enabled minor modes in the current buffer (as a list of symbols).
|
||||
enabled non-global minor modes in the current buffer (as a list of
|
||||
symbols).
|
||||
|
||||
+++
|
||||
** New variable 'global-minor-modes'.
|
||||
This variable holds a list of currently enabled global minor modes (as
|
||||
a list of symbols).
|
||||
|
||||
+++
|
||||
** 'define-minor-mode' now takes an :interactive argument.
|
||||
|
|
|
@ -330,11 +330,14 @@ or call the function `%s'."))))
|
|||
nil)
|
||||
(t
|
||||
t)))
|
||||
(unless ,globalp
|
||||
;; Keep `local-minor-modes' up to date.
|
||||
(setq local-minor-modes (delq ',modefun local-minor-modes))
|
||||
(when ,getter
|
||||
(push ',modefun local-minor-modes)))
|
||||
;; Keep minor modes list up to date.
|
||||
,@(if globalp
|
||||
`((setq global-minor-modes (delq ',modefun global-minor-modes))
|
||||
(when ,getter
|
||||
(push ',modefun global-minor-modes)))
|
||||
`((setq local-minor-modes (delq ',modefun local-minor-modes))
|
||||
(when ,getter
|
||||
(push ',modefun local-minor-modes))))
|
||||
,@body
|
||||
;; The on/off hooks are here for backward compatibility only.
|
||||
(run-hooks ',hook (if ,getter ',hook-on ',hook-off))
|
||||
|
|
|
@ -138,6 +138,10 @@ messages are highlighted; this helps to see what messages were visited."
|
|||
nil
|
||||
"Overlay highlighting the current error message in the `next-error' buffer.")
|
||||
|
||||
(defvar global-minor-modes nil
|
||||
"A list of the currently enabled global minor modes.
|
||||
This is a list of symbols.")
|
||||
|
||||
(defcustom next-error-hook nil
|
||||
"List of hook functions run by `next-error' after visiting source file."
|
||||
:type 'hook
|
||||
|
@ -1985,14 +1989,16 @@ BUFFER, or any of the active minor modes in BUFFER."
|
|||
(or (provided-mode-derived-p
|
||||
(buffer-local-value 'major-mode buffer) (car modes))
|
||||
(memq (car modes)
|
||||
(buffer-local-value 'local-minor-modes buffer)))
|
||||
(buffer-local-value 'local-minor-modes buffer))
|
||||
(memq (car modes) global-minor-modes))
|
||||
;; Uncommon case: Multiple modes.
|
||||
(apply #'provided-mode-derived-p
|
||||
(buffer-local-value 'major-mode buffer)
|
||||
modes)
|
||||
(seq-intersection modes
|
||||
(buffer-local-value 'local-minor-modes buffer)
|
||||
#'eq)))))
|
||||
#'eq)
|
||||
(seq-intersection modes global-minor-modes #'eq)))))
|
||||
|
||||
(defun completion-with-modes-p (modes buffer)
|
||||
"Say whether MODES are in action in BUFFER.
|
||||
|
@ -2004,7 +2010,8 @@ or (if one of MODES is a minor mode), if it is switched on in BUFFER."
|
|||
;; It's a minor mode.
|
||||
(seq-intersection modes
|
||||
(buffer-local-value 'local-minor-modes buffer)
|
||||
#'eq)))
|
||||
#'eq)
|
||||
(seq-intersection modes global-minor-modes #'eq)))
|
||||
|
||||
(defun completion-button-p (category buffer)
|
||||
"Return non-nil if there's a button of CATEGORY at point in BUFFER."
|
||||
|
|
Loading…
Add table
Reference in a new issue