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-contentchiamatesyntax-ppsshaskell-fill-paragraphchiamatesyntax-ppssere-search-forwardc-in-comment-line-prefix-psi sposta in giro e chiamalooking-atsp-point-in-commentchiamasyntax-ppssma 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.)