[String propertized Anda terlihat salah - mungkin Anda salah menyalinnya. foohanya 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-propertiesadalah fungsi bawaan di C source code.
(set-text-properties START END PROPERTIES &optional OBJECT)
Ganti sepenuhnya properti teks dari STARTmenjadi END.
Argumen ketiga PROPERTIESadalah daftar properti baru.
Jika argumen keempat opsional OBJECTadalah buffer (atau nil, yang berarti buffer saat ini), STARTdan ENDmerupakan posisi buffer (integer atau spidol). Jika OBJECTadalah string, STARTdan ENDindeks berbasis 0 ke dalamnya. Jika PROPERTIESnihil, 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-propertiesdan tentukan niluntuk 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-propertiesdan set-text-propertiesubah 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 foodan barsekarang 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 footidak memiliki properti tetapi barmasih memilikinya.