[Ваш належний рядок виглядає неправильно - можливо, ви його скопіювали неправильно. foo
має лише 3 символи, тому неможливо, щоб воно було закріплено на символах 0 до 4 (тобто символи 0, 1, 2 і 3 - це 4 символи). У прикладі я використовую 3 замість 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
- це вбудована функція в C source code
.
(set-text-properties START END PROPERTIES &optional OBJECT)
Повністю замініть властивості тексту з START
на END
.
Третій аргумент PROPERTIES
- новий список властивостей.
Якщо необов'язковий четвертий аргумент OBJECT
- це буфер (або нуль, що означає поточний буфер), START
і END
це буферні позиції (цілі числа або маркери). Якщо OBJECT
це рядок, START
і до нього END
входять індекси на основі 0. Якщо PROPERTIES
нуль, ефект полягає в тому, щоб видалити всі властивості із призначеної частини OBJECT.
Дивіться посібник Elisp, вузол Зміна властивостей . Там ви побачите це під функцією remove-text-properties
(яку ви також можете використовувати для виконання роботи):
Щоб видалити всі властивості тексту з певного тексту, використовуйте set-text-properties
та вкажіть nil
для нового списку властивостей.
Як згадував @Dan, ви також можете використовувати substring-no-properties
, але майте на увазі, що він повертає нову рядок. Він не змінює фактичний об'єкт рядка, який ви передаєте йому. І те, remove-text-properties
і інше set-text-properties
змінити рядок, який ви їх передаєте.
Наприклад:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(set-text-properties 0 (length foo) nil foo)
І те, foo
і bar
зараз просто "foo"
, без властивостей.
Але:
(setq foo #("foo" 0 3 (fontified t face font-lock-function-name-face)))
(setq bar foo)
(setq foo (substring-no-properties foo))
Тепер foo
немає властивостей, але bar
все ще має їх.