เมื่อเขียนโหมดหลักมันมักจะมีประโยชน์ที่จะรู้ว่า 'เป็นจุดในสตริง?' 'มีความคิดเห็นไหม?'
โหมดหลักส่วนใหญ่ดูเหมือนจะพยายามแยกวิเคราะห์ภาษาการเขียนโปรแกรม ตัวอย่างเช่น:
python-syntax-content
โทรsyntax-ppss
haskell-fill-paragraph
โทรsyntax-ppss
และre-search-forward
c-in-comment-line-prefix-p
ย้ายจุดรอบ ๆ และโทรlooking-at
sp-point-in-comment
โทรsyntax-ppss
แต่ยังตรวจสอบว่ามันอยู่ในขอบเขตความคิดเห็น
อย่างไรก็ตามวิธีนี้ใช้ไม่ได้ในบางกรณี ในบัฟเฟอร์โหมดองค์กรความคิดเห็นในบล็อกแหล่งตรวจไม่ถูกต้องโดยวิธีการเหล่านี้
นอกจากนี้ยังดูเหมือนไม่มีจุดหมายเนื่องจากบัฟเฟอร์แสดงความคิดเห็นแล้วที่เน้นอยู่
คุณสามารถตรวจสอบใบหน้าตรงจุดแทน:
(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)))
ทำไมโหมดหลักไม่ทำเช่นนี้? บัฟเฟอร์ได้รับการฟอนต์แล้วดังนั้นฉันคาดว่าสิ่งนี้จะเร็วขึ้นแข็งแกร่งขึ้นและต้องการรหัสน้อยลง
font-lock-mode
? (ไม่ว่าฉันคิดว่าคุณควร.)