При написании основного режима часто полезно знать, «находится ли точка в строке?» 'это точка в комментарии?'
Большинство основных режимов, кажется, пытаются разобрать язык программирования. Например:
python-syntax-contentзвонкиsyntax-ppsshaskell-fill-paragraphзвонкиsyntax-ppssиre-search-forwardc-in-comment-line-prefix-pперемещает точку и звонитlooking-atsp-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? (Не то, что я думаю, что вы должны.)