Emacs: set и toggle show-trailing-whitespace
Два связанных вопроса с использованием emacs 23.3.1 на linux:
Во-первых, почему я не могу установить значение show-trailing-whitespace
на t
с помощью setq
, как показано ниже? Когда я помещаю версию setq
в мой .emacs
, она не меняет значение (как видно из функциональности и с помощью 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))
Во-вторых, как я могу переключить значение между t
и nil
? Я думал, что этот ответ был именно тем, что мне нужно, но в этом случае он не работает. Я использовал:
(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))
Когда я нажал M-ow
, я получаю сообщение об ошибке Wront type argument: number-or-marker-p, nil
. Любые идеи?
Ответы
Ответ 1
Сначала: как describe-variable
сообщает, что show-trailing-whitespace
- это буферная переменная. Это означает, что выполнение setq
только устанавливает его для текущего буфера и, следовательно, не имеет эффекта, когда выполняется в файле .emacs
. Чтобы иметь что-то похожее на то, что вам нужно, используйте setq-default
вместо setq
. Это будет работать для всех буферов.
Во-вторых: для переключения вы можете использовать setq
, если вы хотите переключать буфер на буфер. Ошибка, которую вы получаете, заключается в том, что вы используете =
, который должен проверить, являются ли два числа равными. Переключение выполняется более чистым способом, используя not
. Как замечание, команда (redraw-display)
, кажется, ничего не делает.
(defun tf-toggle-show-trailing-whitespace ()
"Toggle show-trailing-whitespace between t and nil"
(interactive)
(setq show-trailing-whitespace (not show-trailing-whitespace)))
Ответ 2
write (eq show-trailing-whitespace nil)
или короче - но наоборот -
(если show-trailing-whitespace