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

Цель: я хочу иметь 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))

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

Другие вопросы по тегам