Wie erstelle ich eine einfache Syntaxtabelle für einen Hauptmodus?

8

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.

Wilfred Hughes
quelle
Fügt ein M-;richtig ein #? Wenn ja, wird die Syntaxtabelle angewendet. Sie sollten sich die Spezifikationen für die Schriftsperre ansehen, um die Syntax hervorzuheben.
T. Verron
1
M-;ist an comment-dwimnewcomment.el gebunden , das comment-startanstelle der Syntaxtabelle verwendet . AIUI.
Wilfred Hughes
Hm, in der Tat, tut mir leid. Stattdessen können Sie den Punkt auf a setzen #und drücken C-u C-x =, die Ausgabe sollte die Linie enthalten syntax: < which means: comment.
T. Verron
In der Tat! Wenn meine Syntaxtabelle korrekt ist und angewendet wird, warum wird sie dann nicht hervorgehoben?
Wilfred Hughes
1
Nach dem Testen mit Ihrem Code müssen Sie lediglich font-lock-modeden my-yaml-modePuffer einschalten. :)
T. Verron

Antworten:

8

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 .

Jordon Biondo
quelle