Это дополнительный вопрос к добавлению подсветки синтаксиса для раздела комментариев в Emacs.

У меня есть следующее определение лица, адаптированное из определения font-lock-warning-face в font-lock.el:

; (defface font-lock-warning-face
;   '((t :inherit error))
;   "Font Lock mode face used to highlight warnings."
;   :group 'font-lock-faces)
(defface my-code-section-face
  '((t :inherit font-lock-warning-face))
  "Face used for comment guards")

(defun add-c-syntax-highlighting ()
  (font-lock-add-keywords nil '(
    ("//\\-+" 0 (if t font-lock-warning-face
                  my-code-section-face) prepend))))

Когда я использую t (font-lock-warning-face), функция работает. Когда nil (использовать my-code-section-face), это не так. Я могу только предположить, что это проблема с тем, как я определяю лицо, но я не могу найти проблему. (Использование ` против ' дает эффективной разницы.)

1 ответ1

1

Похоже, мне нужно процитировать prepend: 'prepend и переместить его за пределы списка:

(font-lock-add-keywords nil '(("//\\-+" 0 whatever)) 'prepend)

А для тестирования, по крайней мере, избавьтесь от всего, что whatever - просто используйте что-то вроде (0 'my-code-section-face t) .

Так что-то вроде этого:

(font-lock-add-keywords nil '(("//\\-+" (0 'my-code-section-face t))) 'prepend)

И вы всегда можете увидеть, работает ли ваш defface так, как вы хотите, используя M-x list-faces-display .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .