[Sua corda propertizada parece errada - talvez você tenha copiado errado. foopossui apenas 3 caracteres, portanto, é impossível que ele seja tipificado nos caracteres 0 a 4 (ou seja, caracteres 0, 1, 2 e 3 - são 4 caracteres). Eu uso 3 em vez de 4 no exemplo aqui.]
(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é uma função interna do C source code.
(set-text-properties START END PROPERTIES &optional OBJECT)
Substitua completamente as propriedades do texto de STARTpara END.
O terceiro argumento PROPERTIESé a nova lista de propriedades.
Se o quarto argumento opcional OBJECTfor um buffer (ou nulo, que significa o buffer atual) STARTe ENDforem posições de buffer (números inteiros ou marcadores). If OBJECTé uma sequência STARTe ENDsão índices baseados em 0 nela. Se PROPERTIESfor nulo, o efeito é remover todas as propriedades da parte designada de OBJECT.
Consulte o manual do Elisp, nó Alterando propriedades . Lá você verá isso, na função remove-text-properties(que você também pode usar para fazer o trabalho):
Para remover todas as propriedades de texto de determinado texto, use set-text-propertiese especifique nila nova lista de propriedades.
Como o @Dan mencionou, você também pode usar substring-no-properties, mas saiba que ele retorna uma nova string. Ele não modifica o objeto de cadeia real que você o transmite. Ambos remove-text-propertiese set-text-propertiesaltere a string que você os passa.
Por exemplo:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
Ambos fooe baragora são justos "foo", sem propriedades.
Mas:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Agora foonão tem propriedades, mas barainda as possui.