メジャーモードの単純な構文テーブルを作成するにはどうすればよいですか?


8

構文テーブルのしくみを理解しようとしていますが、最小限のメジャーモードでは何も強調されません。

私は次のelispを書きました。

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

ただし、ファイルが与えられた場合:

# foo
# bar
baz

でメジャーモードをアクティブにしてM-x my-yaml-modeも、強調表示されません。C-u C-x =は、面が適用されていないことを示しています。


M-;正しく挿入#?はいの場合、構文テーブルが適用されます。フォントロックの仕様を調べて、構文を強調表示する必要があります。
T.ヴァーロン2014

1
M-;は構文テーブルcomment-dwimではcomment-startなくを使用するnewcomment.elからバインドされます。AIUI。
Wilfred Hughes 14

うーん、確かに、ごめんなさい。代わりに、ポイントをaに置いて#を押すC-u C-x =と、出力に線が含まれますsyntax: < which means: comment
T.ヴァーロン2014

確かにそうです!では、構文テーブルが正しく適用されている場合、なぜ強調表示がないのですか?
Wilfred Hughes 14

1
コードでテストした後font-lock-modeは、my-yaml-modeバッファをオンにするだけです。:)
T.ヴァーロン2014

回答:


8

正しいですが、メジャーモードを変更したからといって、フォントが変更されることはありません。

メジャーモードを有効にして、カーソルをコメントに入れてを実行すると M-x eval-expression (syntax-ppss-context (syntax-ppss (point)))、「コメント」が表示され、構文テーブルが正しく設定されていることがわかります。

簡単な修正は(font-lock-fontify-buffer)、モードを有効にするときに呼び出すことです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.