Saat menulis mode utama, sering kali berguna untuk mengetahui 'apakah ada gunanya?' 'Apakah poin dalam komentar?'.
Sebagian besar mode utama tampaknya mencoba menguraikan bahasa pemrograman. Sebagai contoh:
python-syntax-content
panggilansyntax-ppss
haskell-fill-paragraph
panggilansyntax-ppss
danre-search-forward
c-in-comment-line-prefix-p
bergerak menunjuk dan meneleponlooking-at
sp-point-in-comment
panggilansyntax-ppss
tetapi juga memeriksa apakah itu pada delimeter komentar
Namun, ini tidak berfungsi dalam beberapa kasus. Dalam buffer mode-org, komentar di blok sumber tidak terdeteksi dengan benar oleh pendekatan ini.
Tampaknya juga tidak ada gunanya, karena buffer sudah menunjukkan komentar yang disorot .
Sebagai gantinya, Anda cukup memeriksa wajah pada titik:
(defun wh--get-faces (pos)
"Get all the font faces at POS."
(remq nil
(list
(get-char-property pos 'read-face-name)
(get-char-property pos 'face)
(plist-get (text-properties-at pos) 'face))))
(defun wh-string-p (pos)
"Return non-nil if POS is inside a string."
(memq 'font-lock-string-face (wh--get-faces pos)))
Mengapa mode utama tidak melakukan ini? Buffer sudah diklasifikasi, jadi saya berharap ini lebih cepat, lebih kuat, dan membutuhkan lebih sedikit kode.
font-lock-mode
? (Bukannya saya pikir Anda harus.)