Как изменить переменные для определенных буферов основного режима
Цель: я хочу иметь show-trailing-whitespace
включен для всех буферов, кроме нескольких. Исключения, создающие проблему: *Shell Command Output*
и его двоюродный брат *Async Shell Command*
,
у меня обычно есть show-trailing-whitespace
настроены на t
, Поэтому он активен во всех новых буферах.
Я также хотел бы отключить его для определенных буферов, в первую очередь среди них *Shell Command Output*
, Это создает проблему для меня:
- Выходной буфер не использует специальный режим; это все еще в
fundamental-mode
, Здесь нетfundamental-mode-hook
что я мог бы подключить эту настройку в. - Здесь
after-major-mode-change-hook
который запускается, когда основной режим изменяется наfundamental-mode
, но буфер запускается в этом режиме и поэтому этот хук не запускается. - Кажется, нет способа подключиться к
get-buffer-create
,
Я знаю я всегда могу advise
функция get-buffer-create
для этого конкретного примера, но я стараюсь избегать этого в максимально возможной степени.
Есть намеки?
2 ответа
Возможно, вам лучше взглянуть на проблему с другой стороны, и устанавливать переменную только в тех режимах, в которых вы хотите видеть конечный пробел.
Но я думаю, у вас есть хорошая мысль: эти буферы вывода оболочки не должны использовать fundamental-mode
, Вероятно, пришло время M-x report-emacs-bug
В соответствии с принятым ответом, вот фрагмент кода, который позволяет подсвечивать конечные пробелы только для определенных режимов:
(setq-default show-trailing-whitespace nil)
(defun namespace/show-trailing-whitespace ()
"Highlight trailing whitespaces in this buffer."
(setq-local show-trailing-whitespace t))
(dolist (hook '(prog-mode-hook text-mode-hook))
(add-hook hook 'namespace/show-trailing-whitespace))
Этот фрагмент по существу взят из конфигурации Стива Перселла .