summaryrefslogtreecommitdiff
path: root/lisp/hl-line.el
diff options
context:
space:
mode:
authordickmao <dick.r.chiang@gmail.com>2022-03-22 15:59:11 +0100
committerLars Ingebrigtsen <larsi@gnus.org>2022-03-22 15:59:11 +0100
commit3054e70d76f71876c58497db04f55d7f413663d9 (patch)
tree5529b7fa69e0123d04a9170fd2dc86204e84e653 /lisp/hl-line.el
parent9b47ccd72e107ee43fcd62362e7580dcfa50d008 (diff)
downloademacs-3054e70d76f71876c58497db04f55d7f413663d9.tar.gz
Restore hl-line--buffer tracking
* lisp/hl-line.el (hl-line-overlay, hl-line-overlay-buffer): Correct replacement variable. (hl-line--overlay): Clearer doc. (hl-line--buffer): Nee hl-line-overlay-buffer (hl-line-sticky-flag): Custom initialization is unfathomable. (hl-line-mode, hl-line-unhighlight): Orthogonalize sticky. (hl-line-highlight): Remove highlight from previous buffer. * test/lisp/hl-line-tests.el (hl-line-sticky, hl-line-tests-verify): (hl-line-tests-sticky-across-frames, hl-line-tests-sticky): Test (bug#54481).
Diffstat (limited to 'lisp/hl-line.el')
-rw-r--r--lisp/hl-line.el32
1 files changed, 23 insertions, 9 deletions
diff --git a/lisp/hl-line.el b/lisp/hl-line.el
index 70ba0fcfc28..f1c2e1ebf23 100644
--- a/lisp/hl-line.el
+++ b/lisp/hl-line.el
@@ -24,17 +24,26 @@
;;; Commentary:
+;; Proper scuttling of unsticky overlays relies on `post-command-hook`
+;; being called on a buffer switch and the stationarity of
+;; `hl-line--buffer` across switches. One could easily imagine
+;; programatically defeating unsticky overlays by bypassing
+;; `post-command-hook`.
+
;;; Code:
-(make-obsolete-variable 'hl-line-overlay nil "29.1")
+(make-obsolete-variable 'hl-line-overlay 'hl-line--overlay "29.1")
(make-obsolete-variable 'global-hl-line-overlay nil "29.1")
(make-obsolete-variable 'global-hl-line-overlays nil "29.1")
(make-obsolete-variable 'global-hl-line-sticky-flag nil "29.1")
-(make-obsolete-variable 'hl-line-overlay-buffer nil "29.1")
+(make-obsolete-variable 'hl-line-overlay-buffer 'hl-line--buffer "29.1")
(make-obsolete-variable 'hl-line-range-function nil "29.1")
(defvar-local hl-line--overlay nil
- "Keep state else scan entire buffer in `post-command-hook'.")
+ "The prevailing highlighting overlay per buffer.")
+
+(defvar hl-line--buffer nil
+ "Used to track last buffer.")
;; 1. define-minor-mode creates buffer-local hl-line--overlay
;; 2. overlay wiped by kill-all-local-variables
@@ -68,6 +77,7 @@
:type 'boolean
:version "22.1"
:group 'hl-line
+ :initialize #'custom-initialize-default
:set (lambda (symbol value)
(set-default symbol value)
(unless value
@@ -100,14 +110,12 @@ Currently used in calendar/todo-mode."
(add-hook 'post-command-hook #'hl-line-highlight nil t))
(remove-hook 'post-command-hook #'hl-line-highlight t)
(remove-hook 'change-major-mode-hook #'hl-line-unhighlight t)
- (let (hl-line-sticky-flag)
- (hl-line-unhighlight))))
+ (hl-line-unhighlight)))
(defun hl-line-unhighlight ()
- (unless hl-line-sticky-flag
- (when hl-line--overlay
- (delete-overlay hl-line--overlay)
- (setq hl-line--overlay nil))))
+ (when hl-line--overlay
+ (delete-overlay hl-line--overlay)
+ (setq hl-line--overlay nil)))
(defun hl-line-highlight ()
(unless (minibufferp)
@@ -120,6 +128,12 @@ Currently used in calendar/todo-mode."
(move-overlay hl-line--overlay
(line-beginning-position)
(line-beginning-position 2))
+ (when (and (not (eq hl-line--buffer (current-buffer)))
+ (not hl-line-sticky-flag)
+ (buffer-live-p hl-line--buffer))
+ (with-current-buffer hl-line--buffer
+ (hl-line-unhighlight)))
+ (setq hl-line--buffer (current-buffer))
(run-hooks 'hl-line-highlight-hook)))
(defun hl-line-turn-on ()