Wenn Sie einen Hauptmodus schreiben, ist es oft nützlich zu wissen, ob es sich um einen Punkt in einer Zeichenfolge handelt. 'Ist Punkt in einem Kommentar?'.
Die meisten Hauptmodi scheinen zu versuchen, die Programmiersprache zu analysieren. Zum Beispiel:
python-syntax-content
Anrufesyntax-ppss
haskell-fill-paragraph
Anrufesyntax-ppss
undre-search-forward
c-in-comment-line-prefix-p
bewegt Punkt herum und ruftlooking-at
sp-point-in-comment
ruft ansyntax-ppss
, prüft aber auch, ob es sich um ein Kommentar-Delimeter handelt
Dies funktioniert jedoch in einigen Fällen nicht. In Puffern im Organisationsmodus werden Kommentare in Quellblöcken von diesen Ansätzen nicht korrekt erkannt.
Es erscheint auch sinnlos, da im Puffer bereits hervorgehobene Kommentare angezeigt werden .
Stattdessen können Sie einfach die Gesichter an der folgenden Stelle untersuchen:
(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)))
Warum machen die Hauptmodi das nicht? Der Puffer ist bereits fontifiziert, daher würde ich erwarten, dass dieser schneller und robuster ist und weniger Code benötigt.
font-lock-mode
? (Nicht, dass ich denke, dass Sie sollten.)