Allow specifying in which major modes to enable 'global-hl-line-mode'

* lisp/hl-line.el (global-hl-line-modes): New user option.
(global-hl-line-highlight): Obey the new variable.  (Bug#77022)

* etc/NEWS: Document new variable.
This commit is contained in:
Elías Gabriel Pérez 2025-03-14 19:02:51 -06:00 committed by Eli Zaretskii
parent b1db48c0fc
commit 77ad6518bb
2 changed files with 33 additions and 1 deletions

View file

@ -1587,6 +1587,10 @@ commands. When nil, clicking on an inactive Emacs frame will only
activate it. When t (the default), the click will both activate the
frame and be interpreted as a command.
*** New variable 'global-hl-line-modes'.
This specifies in which major modes should the 'global-hl-line-mode' be
switched on.
---
*** New user option 'display-fill-column-indicator-warning'.
Customize it to a non-nil value to have the fill-column indicators

View file

@ -122,6 +122,33 @@ the command `global-hl-line-mode' to turn Global Hl-Line mode on."
:version "24.1"
:group 'hl-line)
(defcustom global-hl-line-modes t
"Which major modes `hl-line-mode' is switched on in.
This variable can be either t (all major modes), nil (no major modes),
or a list of modes and (not modes) to switch use this minor mode or
not. For instance
(c-mode (not message-mode mail-mode) text-mode)
means \"use this mode in all modes derived from `c-mode', don't use in
modes derived from `message-mode' or `mail-mode', but do use in other
modes derived from `text-mode'\". An element with value t means \"use\"
and nil means \"don't use\". There's an implicit nil at the end of the
list."
:type
'(choice (const :tag "Enable in all major modes" t)
(repeat :tag "Rules (earlier takes precedence)..."
(choice
(const :tag "Enable in all (other) modes" t)
(symbol :value fundamental-mode :tag
"Enable in major mode")
(cons :tag "Don't enable in major modes"
(const :tag "Don't enable in..." not)
(repeat
(symbol :value fundamental-mode :tag
"Major mode"))))))
:version "31.1")
(defvar hl-line-range-function nil
"If non-nil, function to call to return highlight range.
The function of no args should return a cons cell; its car value
@ -236,7 +263,8 @@ on `post-command-hook'."
(defun global-hl-line-highlight ()
"Highlight the current line in the current window."
(when global-hl-line-mode ; Might be changed outside the mode function.
(when (and global-hl-line-mode ; Might be changed outside the mode function.
(easy-mmode--globalized-predicate-p global-hl-line-modes))
(unless (window-minibuffer-p)
(unless (overlayp global-hl-line-overlay)
(setq global-hl-line-overlay (hl-line-make-overlay))) ; To be moved.