[Doğrulanmış dizeniz yanlış görünüyor - belki de yanlış kopyaladınız. foo
yalnı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-properties
yerleşik bir işlevdir C source code
.
(set-text-properties START END PROPERTIES &optional OBJECT)
Tamamen metin özelliklerini değiştirmek START
için END
.
Üçüncü argüman PROPERTIES
yeni özellik listesidir.
İsteğe bağlı dördüncü argüman OBJECT
bir tampon (veya geçerli tampon anlamına gelen nil) START
ve END
tampon konumları (tamsayılar veya işaretçiler) ise. Eğer OBJECT
bir dizedir START
ve END
içine 0 tabanlı indeksler. Eğer PROPERTIES
sı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-properties
ve nil
yeni ö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-properties
ve set-text-properties
onları 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 foo
ve 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 foo
hiçbir özelliği yok ama bar
hala var.