Two related questions using emacs 23.3.1 on linux:
First, why can't I set the value of show-trailing-whitespace
to t
with setq
as shown below? When I put the setq
version in my .emacs
it does not change the value (as seen functionally and by using M-x describe-variable
).
(setq show-trailing-whitespace t) ; Does not change variable value or give error
(custom-set-variables ; Sets show-trailing-whitespace as expected
'(show-trailing-whitespace t))
Second, how can I toggle the value between t
and nil
? I thought that this answer was exactly what I needed, but it doesn't work in this case. I used:
(global-set-key "\M-ow" 'tf-toggle-show-trailing-whitespace)
(defun tf-toggle-show-trailing-whitespace ()
"Toggle show-trailing-whitespace between t and nil"
(interactive)
(setq show-trailing-whitespace (if (= show-trailing-whitespace nil) t nil))
(redraw-display))
When I hit M-ow
I get an error Wront type argument: number-or-marker-p, nil
. Any ideas?
First: as the describe-variable
tells you show-trailing-whitespace
is a buffer variable. This means that doing a setq
only sets it for the current buffer and therefore has no effect when done in the .emacs
file. To have something similar to what custom do you need to use setq-default
instead of setq
. This will work for all the buffers.
Second: For toggling you might want to use setq
if you want to toggle on a buffer per buffer basis. The error you get is that you use =
which is to test if two numbers are equal. A toggling is done in a cleaner fashion by using not
. As a side note, the (redraw-display)
command does not seem to be doing anything.
(defun tf-toggle-show-trailing-whitespace ()
"Toggle show-trailing-whitespace between t and nil"
(interactive)
(setq show-trailing-whitespace (not show-trailing-whitespace)))