Під час написання основного режиму часто корисно знати, "чи є точка в рядку?" 'є пункт у коментарі?'.
Здається, більшість основних режимів намагаються проаналізувати мову програмування. Наприклад:
python-syntax-content
дзвінкиsyntax-ppss
haskell-fill-paragraph
дзвінкиsyntax-ppss
таre-search-forward
c-in-comment-line-prefix-p
рухається точка навколо і дзвонитьlooking-at
sp-point-in-comment
дзвінки,syntax-ppss
але також перевіряє, чи він знаходиться на калібрі
Однак у деяких випадках це не працює. У буферах в режимі org коментарі у вихідних блоках за допомогою цих підходів неправильно виявляються.
Це також здається безглуздим, оскільки в буфері вже видно виділені коментарі .
Натомість ви можете просто оглянути обличчя в точці:
(defun wh--get-faces (pos)
"Get all the font faces at POS."
(remq nil
(list
(get-char-property pos 'read-face-name)
(get-char-property pos 'face)
(plist-get (text-properties-at pos) 'face))))
(defun wh-string-p (pos)
"Return non-nil if POS is inside a string."
(memq 'font-lock-string-face (wh--get-faces pos)))
Чому основні режими цього не роблять? Буфер вже зафіксований, тому я б очікував, що це буде швидше, надійніше та потребує меншого коду.
font-lock-mode
? (Не те, що я думаю, що слід.)