]> git.eshelyaron.com Git - emacs.git/commitdiff
Add a new variable `global-minor-modes'
authorLars Ingebrigtsen <larsi@gnus.org>
Mon, 15 Feb 2021 12:08:15 +0000 (13:08 +0100)
committerLars Ingebrigtsen <larsi@gnus.org>
Mon, 15 Feb 2021 12:08:21 +0000 (13:08 +0100)
* 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.

doc/lispref/modes.texi
etc/NEWS
lisp/emacs-lisp/easy-mmode.el
lisp/simple.el

index 192ffb6a0a9fecbfa930e069229f27877be58f41..e1299b52d41583013f90dc4931f52621dc51458c 100644 (file)
@@ -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
index eeaed3b5cfafe2f3b9d9b78910a759c162970abb..7f32f7bf6a9dd6d4e8b89d1e04afa55c447a2c18 100644 (file)
--- a/etc/NEWS
+++ b/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.
index c48ec505ce04f9ed625c25552a7a79ed25c04c07..4a9e58083b0e07fc99061722bd7ca7107263aa5b 100644 (file)
@@ -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))
index cb7496d37c561d83bcf19efebdfc48b4c67453fd..aafbb3e1f885b472ef56863f469682e9362c3490 100644 (file)
@@ -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."