При написании основного режима часто полезно знать, «находится ли точка в строке?» 'это точка в комментарии?'
Большинство основных режимов, кажется, пытаются разобрать язык программирования. Например:
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
? (Не то, что я думаю, что вы должны.)