¿Cómo creo una tabla de sintaxis simple para un modo principal?

8

Estoy tratando de entender cómo funcionan las tablas de sintaxis, pero mi modo mayor mínimo no resalta nada.

He escrito el siguiente elisp, que se supone que resalta los comentarios:

(defconst my-yaml-mode-syntax-table
  (let ((table (make-syntax-table)))
    (modify-syntax-entry ?# "<" table)
    (modify-syntax-entry ?\n ">" table)
    table)
  "Syntax table for `my-yaml-mode'.")

(define-derived-mode my-yaml-mode fundamental-mode "My YAML"
  "testing"
  :syntax-table my-yaml-mode-syntax-table)

Sin embargo, dado un archivo:

# foo
# bar
baz

Si activo mi modo mayor con M-x my-yaml-mode, no obtengo ningún resaltado. C-u C-x =muestra que no se han aplicado caras.

Wilfred Hughes
fuente
¿ M-;Inserta correctamente un #? En caso afirmativo, se aplica la tabla de sintaxis. Debe buscar en las especificaciones de bloqueo de fuente para obtener resaltado de sintaxis.
T. Verron
1
M-;está vinculado a comment-dwimnewcomment.el, que utiliza en comment-startlugar de la tabla de sintaxis. AIUI
Wilfred Hughes
Hm, de verdad, lo siento. En su lugar, puede colocar el punto en ay #presionar C-u C-x =, la salida debe contener la línea syntax: < which means: comment.
T. Verron
De hecho lo hace! Entonces, si mi tabla de sintaxis es correcta y se está aplicando, ¿por qué no hay ningún resaltado?
Wilfred Hughes
1
Después de probar con su código, es simplemente una cuestión de encender font-lock-modesu my-yaml-modebúfer. :)
T. Verron

Respuestas:

8

Es correcto, pero no se refontifica solo porque cambias los modos principales.

Habilite su modo principal y coloque el cursor en el comentario y luego ejecute M-x eval-expression (syntax-ppss-context (syntax-ppss (point))), debería producir un comentario y verá que la tabla de sintaxis está configurada correctamente.

Una solución simple sería llamar (font-lock-fontify-buffer)al habilitar su modo.

Jordon Biondo
fuente