]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix turning off whitespace-mode
authorNick Helm <nick@tenpoint.co.nz>
Fri, 19 May 2017 12:20:59 +0000 (15:20 +0300)
committerEli Zaretskii <eliz@gnu.org>
Fri, 19 May 2017 12:20:59 +0000 (15:20 +0300)
* lisp/whitespace.el (whitespace-display-char-on): Correct the way
the original buffer-display-table is saved and restored when
global-whitespace-mode is active.  (Bug#26892)

* test/lisp/whitespace-tests.el
(whitespace-tests-whitespace-mode-on): New function.
(whitespace-tests-display-tables): New test.

Copyright-paperwork-exempt: yes

lisp/whitespace.el
test/lisp/whitespace-tests.el

index 6aca47cd43753c4cece31cace2e2c8e60f2d50bf..c6d5b16caebbb3fa853f72250c11d10a550bba1c 100644 (file)
@@ -2373,9 +2373,10 @@ Also refontify when necessary."
     (let (vecs vec)
       ;; Remember whether a buffer has a local display table.
       (unless whitespace-display-table-was-local
-       (setq whitespace-display-table-was-local t
-             whitespace-display-table
-             (copy-sequence buffer-display-table))
+       (setq whitespace-display-table-was-local t)
+        (unless (or whitespace-mode global-whitespace-mode)
+             (setq whitespace-display-table
+             (copy-sequence buffer-display-table)))
        ;; Assure `buffer-display-table' is unique
        ;; when two or more windows are visible.
        (setq buffer-display-table
index 99cc3c4ec07f50f0a249c1eccdab19a4ad58b142..1e455352f2ef04617c130b0a90976470855a5bd1 100644 (file)
     (should (equal (whitespace-tests--cleanup-string "a  \n\t \n\n")
                    "a  \n"))))
 
+
+;; We cannot call whitespace-mode because it will do nothing in batch
+;; mode.  So we call its innards instead.
+(defun whitespace-tests-whitespace-mode-on ()
+  "Turn whitespace-mode on even in batch mode."
+  (whitespace-turn-on)
+  (whitespace-action-when-on)
+  (setq whitespace-mode t))
+
+(ert-deftest whitespace-tests-display-tables ()
+  "Test whitespace stores and restores the buffer display table - bug26892."
+  (with-temp-buffer
+    (whitespace-mode -1) ; turn off in case global ws mode is active
+    (let ((whitespace-style '(space-mark tab-mark newline-mark))
+          (whitespace-display-mappings '((space-mark   32 [183] [46])
+                                         (space-mark  160 [164] [95])
+                                         (newline-mark 10 [36 10])
+                                         (tab-mark      9 [187 9] [92 9])))
+          (buffer-display-table nil))
+      ;test the display table actually changes
+      (should-not (equal nil
+                         (progn (whitespace-tests-whitespace-mode-on)
+                                buffer-display-table)))
+      ;test the display table restores correctly
+      (should (equal nil
+                     (progn (whitespace-turn-off)
+                            buffer-display-table)))
+      ;test the stored display table is preserved
+      (should (equal nil
+                     (progn (whitespace-tests-whitespace-mode-on)
+                            (whitespace-tests-whitespace-mode-on)
+                            (whitespace-turn-off)
+                            buffer-display-table))))))
+
 (provide 'whitespace-tests)
 
 ;;; whitespace-tests.el ends here