जवाबों:
द्वारा लौटी सूची में चौथे * मान की जाँच करें syntax-ppss:
(nth 4 (syntax-ppss))
nilयदि किसी tगैर-नेस्टेबल टिप्पणी के अंदर, या एक नेस्टेबल टिप्पणी के अंदर एक पूर्णांक (नेस्टिंग की गहराई) है तो यह किसी भी टिप्पणी के बाहर है । 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, जिसके उत्तरार्ध आपको इन कार्यों के लिए दिए गए सभी सामानों का विवरण देगा। उम्मीद है कि एक शुरुआत के लिए मदद करता है।
फ़ॉन्ट-फेस का उपयोग करें, यह वह चाल है जो मैंने फ्लाईस्पेल से सीखी थी।
मैंने syntax-ppssदो साल पहले कोशिश की थी, यह दो कारणों से काम नहीं करता है:
टिप्पणी के किनारे पर काम न करें (टिप्पणी सीमा), उदाहरण के लिए, // this is commentc ++ - मोड जैसी टिप्पणी के लिए , यदि आप /चरित्र पर कर्सर रखते हैं , तो परिणाम (nth 4 (syntax-ppss))शून्य है।
वेब-मोड की तरह प्रमुख मोड में बिल्कुल भी काम न करें
यहाँ कोड है जिसे मैंने फ्लाईस्पेल से कॉपी किया है:
(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))))
कृपया ध्यान दें कि फेज़ मैचिंग फॉन्ट फेस द्वारा नए प्रमुख मोड को सपोर्ट करने के लिए कोड को बढ़ाया जा सकता है।
मैंने इस ट्रिक को लगभग तीन साल तक बिना किसी असफलता के उपयोग किया है। इसके अलावा, फ्लाईस्पेल पर विचार करना व्यापक रूप से इतने लंबे समय के लिए उपयोग किया जाता है, मैं दावा कर सकता था कि यह विधि विश्वसनीय है।
देखें कौन सा कीबोर्ड शॉर्टकट एक स्ट्रिंग से बाहर नेविगेट करने के लिए उपयोग करने के लिए इसी तरह के प्रश्न के लिए।
POSआर्ग नहीं करता है और उपयोग करता है point। ऐसे दो संस्करण होने से बेहतर है कि arg को POSवैकल्पिक बनाया जाए और इसे (point)कब सेट किया जाए nil।
syntax-ppssप्रदान करता है?