[Doğrulanmış dizeniz yanlış görünüyor - belki de yanlış kopyaladınız. fooyalnızca 3 karakterden oluşur, bu nedenle 0 ila 4 arasındaki karakterlere fonlanması mümkün değildir (yani, 0, 1, 2 ve 3 karakterleri - bu 4 karakterdir). Buradaki örnekte 4 yerine 3 kullanıyorum.]
(let* ((foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(start 0)
(end (length foo)))
(set-text-properties start end nil foo)
foo)
set-text-propertiesyerleşik bir işlevdir C source code.
(set-text-properties START END PROPERTIES &optional OBJECT)
Tamamen metin özelliklerini değiştirmek STARTiçin END.
Üçüncü argüman PROPERTIESyeni özellik listesidir.
İsteğe bağlı dördüncü argüman OBJECTbir tampon (veya geçerli tampon anlamına gelen nil) STARTve ENDtampon konumları (tamsayılar veya işaretçiler) ise. Eğer OBJECTbir dizedir STARTve ENDiçine 0 tabanlı indeksler. Eğer PROPERTIESsıfırdır, etkisi OBJECT belirlenmiş bölümünden tüm özellikleri kaldırmaktır.
Elisp kılavuzuna bakın, Düğüm Değiştirme Özellikleri . Orada, işlevi altında remove-text-properties(iş yapmak için de kullanabilirsiniz) göreceksiniz:
Belirli bir metinden tüm metin özelliklerini kaldırmak için tuşunu kullanın set-text-propertiesve nilyeni özellik listesi için belirtin .
@Dan'ın belirttiği gibi, kullanabilirsiniz substring-no-properties, ancak yeni bir dize döndürdüğünü unutmayın. İlettiğiniz gerçek dize nesnesini değiştirmez. Hem remove-text-propertiesve set-text-propertiesonları geçmek dize değiştirin.
Örneğin:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
Her ikisi de foove barşimdi sadece "foo", hiçbir özelliği ile.
Fakat:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Şimdi foohiçbir özelliği yok ama barhala var.