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-contentpołączeniasyntax-ppsshaskell-fill-paragraphpołączeniasyntax-ppssire-search-forwardc-in-comment-line-prefix-pprzesuwa punkt i dzwonilooking-atsp-point-in-commentwywołuje,syntax-ppssale 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ś.)