[La tua stringa corretta sembra sbagliata - forse l'hai copiata male. foo
ha 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 START
a 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), START
e END
sono posizioni del buffer (numeri interi o marker). If OBJECT
è una stringa START
e END
contiene 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-properties
e specificare nil
per 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-properties
e set-text-properties
cambia 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 foo
e bar
ora 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 foo
non ha proprietà ma le bar
ha ancora.