Comment créer une table de syntaxe simple pour un mode majeur?


8

J'essaie de comprendre comment fonctionnent les tables de syntaxe, mais mon mode majeur minimal ne met rien en évidence.

J'ai écrit l'élisp suivant, qui est juste censé mettre en évidence les commentaires:

(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)

Cependant, étant donné un fichier:

# foo
# bar
baz

Si j'active mon mode principal avec M-x my-yaml-mode, je n'obtiens aucun surlignage. C-u C-x =montre qu'aucun visage n'a été appliqué.


Insère-t-il M-;correctement un #? Si oui, la table de syntaxe est appliquée. Vous devriez examiner les spécifications de verrouillage de police pour obtenir la coloration syntaxique.
T. Verron

1
M-;est lié à comment-dwimnewcomment.el, qui utilise comment-startplutôt que la table de syntaxe. AIUI.
Wilfred Hughes

Hm, en effet, désolé. Au lieu de cela, vous pouvez placer le point sur a #et appuyer sur C-u C-x =, la sortie doit contenir la ligne syntax: < which means: comment.
T. Verron

C'est vrai! Donc, si ma table de syntaxe est correcte et est appliquée, pourquoi n'y a-t-il pas de mise en évidence?
Wilfred Hughes

1
Après avoir testé avec votre code, il s'agit simplement d'activer font-lock-modedans votre my-yaml-modetampon. :)
T. Verron

Réponses:


8

C'est correct, mais ce n'est pas refontifié juste parce que vous changez de mode majeur.

Activez votre mode principal et placez votre curseur dans le commentaire, puis exécutez-le M-x eval-expression (syntax-ppss-context (syntax-ppss (point))), il devrait générer un commentaire et vous verrez que la table de syntaxe est correctement configurée.

Une solution simple serait d'appeler (font-lock-fontify-buffer)lors de l'activation de votre mode.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.