[Twój łańcuch znaków wygląda źle - być może źle go skopiowałeś. foo
ma tylko 3 znaki, więc nie można go czcionki w znakach od 0 do 4 (tj. znaki 0, 1, 2 i 3 - to 4 znaki). W tym przykładzie używam 3 zamiast 4.]
(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
jest wbudowaną funkcją w C source code
.
(set-text-properties START END PROPERTIES &optional OBJECT)
Całkowicie zastąp właściwości tekstu od START
do END
.
Trzecim argumentem PROPERTIES
jest nowa lista właściwości.
Jeśli opcjonalny czwarty argument OBJECT
jest buforem (lub zero, co oznacza bieżący bufor), START
i END
są pozycjami bufora (liczby całkowite lub znaczniki). If OBJECT
jest łańcuchem START
i END
zawiera w nim indeksy 0. Jeśli PROPERTIES
jest zero, efektem jest usunięcie wszystkich właściwości z wyznaczonej części OBIEKTU.
Zobacz instrukcję Elisp, węzeł Zmiana właściwości . Tam zobaczysz to, w funkcji remove-text-properties
(której możesz również użyć do wykonania zadania):
Aby usunąć wszystkie właściwości tekstu z określonego tekstu, użyj set-text-properties
i określ nil
nową listę właściwości.
Jak wspomniano @Dan, możesz także użyć substring-no-properties
, ale pamiętaj, że zwraca nowy ciąg. Nie modyfikuje przekazanego obiektu ciąg znaków. Zarówno remove-text-properties
i set-text-properties
zmień ciąg, który im przekazujesz.
Na przykład:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
Zarówno foo
a bar
teraz po prostu "foo"
, bez żadnych właściwości.
Ale:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Teraz foo
nie ma właściwości, ale bar
nadal je ma.