[Sua corda propertizada parece errada - talvez você tenha copiado errado. foo
possui 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 START
para END
.
O terceiro argumento PROPERTIES
é a nova lista de propriedades.
Se o quarto argumento opcional OBJECT
for um buffer (ou nulo, que significa o buffer atual) START
e END
forem posições de buffer (números inteiros ou marcadores). If OBJECT
é uma sequência START
e END
são índices baseados em 0 nela. Se PROPERTIES
for 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-properties
e especifique nil
a 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-properties
e set-text-properties
altere 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 foo
e bar
agora 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 foo
não tem propriedades, mas bar
ainda as possui.