Khi viết một chế độ chính, thường hữu ích khi biết 'là điểm trong một chuỗi?' "Là điểm trong một nhận xét?".
Hầu hết các chế độ chính dường như cố gắng phân tích ngôn ngữ lập trình. Ví dụ:
python-syntax-content
các cuộc gọisyntax-ppss
haskell-fill-paragraph
các cuộc gọisyntax-ppss
vàre-search-forward
c-in-comment-line-prefix-p
di chuyển điểm xung quanh và gọilooking-at
sp-point-in-comment
các cuộc gọisyntax-ppss
nhưng cũng kiểm tra xem nó có trên một bình luận
Tuy nhiên, điều này không hoạt động trong một số trường hợp. Trong bộ đệm chế độ org, các nhận xét trong các khối nguồn không được phát hiện chính xác bởi các phương pháp này.
Nó cũng có vẻ vô nghĩa, vì bộ đệm đã hiển thị các bình luận được tô sáng .
Thay vào đó, bạn có thể chỉ cần kiểm tra các khuôn mặt tại điểm:
(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)))
Tại sao các chế độ chính không làm điều này? Bộ đệm đã được phông chữ, vì vậy tôi hy vọng nó sẽ nhanh hơn, mạnh hơn và yêu cầu ít mã hơn.
font-lock-mode
thì sao? (Không phải tôi nghĩ bạn nên làm.)