Cara menyesuaikan sorotan sintaks hanya untuk mode yang diberikan

10

Saya ingin mengubah penyorotan sintaks di saya lua-mode.eltanpa mempengaruhi mode utama lainnya.

Hanya sebagai contoh, saya ingin "kata kunci" seperti if, then, elseberada di jenis huruf tebal dan biru ketika di lua-mode(bukan merah muda default) tanpa gaya penyorotan yang sama saat mengedit .texfile tersebut dengan AUCTeX.

Sejauh ini saya telah mencoba untuk memasukkan kode berikut di saya .emacsdan kemudian juga di saya lua-mode.el:

(custom-set-faces
  '(font-lock-builtin-face ((t (:foreground "maroon3"))))
  '(font-lock-comment-face ((t (:foreground "green4"))))
  '(font-lock-keyword-face ((t (:foreground "dark blue" :weight bold))))
  '(font-lock-string-face ((t (:foreground "dark cyan")))))

tapi dengan cara ini saya mendapatkan sorotan sintaks yang sama untuk setiap mode yang saya gunakan.

Pertanyaan ini mungkin terkait: Ubah penyorotan sintaksis tanpa mengubah mode utama?

Apakah ada (mudah-mudahan sederhana dan umum) cara untuk melakukan ini?

Dermaga Paolo
sumber

Jawaban:

8

Wajah bersifat global sehingga mengubah atributnya di mana saja mengubahnya di mana saja, seperti yang Anda perhatikan. Untuk mengubahnya secara lokal, buat salinan wajah, ubah atribut dalam salinan dan kemudian gunakan kait mode untuk secara lokal mengatur wajah lama ke salinan berdasarkan per buffer. Sampel di bawah ini font-lock-comment-faceberfungsi untuk itu , tetapi mantra yang sama akan berlaku untuk semua wajah.

(make-variable-buffer-local 'font-lock-comment-face)
(copy-face 'font-lock-comment-face 'lua-comment-face)
(set-face-foreground 'lua-comment-face "green4")

(add-hook 'lua-mode-hook
          (lambda ()
            (setq font-lock-comment-face 'lua-comment-face)            
            ))
erikstokes
sumber