Я должен дать частичный ответ, потому что это слишком сложно выяснить на месте, и я уже взорвал свой бюджет времени.
Лицо - это свойство кадра. Рамка может одновременно отображать несколько буферов. Режим - это свойство буфера. Вы спрашиваете, как изменить лицо на основе каждого режима. Объединив все это, кажется, что у вопроса не может быть единого полностью правильного ответа.
Вы можете приблизить желаемый ответ, если предположите, что данный кадр никогда не отображает более одного буфера. Вы можете на самом деле выполнить это с помощью чего-то подобного, но модифицировать, чтобы использовать специальные-display-regexps и набор регулярных выражений, которые соответствуют вашим именам буфера в режиме разметки.
(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))
И теперь для моего фактического (неполный) ответ ...
Лучше, хотя и более сложный подход будет инструктировать уценки-режим, чтобы использовать новое лицо для всех регионов, которые не являются уже назначена одна из встроенных граней. Вы можете создать новое лицо с копией и дать ему интересные свойства с помощью set-face- *.
Изменить значение font-lock-mode по умолчанию, чтобы переопределить функцию font-lock-fontify-region по умолчанию, как описано в блоке комментариев около строки 946 font-lock.el, которая начинается с «Функции Fontification».Вы, вероятно, можно использовать слегка измененный шрифт-блокировки по умолчанию-раскрасить-регион, который делает только один дополнительный шаг сразу же после того, как она делает:
(unless font-lock-keywords-only
(font-lock-fontify-syntactically-region beg end loudly))
Дополнительный шаг разбирает область, похожий на какой шрифт замок-fontify- синтаксическая область, разбивая регион на «интересные» субрегионы. Но на этот раз вы обнаружите субрегионы, у которых есть лицо по умолчанию, и вы помещаете текст-свойство в эти субрегионы на новое лицо, которое вы ранее создали.
В целом это похоже на то, что в вашем файле .emacs должно быть только несколько строк elisp, а также сделать копию font-lock-default-fontify-region, которая имеет только незначительный diff от оригинала (называть один новая функция), плюс сделать копию font-lock-fontify-syntactically-region и изменить его для выполнения ваших ставок (самая сложная часть).
На самом деле, если вы «после» посоветуете font-lock-fontify-syntactically-region, то вам, вероятно, даже не нужно изменять font-lock-defaults или font-lock-default-fontify-region.
Если есть переменная, которая управляет границами по умолчанию, вы можете локализовать ее для текущего буфера только в том крюке, который вызывается при открытии файла с уценкой. – jfs
Вопрос задается в общем виде, затем приводится конкретный пример, и ответы повторяются вокруг этого конкретного примера. Если вам действительно нужно «** Установить шрифт Emacs defaut font per-mode **», см. [Использование другого шрифта для каждого основного режима - Emacs Stack Exchange] (http://emacs.stackexchange.com/questions/3038/ using-a-different-font-for-each-major-mode/3042 # 3042) –