[La tua stringa corretta sembra sbagliata - forse l'hai copiata male. fooha solo 3 caratteri, quindi non è possibile che si disponga di caratteri sui caratteri da 0 a 4 (cioè, i caratteri 0, 1, 2 e 3 - sono 4 caratteri). Uso 3 anziché 4 nell'esempio qui.]
(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è una funzione integrata in C source code.
(set-text-properties START END PROPERTIES &optional OBJECT)
Sostituisci completamente le proprietà del testo da STARTa END.
Il terzo argomento PROPERTIESè il nuovo elenco di proprietà.
Se il quarto argomento facoltativo OBJECTè un buffer (o zero, che significa il buffer corrente), STARTe ENDsono posizioni del buffer (numeri interi o marker). If OBJECTè una stringa STARTe ENDcontiene indici basati su 0. Se PROPERTIESè zero, l'effetto è rimuovere tutte le proprietà dalla parte designata di OBJECT.
Vedere il manuale Elisp, nodo Modifica proprietà . Lì vedrai questo, sotto la funzione remove-text-properties(che potresti anche usare per fare il lavoro):
Per rimuovere tutte le proprietà del testo da un determinato testo, utilizzare set-text-propertiese specificare nilper il nuovo elenco di proprietà.
Come accennato da @ Dan, puoi anche usare substring-no-properties, ma tieni presente che restituisce una nuova stringa. Non modifica l'oggetto stringa effettivo che viene passato. Entrambi remove-text-propertiese set-text-propertiescambia la stringa che li passi.
Per esempio:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
Entrambi fooe barora sono solo "foo", senza proprietà.
Ma:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Ora foonon ha proprietà ma le barha ancora.