Menentukan wajah untuk sorotan sintaks di Emacs

0

Ini adalah pertanyaan lanjutan untuk Menambahkan sorotan sintaks untuk bagian komentar di Emacs .

Saya memiliki definisi wajah berikut yang diadaptasi dari definisi font-lock-warning-facedalam font-lock.el:

; (defface font-lock-warning-face
;   '((t :inherit error))
;   "Font Lock mode face used to highlight warnings."
;   :group 'font-lock-faces)
(defface my-code-section-face
  '((t :inherit font-lock-warning-face))
  "Face used for comment guards")

(defun add-c-syntax-highlighting ()
  (font-lock-add-keywords nil '(
    ("//\\-+" 0 (if t font-lock-warning-face
                  my-code-section-face) prepend))))

Saat saya menggunakan t( font-lock-warning-face), fungsinya bekerja. Kapan nil(untuk digunakan my-code-section-face), itu tidak. Saya hanya bisa berasumsi bahwa ini masalah dengan bagaimana saya mendefinisikan wajah , tetapi saya tidak dapat menemukan masalah. (Menggunakan `vs. 'tidak membuat perbedaan yang efektif.)

Sean Allred
sumber
Bahkan, saya hanya memperhatikan bahwa ketika menggunakan nil, semua kunci font gagal.
Sean Allred
@Downvoter, minta sopan santun untuk meninggalkan saran tentang bagaimana membuat pertanyaan ini lebih baik. Ini adalah topik untuk situs ini.
Sean Allred
1
Saya bisa saja salah, tetapi biasanya satu kutipan menghambat evaluasi di dalam daftar, sedangkan backtick memungkinkan evaluasi - ketika menggunakan backtick, elemen-elemen di dalam daftar yang perlu dievaluasi secara normal diawali dengan koma. Saat menggunakan tag luas seperti syntax-highlighting, Anda pasti menjangkau audiens yang tidak terbiasa dengan Emacs.
hukum
@lawlist Bagus untuk tahu, terima kasih. Saya tidak berpikir itu akan berdampak pada kasus ini.
Sean Allred
@lawlist Yah, saya memang menyertakan tag [emacs] :( font-lockbukan salah satunya, seingat saya
Sean Allred

Jawaban:

1

Tampak bagi saya seperti Anda perlu untuk mengutip prepend: 'prepend, dan memindahkannya luar daftar:

(font-lock-add-keywords nil '(("//\\-+" 0 whatever)) 'prepend)

Dan untuk pengujian, setidaknya, singkirkan semua barang whatever- cukup gunakan sesuatu seperti (0 'my-code-section-face t).

Jadi sesuatu seperti ini:

(font-lock-add-keywords nil '(("//\\-+" (0 'my-code-section-face t))) 'prepend)

Dan Anda selalu dapat melihat apakah deffacekarya Anda seperti yang Anda inginkan, dengan menggunakan M-x list-faces-display.

Drew
sumber