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-contentpanggilansyntax-ppsshaskell-fill-paragraphpanggilansyntax-ppssdanre-search-forwardc-in-comment-line-prefix-pbergerak menunjuk dan meneleponlooking-atsp-point-in-commentpanggilansyntax-ppsstetapi 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.)