Bagaimana cara membuat tabel sintaksis sederhana untuk mode utama?

8

Saya mencoba memahami bagaimana tabel sintaks bekerja, tetapi mode mayor minimal saya tidak menyoroti apa pun.

Saya telah menulis elisp berikut, yang seharusnya menyoroti komentar:

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

Namun, diberikan file:

# foo
# bar
baz

Jika saya mengaktifkan mode-utama saya dengan M-x my-yaml-mode, saya tidak mendapatkan sorotan. C-u C-x =menunjukkan bahwa tidak ada wajah yang telah diterapkan.

Wilfred Hughes
sumber
Apakah M-;memasukkan dengan benar #? Jika ya, tabel sintaks diterapkan. Anda harus melihat spesifikasi pengunci font untuk mendapatkan penyorotan sintaksis.
T. Verron
1
M-;terikat comment-dwimdari newcomment.el, yang menggunakan comment-startalih-alih tabel sintaks. AIUI.
Wilfred Hughes
Hm, memang, maaf. Sebagai gantinya, Anda dapat menempatkan titik pada a #dan tekan C-u C-x =, output harus berisi garis syntax: < which means: comment.
T. Verron
Memang benar! Jadi jika tabel sintaks saya benar dan sedang diterapkan, mengapa tidak ada penyorotan?
Wilfred Hughes
1
Setelah menguji dengan kode Anda, itu hanya masalah menyalakan buffer font-lock-modeAnda my-yaml-mode. :)
T. Verron

Jawaban:

8

Itu benar, tetapi tidak dire-kualifikasi hanya karena Anda mengubah mode utama.

Aktifkan mode utama Anda dan letakkan kursor Anda di komentar lalu jalankan M-x eval-expression (syntax-ppss-context (syntax-ppss (point))), itu akan menghasilkan komentar dan Anda akan melihat bahwa tabel sintaksis diatur dengan benar.

Perbaikan sederhana adalah dengan menelepon (font-lock-fontify-buffer)saat mengaktifkan mode Anda.

Jordon Biondo
sumber