วิธีการตรวจสอบว่าจุดอยู่ในพื้นที่แสดงความคิดเห็น?
วิธีการตรวจสอบว่าจุดอยู่ในพื้นที่แสดงความคิดเห็น?
คำตอบ:
ตรวจสอบที่สี่*ค่าในรายการที่ส่งกลับโดยsyntax-ppss
:
(nth 4 (syntax-ppss))
มันคือnil
ถ้าจุดอยู่นอกความคิดเห็นใด ๆt
ถ้าอยู่ในความคิดเห็นที่ไม่สามารถซ้อนได้หรือเป็นจำนวนเต็ม (ความลึกการซ้อน) ถ้าอยู่ในความคิดเห็นที่ซ้อนได้ ดู docstring สำหรับparse-partial-sexp
รายละเอียดเพิ่มเติม
* เป็นศูนย์
โปรดทราบว่าวิธีนี้ใช้ไม่ได้กับโหมด Org คุณควรใช้สิ่งนี้:
(defun in-comment-p ()
"Testy if cursor/point in a commented line?"
(save-excursion
(if (derived-mode-p 'org-mode)
(save-match-data (beginning-of-line) (looking-at "^[ \t]*#"))
(nth 4 (syntax-ppss)))))
parse-partial-sexp
สำหรับ
syntax-ppss
จะนำคุณไปparse-partial-sexp
ที่หลังซึ่งจะให้คำอธิบายของทุกสิ่งที่ส่งกลับโดยฟังก์ชั่นเหล่านี้ หวังว่าจะช่วยให้เริ่มต้น
ใช้แบบอักษรหน้านี่คือเคล็ดลับที่ฉันเรียนรู้จาก flyspell
ฉันลองsyntax-ppss
สองปีที่แล้วมันไม่ทำงานด้วยเหตุผลสองประการ:
ไม่ทำงานบนขอบของความคิดเห็น (ขีด จำกัด ของความคิดเห็น) ตัวอย่างเช่นสำหรับความคิดเห็นเช่น// this is comment
ในโหมด c ++ - หากคุณวางเคอร์เซอร์ไว้เหนือ/
อักขระผลลัพธ์ของการ(nth 4 (syntax-ppss))
เป็นศูนย์
ไม่ทำงานเลยในโหมดหลักเช่นโหมดเว็บ
นี่คือรหัสที่ฉันคัดลอกมาจาก flyspell:
(defun evilnc--in-comment-p (&optional pos)
"Test if character at POS is comment. If POS is nil, character at `(point)' is tested"
(interactive)
(unless pos (setq pos (point)))
(let* ((fontfaces (get-text-property pos 'face)))
(when (not (listp fontfaces))
(setf fontfaces (list fontfaces)))
(delq nil
(mapcar #'(lambda (f)
;; learn this trick from flyspell
(or (eq f 'font-lock-comment-face)
(eq f 'font-lock-comment-delimiter-face)))
fontfaces))))
โปรดทราบว่ารหัสนี้สามารถขยายได้เพื่อรองรับโหมดหลักใหม่โดยการใช้ฟอนต์ใบหน้าที่ตรงกัน
ฉันใช้เคล็ดลับนี้ประมาณสามปีโดยไม่ล้มเหลว นอกจากนี้เมื่อพิจารณาถึงการใช้ flyspell กันอย่างแพร่หลายเป็นเวลานานฉันสามารถอ้างว่าวิธีนี้มีความน่าเชื่อถือ
ดูแป้นพิมพ์ลัดใดที่จะใช้สำหรับการนำทางออกจากสตริงสำหรับคำถามที่คล้ายกัน
POS
point
ดีกว่ามีสองรุ่นดังกล่าวคือการทำให้หาเรื่องPOS
ตัวเลือกและตั้งค่าให้เมื่อ(point)
nil
syntax-ppss
ให้ไว้หรือไม่