]> git.eshelyaron.com Git - emacs.git/commitdiff
Make whitespace-mode highlight missing newlines at the end of buffers
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 7 Aug 2020 07:28:14 +0000 (09:28 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 7 Aug 2020 07:28:14 +0000 (09:28 +0200)
* lisp/whitespace.el (whitespace-missing-newline-at-eof): New face
(bug#34952).
(whitespace-report-region): Add a test for
end-of-buffer-without-newline.
(whitespace-color-on): Ditto.

* doc/emacs/display.texi (Useless Whitespace): Document it.

doc/emacs/display.texi
etc/NEWS
lisp/whitespace.el

index e96e43b377df86b659e4c508894c9fbe909de0d0..5778d95b4d42b9b6efafd451446bee2db4e03857 100644 (file)
@@ -1334,6 +1334,10 @@ customize the variable @code{whitespace-line-column}.
 @item newline
 Highlight newlines.
 
+@item missing-newline-at-eof
+Highlight the final character in a buffer unless it's a newline
+character.
+
 @item empty
 Highlight empty lines at the beginning and/or end of the buffer.
 
index 81d07c9f32591ae1ad31fb80ba0f999c355658f2..ff3aa8445a691623e71cc0f4ed9a804e90f72d95 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -451,6 +451,13 @@ to substitute spaces in regexp search.
 *** The default value of 'hi-lock-highlight-range' was enlarged.
 The new default value is 2000000 (2 megabytes).
 
+** Whitespace mode
+
+*** A new style has been added: 'missing-newline-at-eof'
+If present in 'whitespace-style' (and it is now by default), the final
+character in the buffer will be highlighted unless it's a newline
+character.
+
 ** Texinfo
 
 ---
index 47434bf3d2ef850d25a8a1746dee8d037e5e72b6..fb5f28c0029f43e81835db9a6dfa3944f1c58a21 100644 (file)
   '(face
     tabs spaces trailing lines space-before-tab newline
     indentation empty space-after-tab
-    space-mark tab-mark newline-mark)
+    space-mark tab-mark newline-mark
+    missing-newline-at-eof)
   "Specify which kind of blank is visualized.
 
 It's a list containing some or all of the following values:
@@ -326,6 +327,11 @@ It's a list containing some or all of the following values:
                        It has effect only if `face' (see above)
                        is present in `whitespace-style'.
 
+   missing-newline-at-eof Missing newline at the end of the file is
+                        visualized via faces.
+                       It has effect only if `face' (see above)
+                       is present in `whitespace-style'.
+
    empty               empty lines at beginning and/or end of buffer
                        are visualized via faces.
                        It has effect only if `face' (see above)
@@ -586,6 +592,10 @@ line.  Used when `whitespace-style' includes the value `indentation'.")
   "Face used to visualize big indentation."
   :group 'whitespace)
 
+(defface whitespace-missing-newline-at-eof
+  '((((class mono)) :inverse-video t :weight bold :underline t)
+    (t :background "red" :foreground "firebrick"))
+  "Face used to visualize missing newline at the end of the file.")
 
 (defvar whitespace-empty 'whitespace-empty
   "Symbol face used to visualize empty lines at beginning and/or end of buffer.
@@ -1700,6 +1710,8 @@ cleaning up these problems."
                           (whitespace-space-after-tab-regexp 'tab))
                          ((eq (car option) 'space-after-tab::space)
                           (whitespace-space-after-tab-regexp 'space))
+                         ((eq (car option) 'missing-newline-at-eof)
+                          "[^\n]\\'")
                          (t
                           (cdr option)))))
                    (when (re-search-forward regexp rend t)
@@ -2122,7 +2134,10 @@ resultant list will be returned."
                 ((memq 'space-after-tab::space whitespace-active-style)
                  ;; Show SPACEs after TAB (TABs).
                  (whitespace-space-after-tab-regexp 'space)))
-              1 whitespace-space-after-tab t)))))
+              1 whitespace-space-after-tab t)))
+       ,@(when (memq 'missing-newline-at-eof whitespace-active-style)
+           ;; Show missing newline.
+           `(("[^\n]\\'" 0 'whitespace-missing-newline-at-eof t)))))
     (font-lock-add-keywords nil whitespace-font-lock-keywords t)
     (font-lock-flush)))