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é.
elisp
major-mode
syntax-highlighting
Wilfred Hughes
la source
la source
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.M-;
est lié àcomment-dwim
newcomment.el, qui utilisecomment-start
plutôt que la table de syntaxe. AIUI.#
et appuyer surC-u C-x =
, la sortie doit contenir la lignesyntax: < which means: comment
.font-lock-mode
dans votremy-yaml-mode
tampon.:)
Réponses:
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.la source