Ich versuche zu verstehen, wie Syntaxtabellen funktionieren, aber mein minimaler Hauptmodus hebt nichts hervor.
Ich habe das folgende Elisp geschrieben, das nur Kommentare hervorheben soll:
(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)
Allerdings gegeben eine Datei:
# foo
# bar
baz
Wenn ich meinen Hauptmodus mit aktiviere M-x my-yaml-mode
, bekomme ich keine Hervorhebung. C-u C-x =
zeigt, dass keine Gesichter angewendet wurden.
elisp
major-mode
syntax-highlighting
Wilfred Hughes
quelle
quelle
M-;
richtig ein#
? Wenn ja, wird die Syntaxtabelle angewendet. Sie sollten sich die Spezifikationen für die Schriftsperre ansehen, um die Syntax hervorzuheben.M-;
ist ancomment-dwim
newcomment.el gebunden , dascomment-start
anstelle der Syntaxtabelle verwendet . AIUI.#
und drückenC-u C-x =
, die Ausgabe sollte die Linie enthaltensyntax: < which means: comment
.font-lock-mode
denmy-yaml-mode
Puffer einschalten.:)
Antworten:
Es ist richtig, aber es wird nicht neu installiert, nur weil Sie die Hauptmodi ändern.
Aktivieren Sie Ihren Hauptmodus und setzen Sie den Cursor in den Kommentar. Führen M-x
eval-expression
(syntax-ppss-context (syntax-ppss (point)))
Sie ihn dann aus . Er sollte einen Kommentar ergeben, und Sie werden sehen, dass die Syntaxtabelle korrekt eingerichtet ist.Eine einfache Lösung wäre,
(font-lock-fontify-buffer)
beim Aktivieren Ihres Modus aufzurufen .quelle