Вопрос: Определение лиц для подсветки синтаксиса в Emacs


Это следующий вопрос: Добавление подсветки синтаксиса для раздела комментариев в 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), Это не. Я могу только предположить, что это проблема с как я определяю лицо, но я не могу найти проблему. (С помощью ` против ' не делает никакой эффективной разницы.)


0
2017-10-20 15:28


Источник


Фактически, я только заметил, что при использовании nil, все блокировка шрифта не работает. - Sean Allred
@Downvoter, имеют общую любезность, чтобы оставить предложение о том, как сделать этот вопрос лучше. Это по теме для этого сайта. - Sean Allred
Я мог ошибаться, но обычно одна цитата запрещает оценку внутри списка, тогда как обратная сторона позволяет оценивать - при использовании обратного вызова элементам внутри списка, которые должны быть оценены нормально, предшествует запятая. При использовании больших тегов, таких как syntax-highlighting, вы обязаны достичь аудитории, незнакомой с Emacs. - lawlist
@lawlist Хорошо знать, спасибо. Я не думаю, что это повлияло бы на это. - Sean Allred
@lawlist Ну, я включил тег [emacs] :(  font-lock не является одним из них, как я помню - Sean Allred


Ответы:


Мне кажется, что вам нужно процитировать 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,


1
2017-10-21 02:26