Pisząc tryb główny, często warto wiedzieć, że „jest ciąg w ciągu?” „ma sens w komentarzu?”.
Wydaje się, że większość głównych trybów próbuje analizować język programowania. Na przykład:
python-syntax-content
połączeniasyntax-ppss
haskell-fill-paragraph
połączeniasyntax-ppss
ire-search-forward
c-in-comment-line-prefix-p
przesuwa punkt i dzwonilooking-at
sp-point-in-comment
wywołuje,syntax-ppss
ale sprawdza również, czy jest na ograniczniku komentarza
Jednak w niektórych przypadkach nie działa. W buforach w trybie organizacji komentarze w blokach źródłowych nie są poprawnie wykrywane przez te podejścia.
Wydaje się to również bezcelowe, ponieważ bufor pokazuje już podświetlone komentarze .
Zamiast tego możesz po prostu sprawdzić twarze w punkcie:
(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)))
Dlaczego główne tryby tego nie robią? Bufor jest już czcionki, więc spodziewałbym się, że będzie szybszy, bardziej niezawodny i wymaga mniej kodu.
font-lock-mode
? (Nie sądzę, że powinieneś.)