[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#57534: 29.0.50; Highlighting lost after auto-revert-mode triggers
From: |
Juri Linkov |
Subject: |
bug#57534: 29.0.50; Highlighting lost after auto-revert-mode triggers |
Date: |
Tue, 25 Jun 2024 09:52:27 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu) |
> 1. seq 10 > /tmp/file
>
> 2. emacs -Q /tmp/file
>
> 3. (highlight-lines-matching-regexp "3")
>
> This is bound to "M-s h l". I see the line containing "3" highlighted
> in yellow, as expected
>
> 4. M-x auto-revert-mode
>
> 5. Back in the shell: seq 20 > /tmp/file
>
> auto-revert-mode kicks in, updating the buffer with the results of 'seq
> 20' (possibly updating to an empty buffer first, if we react immediately
> to the file truncation). At this point I would expect either:
>
> 1. The buffer being fully reverted, with all the highlighting
> disappearing. This is what happens if we did M-x revert buffer
>
> 2. The buffer contents being reverted, but the highlighting being
> reapplied
>
> In this auto-revert scenario, we get something in-between: after the
> auto-revert hi-lock-interactive-patterns still contains the highlighting
> regex, but no highlighting actually happens. It'd be really nice and
> useful if the highlighting stayed.
Now re-highlighting after revert is implemented in Emacs 30.
However, I noticed one problem that makes this feature unusable:
when a file contains file patterns, then after every revert it asks
again and again. This is because hi-lock-file-patterns-policy
missed the value `always', now added in this patch:
diff --git a/lisp/hi-lock.el b/lisp/hi-lock.el
index 64b84cdf859..de4384054ef 100644
--- a/lisp/hi-lock.el
+++ b/lisp/hi-lock.el
@@ -122,9 +122,10 @@ hi-lock-file-patterns-policy
"Specify when hi-lock should use patterns found in file.
If `ask', prompt when patterns found in buffer; if bound to a function,
use patterns when function returns t (function is called with patterns
-as first argument); if nil or `never' or anything else, don't use file
-patterns."
+as first argument); if `always', use file patterns without prompt;
+if nil or `never' or anything else, don't use file patterns."
:type '(choice (const :tag "Do not use file patterns" never)
+ (const :tag "Always use file patterns" always)
(const :tag "Ask about file patterns" ask)
(function :tag "Function to check file patterns"))
:group 'hi-lock
@@ -334,8 +335,8 @@ hi-lock-mode
(See `font-lock-keywords'.) They may be edited and re-loaded with
\\[hi-lock-find-patterns],
any valid `font-lock-keywords' form is acceptable. When a file is
loaded the patterns are read if `hi-lock-file-patterns-policy' is
- `ask' and the user responds y to the prompt, or if
- `hi-lock-file-patterns-policy' is bound to a function and that
+ `always' or if it's `ask' and the user responds y to the prompt,
+ or if `hi-lock-file-patterns-policy' is bound to a function and that
function returns t.
\\[hi-lock-find-patterns]
@@ -852,6 +853,7 @@ hi-lock-find-patterns
(funcall hi-lock-file-patterns-policy all-patterns))
((eq hi-lock-file-patterns-policy 'ask)
(y-or-n-p "Add patterns from this buffer to hi-lock? "))
+ ((eq hi-lock-file-patterns-policy 'always) t)
(t nil)))
(hi-lock-set-file-patterns all-patterns)
(if (called-interactively-p 'interactive)
@@ -866,12 +868,16 @@ hi-lock-font-lock-hook
(defun hi-lock-revert-buffer-rehighlight ()
"Rehighlight hi-lock patterns after `revert-buffer'.
Apply the previous patterns after reverting the buffer."
- (when-let ((patterns hi-lock-interactive-lighters))
- (lambda ()
- (when hi-lock-interactive-lighters
- (hi-lock-unface-buffer t))
- (dolist (pattern (reverse patterns))
- (highlight-regexp (car pattern) (cadr (nth 1 (caddr pattern))))))))
+ (let ((policy (if hi-lock-file-patterns 'always 'never))
+ (patterns hi-lock-interactive-lighters))
+ (when patterns
+ (lambda ()
+ (unless hi-lock-mode
+ (let ((hi-lock-file-patterns-policy policy))
+ (when hi-lock-interactive-lighters
+ (hi-lock-unface-buffer t))
+ (dolist (pattern (reverse patterns))
+ (highlight-regexp (car pattern) (cadr (nth 1 (caddr
pattern)))))))))))
(defvar hi-lock--hashcons-hash
(make-hash-table :test 'equal :weakness t)
- bug#57534: 29.0.50; Highlighting lost after auto-revert-mode triggers,
Juri Linkov <=