Я должен дать частичный ответ, потому что это слишком сложно, чтобы разобраться на месте, и я уже испортил свой бюджет времени.
Face - это свойство кадра. Кадр может отображать несколько буферов одновременно. Режим является буферным свойством. Вы спрашиваете, как изменить лицо в зависимости от режима. Объединяя все это, кажется, что вопрос не может иметь ни одного полностью правильного ответа.
Вы можете приблизить желаемый ответ, если предположите, что в данном кадре никогда не будет отображаться более одного буфера. На самом деле вы можете сделать это с помощью чего-то подобного, но изменив его, чтобы использовать специальные-регулярные выражения и набор регулярных выражений, которые соответствуют вашим именам буферов в режиме уценки.
(append special-display-buffer-names
'("*VC-log*"
"*Help*"
("*Completions*"
(height . 25)
(font . "8x13"))))
Однако, это, вероятно, не то, что вы хотите. Похоже, ваш вопрос подразумевает изменение свойств лица одного кадра.
Опять же, предполагая, что кадр никогда не будет отображать более одного буфера за раз, вы можете попробовать рекомендовать переключение в буфер. Но это может быть не достаточно низкий уровень и он может быть слишком медленным. (Непроверенные)
(defadvice switch-to-buffer (after switch-to-buffer activate compile)
"change the frame's default face after switch-to-buffer"
(doSomethingToChangePropertiesOfDefaultFace))
А теперь мой фактический (неполный) ответ ...
Более лучший, хотя и более сложный, подход дал бы указание режиму уценки использовать новое лицо для всех регионов, которым еще не назначена одна из встроенных поверхностей. Вы можете создать новое лицо с помощью copy-face и придать ему интересные свойства с помощью set-face- *.
Измените font-lock-defaults в markdown-mode, чтобы переопределить функцию font-lock-fontify-region-default по умолчанию, как описано в блоке комментариев рядом со строкой 946 файла font-lock.el, который начинается "Функции Fontification". Вы, вероятно, можете использовать очень немного измененный font-lock-default-fontify-region, который сразу после этого делает только один дополнительный шаг:
(unless font-lock-keywords-only
(font-lock-fontify-syntactically-region beg end loudly))
Дополнительный шаг анализирует регион, аналогичный тому, что делает font-lock-fontify-syntaxically-region, разбивая область на «интересные» подрегионы. Но на этот раз вы найдете субрегионы с гранью по умолчанию и поместите свойство text для этих субрегионов на новую грань, которую вы ранее создали.
Во всем этом создается впечатление, что в вашем файле .emacs должна быть всего пара строк elisp, плюс сделайте копию font-lock-default-fontify-region, которая имеет только незначительный diff из оригинала (вызовите один новый функция), а также сделайте копию font-lock-fontify-syntaxically-region и измените ее для выполнения ваших ставок (самая сложная часть).
На самом деле, если вы «после» посоветуете font-lock-fontify-syntaxically-region, то вам, вероятно, даже не нужно изменять font-lock-defaults или font-lock-default-fontify-region.