编写主模式时,知道“字符串中是否指向点?”通常很有用。“在评论中有意思吗?”。
大多数主要模式似乎都试图解析编程语言。例如:
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
但还会检查是否在评论分隔符上
但是,这在某些情况下不起作用。在组织模式缓冲区中,这些方法无法正确检测源块中的注释。
这似乎也毫无意义,因为缓冲区已经显示了高亮的注释。
取而代之,您可以简单地检查以下点的人脸:
(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
怎么办?(不是我认为您应该这样做。)