[Su cadena de propiedad se ve mal, tal vez la copió mal. foo
tiene solo 3 caracteres, por lo que es imposible que se fontifique en los caracteres 0 a 4 (es decir, los caracteres 0, 1, 2 y 3, es decir, 4 caracteres). Yo uso 3 en lugar de 4 en el ejemplo aquí.]
(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
es una función incorporada en C source code
.
(set-text-properties START END PROPERTIES &optional OBJECT)
Reemplazar completamente las propiedades del texto de START
a END
.
El tercer argumento PROPERTIES
es la nueva lista de propiedades.
Si el cuarto argumento opcional OBJECT
es un búfer (o nulo, que significa el búfer actual), START
y END
son posiciones de búfer (enteros o marcadores). If OBJECT
es una cadena START
y END
tiene índices basados en 0. Si PROPERTIES
es nulo, el efecto es eliminar todas las propiedades de la parte designada de OBJECT.
Consulte el manual de Elisp, nodo Cambio de propiedades . Allí verá esto, en función remove-text-properties
(que también podría usar para hacer el trabajo):
Para eliminar todas las propiedades de texto de cierto texto, use set-text-properties
y especifique nil
para la nueva lista de propiedades.
Como @Dan mencionó, también puede usar substring-no-properties
, pero tenga en cuenta que devuelve una nueva cadena. No modifica el objeto de cadena real que le pasa. Ambos remove-text-properties
y set-text-properties
cambian la secuencia que les pasas.
Por ejemplo:
(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
y bar
ahora son justos "foo"
, sin propiedades.
Pero:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Ahora foo
no tiene propiedades pero bar
aún las tiene.