]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix 'whitespace-mode' with 'missing-newline-at-eof'
authorEli Zaretskii <eliz@gnu.org>
Sat, 21 Sep 2024 10:41:21 +0000 (13:41 +0300)
committerEshel Yaron <me@eshelyaron.com>
Mon, 23 Sep 2024 10:45:25 +0000 (12:45 +0200)
* lisp/whitespace.el (whitespace-post-command-hook): Refontify
when point moves if 'missing-newline-at-eof' is in
'whitespace-active-style'.  (Bug#73332)

(cherry picked from commit 01ebe6de8954b2381bfba31038a0bd0669e33910)

lisp/whitespace.el

index 28d131b054c9905bd2861ad4fef235e97d154acd..d1b1f84f9232d934d70d33ab32ad67a751ef012d 100644 (file)
@@ -2333,10 +2333,22 @@ Also refontify when necessary."
         (font-lock-flush whitespace-eob-marker (1+ (buffer-size)))))
     (setq-local whitespace-buffer-changed nil)
     (setq whitespace-point (point))    ; current point position
-    (let ((refontify (and (eolp) ; It is at end of line ...
-                          ;; ... with trailing SPACE or TAB
-                          (or (memq (preceding-char) '(?\s ?\t)))
-                          (line-beginning-position)))
+    (let ((refontify (or (and (eolp) ; It is at end of line ...
+                              ;; ... with trailing SPACE or TAB
+                              (or (memq (preceding-char) '(?\s ?\t)))
+                              (line-beginning-position))
+                         (and (memq 'missing-newline-at-eof
+                                    ;; If user requested to highlight
+                                    ;; EOB without a newline...
+                                    whitespace-active-style)
+                              ;; ...and the buffer is not empty...
+                              (not (= (point-min) (point-max)))
+                              (= (point-max) (without-restriction (point-max)))
+                              ;; ...and no newline at EOB...
+                              (not (eq (char-before (point-max)) ?\n))
+                              ;; ...then refontify the last character in
+                              ;; the buffer
+                              (max (1- (point-max)) (point-min)))))
           (ostart (overlay-start whitespace-point--used)))
       (cond
        ((not refontify)