Quando si scrive una modalità principale, è spesso utile sapere "è il punto in una stringa?" 'è il punto in un commento?'.
La maggior parte delle modalità principali sembra tentare di analizzare il linguaggio di programmazione. Per esempio:
python-syntax-content
chiamatesyntax-ppss
haskell-fill-paragraph
chiamatesyntax-ppss
ere-search-forward
c-in-comment-line-prefix-p
si sposta in giro e chiamalooking-at
sp-point-in-comment
chiamasyntax-ppss
ma controlla anche se si trova su un delimitatore di commenti
Tuttavia, questo non funziona in alcuni casi. Nei buffer in modalità org, questi commenti non rilevano correttamente i commenti nei blocchi di origine.
Sembra anche inutile, poiché il buffer sta già mostrando i commenti evidenziati .
Invece, potresti semplicemente ispezionare le facce al punto:
(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)))
Perché le modalità principali non lo fanno? Il buffer è già disponibile, quindi mi aspetto che questo sia più veloce, più robusto e richieda meno codice.
font-lock-mode
? (Non che penso che dovresti.)