Я хотел бы выделить код с различными лицами в второстепенном режиме.
Вот скриншот, который близок к тому, что я хочу:
Одна вещь , которую я пропускаю это имеющий свой комментарий символов #
в
font-lock-comment-face
. Идея состоит в том, чтобы комментарии, которые «принадлежат» к схеме, выделены в виде простого текста, чтобы их было легче читать. Имея регулярные комментарии со своим обычно менее заметным лицом.
Вот код, который я использовал:
(setq-local font-lock-defaults
'(python-font-lock-keywords
nil nil nil nil
(font-lock-syntactic-face-function
. lpy-font-lock-syntactic-face-function)))
(defun lpy-font-lock-syntactic-face-function (state)
"Return syntactic face given STATE.
Returns 'defalt face for comments that belong to an outline."
(cond ((nth 3 state)
(if (python-info-docstring-p state)
font-lock-doc-face
font-lock-string-face))
((save-excursion
(while (and (> (point) (point-min))
(progn (move-beginning-of-line 0)
(eq (char-after) ?\#))))
(forward-line 1)
(looking-at "#\\*+ "))
'default)
(t
font-lock-comment-face)))
Дело в том, что я понятия не имею об интерфейсе, на котором
font-lock-syntactic-face-function
работает, кроме того, что он получает сложную структуру данных state
, имеет другое состояние точки и возвращает лицо.
Может ли кто-нибудь объяснить этот интерфейс? Возможно, есть лучший?
источник