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.
elisp
major-mode
syntax-highlighting
Wilfred Hughes
fonte
fonte
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.M-;
está vinculado acomment-dwim
partir de newcomment.el, que usacomment-start
em vez da tabela de sintaxe. AIUI.#
pressionarC-u C-x =
, a saída deve conter a linhasyntax: < which means: comment
.font-lock-mode
seumy-yaml-mode
buffer.:)
Respostas:
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.fonte