Al escribir un modo principal, a menudo es útil saber '¿es un punto en una cadena?' 'es punto en un comentario?'.
La mayoría de los modos principales parecen intentar analizar el lenguaje de programación. Por ejemplo:
python-syntax-content
llamadassyntax-ppss
haskell-fill-paragraph
llamadassyntax-ppss
yre-search-forward
c-in-comment-line-prefix-p
mueve punto y llamalooking-at
sp-point-in-comment
llamasyntax-ppss
pero también comprueba si está en un delímetro de comentarios
Sin embargo, esto no funciona en algunos casos. En las memorias intermedias del modo org, estos enfoques no detectan correctamente los comentarios en los bloques fuente.
También parece inútil, ya que el búfer ya muestra comentarios resaltados .
En cambio, simplemente puede inspeccionar las caras en el 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)))
¿Por qué los modos principales no hacen esto? El búfer ya está fontificado, por lo que espero que sea más rápido, más robusto y requiera menos código.
font-lock-mode
? (No es que piense que