Yanıtlar:
Listede döndürülen dördüncü * değerini kontrol edin syntax-ppss
:
(nth 4 (syntax-ppss))
Bu var nil
nokta, herhangi yorumlara dışındaysa t
eğ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-sexp
fazla 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-ppss
size 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 comment
c ++ 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 .
POS
arg almayan ve kullanmayan başka bir sürüm önerdi point
. Bu tür iki sürüme sahip olmak, arg'i POS
isteğe bağlı yapmak ve (point)
ne zamana ayarlamaktır nil
.
syntax-ppss
mı?