Примитивы для изменения свойств применяются к указанному диапазону
текста в буфере или строке. Функция set-text-properties
(см. конец раздела) устанавливает весь список свойств текста в этом
диапазоне; чаще бывает полезно добавлять, изменять или удалять только
определённые свойства, заданные по имени.
Поскольку текстовые свойства считаются частью содержимого буфера (или строки) и могут влиять на то, как буфер выглядит на экране, любое изменение текстовых свойств буфера помечает буфер как изменённый. Изменения текстовых свойств буфера также могут быть отменены (см. Отмена). Позиции в строке начинаются с 0, тогда как позиции в буфере начинаются с 1.
Эта функция устанавливает свойство prop в значение value для текста
между start и end в строке или буфере object.
Если object равен nil, по умолчанию используется текущий буфер.
Эта функция добавляет или переопределяет текстовые свойства для текста между
start и end в строке или буфере object. Если
object равен nil, по умолчанию используется текущий буфер.
Аргумент props определяет, какие свойства добавлять. Он должен иметь форму списка свойств (см. Списки свойств): список, чьи элементы включают имена свойств, чередующиеся с соответствующими значениями.
Возвращаемое значение — t, если функция действительно изменила
значение какого-либо свойства; nil в противном случае (если props равен nil или
его значения совпадают с уже имеющимися в тексте).
Например, вот как установить свойства comment и face
для диапазона текста:
(add-text-properties start end
'(comment t face highlight))
Эта функция удаляет указанные текстовые свойства из текста между
start и end в строке или буфере object. Если
object равен nil, по умолчанию используется текущий буфер.
Аргумент props определяет, какие свойства удалять. Он должен
иметь форму списка свойств (см. Списки свойств): список,
чьи элементы являются именами свойств, чередующимися с соответствующими значениями.
Но важны только имена — значения, которые их сопровождают, игнорируются.
Например, вот как удалить свойство face.
(remove-text-properties start end '(face nil))
Возвращаемое значение — t, если функция действительно изменила
значение какого-либо свойства; nil в противном случае (если props равен nil или
если ни один символ в указанном тексте не имел этих свойств).
Чтобы удалить все текстовые свойства из определённого текста, используйте
set-text-properties и укажите nil в качестве нового списка
свойств.
Подобно remove-text-properties, за исключением того, что
list-of-properties является списком только имён свойств, а не
чередующимся списком имён свойств и значений.
Эта функция полностью заменяет список текстовых свойств для текста
между start и end в строке или буфере object.
Если object равен nil, по умолчанию используется текущий буфер.
Аргумент props — это новый список свойств. Он должен быть списком, чьи элементы являются именами свойств, чередующимися с соответствующими значениями.
После возврата из set-text-properties все символы в
указанном диапазоне имеют одинаковые свойства.
Если props равен nil, эффект заключается в удалении всех свойств
из указанного диапазона текста. Вот пример:
(set-text-properties start end nil)
Не полагайтесь на возвращаемое значение этой функции.
Эта функция действует на текст между start и end,
добавляя лицо face к текстовому свойству face.
face должно быть допустимым значением для свойства face
(см. Свойства со специальным значением), например, именем лица или анонимным лицом
(см. Лица).
Если какой-либо текст в регионе уже имеет не-nil свойство face,
эти лица сохраняются. Эта функция устанавливает свойство face
в список лиц, с face в качестве первого элемента (по
умолчанию) и уже существующими лицами в качестве остальных элементов. Если
необязательный аргумент appendp не равен nil, face
добавляется в конец списка. Обратите внимание, что в списке лиц
первое встреченное значение для каждого атрибута имеет приоритет.
Например, следующий код назначит курсивное зелёное лицо тексту между start и end:
(add-face-text-property start end 'italic) (add-face-text-property start end '(:foreground "red")) (add-face-text-property start end '(:foreground "green"))
Необязательный аргумент object, если он не равен nil, определяет
буфер или строку, над которыми следует выполнять действие, а не текущий буфер.
Если object является строкой, то start и end являются
индексами в этой строке, начинающимися с нуля.
Самый простой способ создать строку с текстовыми свойствами — использовать
propertize:
Эта функция возвращает копию string с добавленными текстовыми свойствами
properties. Эти свойства применяются ко всем символам
в возвращаемой строке. Вот пример, который создаёт
строку со свойством face и свойством mouse-face:
(propertize "foo" 'face 'italic
'mouse-face 'bold-italic)
⇒ #("foo" 0 3 (mouse-face bold-italic face italic))
Чтобы добавить разные свойства к разным частям строки, вы можете
создать каждую часть с помощью propertize, а затем объединить их с
помощью concat:
(concat
(propertize "foo" 'face 'italic
'mouse-face 'bold-italic)
" and "
(propertize "bar" 'face 'italic
'mouse-face 'bold-italic))
⇒ #("foo and bar"
0 3 (face italic mouse-face bold-italic)
3 8 nil
8 11 (face italic mouse-face bold-italic))
См. Изучение содержимого буфера относительно функции
buffer-substring-no-properties, которая копирует текст из
буфера, но не копирует его свойства.
Если вы хотите добавить текстовые свойства в буфер или удалить их
без пометки буфера как изменённого, вы можете обернуть вызовы выше
в макрос with-silent-modifications. См. Модификация буфера.