Yanıtlar:
Listede döndürülen dördüncü * değerini kontrol edin syntax-ppss:
(nth 4 (syntax-ppss))
Bu var nilnokta, herhangi yorumlara dışındaysa teğer olmayan bir iç içe geçebilen yorumun içindeki veya bir tamsayı (yuvalama derinliği) bir iç içe geçebilen yorumun içindeki eğer. Daha parse-partial-sexpfazla bilgi için doktora bakın.
* Sıfır tabanlı.
Bunun Kuruluş modu ile çalışmadığını unutmayın, bunu kullanmalısınız:
(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-ppsssize işaret edecek parse-partial-sexp, ikincisi size bu işlevler tarafından döndürülen tüm şeylerin bir açıklamasını verecektir. Umarım bu bir başlangıç için yardımcı olur.
yazı tipi yüzünü kullanın, bu sineklikten öğrendiğim hiledir.
syntax-ppssİki yıl önce denedim , iki nedenden dolayı çalışmıyor:
Yorumun kenarında çalışmaz (yorum sınırı), örneğin, // this is commentc ++ modunda olduğu gibi yorum için , imleci /karakterin üzerine (nth 4 (syntax-ppss))koyarsanız , sonucu nil olur.
web modu gibi ana modlarda hiç çalışmaz
İşte ben flyspell kopyalanan kod:
(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))))
Lütfen kodun, eşleşen yazı tipi yüzüyle yeni ana modları destekleyecek şekilde genişletilebileceğini unutmayın.
Bu numarayı yaklaşık üç yıldır başarısızlıkla kullandım. Ayrıca, flyspell'in uzun süre yaygın olarak kullanıldığını düşünürsek, bu yöntemin güvenilir olduğunu iddia edebilirim.
Benzer bir soru için dizeden çıkmak için hangi klavye kısayolunun kullanılacağına bakın .
POSarg almayan ve kullanmayan başka bir sürüm önerdi point. Bu tür iki sürüme sahip olmak, arg'i POSisteğe bağlı yapmak ve (point)ne zamana ayarlamaktır nil.
syntax-ppssmı?