Como crio uma tabela de sintaxe simples para um modo principal?

8

Estou tentando entender como as tabelas de sintaxe funcionam, mas meu modo principal mínimo não destaca nada.

Escrevi o seguinte elisp, que deve destacar os comentários:

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

No entanto, dado um arquivo:

# foo
# bar
baz

Se eu ativar meu modo principal com M-x my-yaml-mode, não recebo nenhum destaque. C-u C-x =mostra que nenhum rosto foi aplicado.

Wilfred Hughes
fonte
Insere M-;corretamente um #? Se sim, a tabela de sintaxe é aplicada. Você deve examinar as especificações de bloqueio de fonte para obter o destaque da sintaxe.
T. Verron
1
M-;está vinculado a comment-dwimpartir de newcomment.el, que usa comment-startem vez da tabela de sintaxe. AIUI.
Wilfred Hughes
Hum, desculpe. Em vez disso, você pode colocar o ponto em ae #pressionar C-u C-x =, a saída deve conter a linha syntax: < which means: comment.
T. Verron
De fato faz! Portanto, se minha tabela de sintaxe está correta e está sendo aplicada, por que não há realce?
Wilfred Hughes
1
Após testar com seu código, é simplesmente uma questão de ativar font-lock-modeseu my-yaml-modebuffer. :)
T. Verron

Respostas:

8

Está correto, mas não está sendo re-identificado apenas porque você altera os modos principais.

Ative seu modo principal e coloque o cursor no comentário e M-x eval-expression (syntax-ppss-context (syntax-ppss (point))), em seguida , execute ; ele deve render 'comment e você verá que a tabela de sintaxe está configurada corretamente.

Uma solução simples seria chamar (font-lock-fontify-buffer)ao ativar seu modo.

Jordon Biondo
fonte