Установите поверхность шрифта Emacs defaut per-buffer/mode

Похоже, мне просто нужно было включить «Show Layout Decorations», но проблема рендеринга не исчезла проблема рендеринга

34
задан Drew 13 January 2014 в 05:14
поделиться

3 ответа

Как насчет чего-то вроде этого:

(add-hook 'markdown-mode-hook (lambda () (variable-pitch-mode t))

можно затем настроить эти variable-pitch поверхность, и другие поверхности в буфере наследуются этому вместо поверхности по умолчанию.

Read документы для buffer-face-mode для получения дополнительной информации настройки. (BufFace также используется для text-scale-increase и text-scale-decrease... очень полезный.)

31
ответ дан 27 November 2019 в 17:04
поделиться

Я должен дать частичный ответ, потому что это слишком сложно для выяснения на месте, и я уже унес свой бюджет времени.

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

можно приблизить желаемый ответ, если Вы предполагаете, что данный кадр никогда не будет отображать больше чем один буфер. Можно на самом деле выполнить это с чем-то вроде этого, но измененный для использования special-display-regexps и ряд 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))

И теперь для моего фактического (неполного) ответа...

А лучше, хотя более сложный, подход дал бы режиму скидки с цены команду использовать новую поверхность для всех регионов, которым уже не присваивают одна из встроенных поверхностей. Можно создать новую поверхность с поверхностью копии и дать ей интересные свойства с поверхностью набора -*.

Изменяют значения по умолчанию блокировки шрифта режима скидки с цены для переопределения default font-lock-fontify-region-function, как описано в блоке комментария около строки 946 из шрифта-lock.el, который начинается, "Fontification функционирует". Можно, вероятно, использовать очень немного измененный font-lock-default-fontify-region, который сразу делает всего один дополнительный шаг после того, как он делает:

  (unless font-lock-keywords-only
    (font-lock-fontify-syntactically-region beg end loudly))

дополнительный шаг анализирует регион, подобный тому, что font-lock-fontify-syntactically-region делает, повреждая регион в "интересные" подобласти. Но на этот раз Вы находите подобласти, которые имеют поверхность по умолчанию и Вас put-text-property те подобласти к новой поверхности, которую Вы ранее создали.

Во всем этом чувствует, что это должна быть только пара строк elisp в Вашем .emacs файле, плюс делают копию font-lock-default-fontify-region, который имеет только незначительную разность из оригинала (вызовите одну новую функцию), плюс делают копию font-lock-fontify-syntactically-region и изменяют его для выполнения указаний (самая трудная часть).

На самом деле, если Вы "после" советуете font-lock-fontify-syntactically-region затем, Вы, вероятно, не должны даже изменять значения по умолчанию блокировки шрифта или font-lock-default-fontify-region.

6
ответ дан 27 November 2019 в 17:04
поделиться

Это на самом деле просты, даже для EMACS версии 22.3.1 ...

Просто попробуйте следующее:

(progn 
  (set-buffer "your buffer name here")
  (overlay-put (make-overlay 0 (buffer-size)) 'face 'your-face))
2
ответ дан 27 November 2019 в 17:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: