[String propertized Anda terlihat salah - mungkin Anda salah menyalinnya. foo
hanya memiliki 3 karakter, jadi tidak mungkin untuk diklasifikasi pada karakter 0 hingga 4 (yaitu, karakter 0, 1, 2, dan 3 - itu 4 karakter). Saya menggunakan 3 bukannya 4 dalam contoh di sini.]
(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
adalah fungsi bawaan di C source code
.
(set-text-properties START END PROPERTIES &optional OBJECT)
Ganti sepenuhnya properti teks dari START
menjadi END
.
Argumen ketiga PROPERTIES
adalah daftar properti baru.
Jika argumen keempat opsional OBJECT
adalah buffer (atau nil, yang berarti buffer saat ini), START
dan END
merupakan posisi buffer (integer atau spidol). Jika OBJECT
adalah string, START
dan END
indeks berbasis 0 ke dalamnya. Jika PROPERTIES
nihil, efeknya adalah untuk menghapus semua properti dari bagian yang ditunjuk OBJECT.
Lihat manual Elisp, simpul Mengubah Properti . Di sana Anda akan melihat ini, di bawah fungsi remove-text-properties
(yang juga dapat Anda gunakan untuk melakukan pekerjaan):
Untuk menghapus semua properti teks dari teks tertentu, gunakan set-text-properties
dan tentukan nil
untuk daftar properti baru.
Seperti yang disebutkan oleh @Dan, Anda juga dapat menggunakan substring-no-properties
, tetapi ketahuilah bahwa ia mengembalikan string baru. Itu tidak mengubah objek string aktual yang Anda lewati. Keduanya remove-text-properties
dan set-text-properties
ubah string yang Anda lewati.
Sebagai contoh:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
Keduanya foo
dan bar
sekarang adil "foo"
, tanpa properti.
Tapi:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Sekarang foo
tidak memiliki properti tetapi bar
masih memilikinya.