как изменить переменные для конкретных буферов основного режима

Цель: я хочу включить 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 для этого конкретного примера, но я стараюсь избегать этого, насколько это возможно.

Любые подсказки?


person Moritz Bunkus    schedule 16.10.2012    source источник


Ответы (2)


Возможно, вам лучше взглянуть на проблему с другой стороны и установить var только в тех режимах, где вы хотите видеть конечные пробелы.

Но я думаю, что вы правы: эти буферы вывода оболочки не должны использовать fundamental-mode. Вероятно, пришло время для M-x report-emacs-bug

person Stefan    schedule 16.10.2012
comment
Я знаю, но до сегодняшнего дня эти другие режимы были практически всеми режимами. Следовательно, я предпочитаю не добавлять кучу крючков. - person Moritz Bunkus; 16.10.2012
comment
prog-mode-hook и text-mode-hook должны охватывать большую часть этих режимов. - person Stefan; 16.10.2012
comment
Хороший вопрос, тем более, что я не знал об этом универсальном prog-mode-hook. Я думаю, что пойду по этому пути; определенно предпочтительнее использовать advise. Спасибо. - person Moritz Bunkus; 16.10.2012

В соответствии с принятым ответом, вот фрагмент кода, который позволяет подсвечивать конечные пробелы только для определенных режимов:

(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))

Этот фрагмент по существу взят из конфигурации Стива Перселла.

person Y. E.    schedule 01.03.2021