font-lock-syntactic-face-function
is a regular variable from Font Lock, more specifically from the Syntactic Font Lock phase (emphasis mine):
Якщо ця змінна не є нульовою, вона повинна бути функцією для визначення того, яке обличчя використовувати для даного синтаксичного елемента (рядка або коментаря). Значення, як правило, встановлюється за допомогою елемента other-vars у font-lock-defaults.
Функція викликається одним аргументом, стан розбору в точці, що повертається parse-partial-sexp
, і має повернути обличчя . Значення за замовчуванням повертає font-lock-comment-face для коментарів і font-lock-string-face для рядків (див. Faces for Font Lock).
parse-partial-sexp
in turn returns a list which describes Emacs' current syntactic state, which is essentially the result of the application of the syntax table to the current buffer. The list is rather complex, hence I'll spare it here; you can see the complete reference in the docstring of parse-partial-sexp
. The purpose of this function is to change the face applied to a syntactic element under certain rules. The beginning of your function demonstrates this: If the current string is a docstring, use a different face for it.
Однак обличчя завжди стосується всього синтаксичного елемента, тобто цілого рядка чи коментаря. Цю функцію не можна виділити окремими частинами, а для цього слід дивитися лише на вказане стан
, наприклад, (стан python-info-docstring-p) у вашому коді. Не використовуйте точку на цьому місці; Я навіть не впевнений, що значення point
правильно визначено на цьому етапі блокування шрифтів.
Поклавши шматки разом, ви використовуєте неправильну функцію для своєї мети, тому ви не можете змусити її працювати.
Я не намагався виконати бажане виділення, але я думаю, що ви викопали шлях, занадто глибокий для своєї мети. Якщо я розумію правильні речі, вам просто хотілося б виділити контури у коментарі.
Якщо я правий, то вам потрібно спеціально створити font-lock-keywords
, а саме:
(my/find-outline-in-comment-p 0 'outline-face t)
де outline-face
- це обличчя, яке ви хочете застосувати до заголовка, t
означає перевизначити будь-яке попереднє блокування шрифтів у цьому місці, а мій/find-outline-in-comment
- функція збігу (див. розділ font-lock-defaults
), який приймає позицію і шукає перший контур у коментарі між (point)
і ця позиція, повертаючи экстенти контуру, які підсвічуються в даних збігу.
Щоб знайти контур, потрібно сканувати коментарі (за допомогою font-lock-comment-face
або синтаксичного стану), а потім використовує look-at
, щоб перевірити, чи коментар має контур.