Come faccio a creare una semplice tabella di sintassi per una modalità principale?


8

Sto cercando di capire come funzionano le tabelle di sintassi, ma la mia modalità principale minima non evidenzia nulla.

Ho scritto il seguente elisp, che dovrebbe solo evidenziare i commenti:

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

Tuttavia, dato un file:

# foo
# bar
baz

Se attivo la mia modalità principale con M-x my-yaml-mode, non ricevo alcuna evidenziazione. C-u C-x =mostra che non sono stati applicati volti.


Fa M-;in modo corretto inserire una #? In caso affermativo, viene applicata la tabella della sintassi. È necessario esaminare le specifiche di blocco dei caratteri per ottenere l'evidenziazione della sintassi.
T. Verron,

1
M-;è associato a comment-dwimnewcomment.el, che utilizza comment-startanziché la tabella di sintassi. AIUI.
Wilfred Hughes,

Hm, davvero, scusa. Invece, puoi posizionare il punto su a #e premere C-u C-x =, l'output dovrebbe contenere la linea syntax: < which means: comment.
T. Verron,

Anzi lo fa! Quindi, se la mia tabella di sintassi è corretta e viene applicata, perché non c'è nessuna evidenziazione?
Wilfred Hughes,

1
Dopo aver testato con il codice, è semplicemente una questione di attivazione font-lock-modenel my-yaml-modebuffer. :)
T. Verron,

Risposte:


8

È corretto, ma non viene riformulato solo perché si modificano le modalità principali.

Abilita la modalità principale e posiziona il cursore nel commento, quindi esegui M-x eval-expression (syntax-ppss-context (syntax-ppss (point))), dovrebbe restituire un commento e vedrai che la tabella di sintassi è impostata correttamente.

Una semplice soluzione sarebbe quella di chiamare (font-lock-fontify-buffer)quando si abilita la modalità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.