33.19.1 Просмотр свойств текста

Самый простой способ просмотреть свойства текста — это запросить значение определенного свойства определенного символа. Для этого используйте get-text-property. Используйте text-properties-at, чтобы получить полный список свойств символа. См. Функции поиска свойств текста, для функций, позволяющих просмотреть свойства нескольких символов одновременно.

Эти функции работают как со строками, так и с буферами. Имейте в виду, что позиции в строке начинаются с 0, тогда как позиции в буфере начинаются с 1. Передача буфера, отличного от текущего, может быть медленной.

Функция: get-text-property pos prop &optional object

Эта функция возвращает значение свойства prop символа после позиции pos в object (буфере или строке). Аргумент object является необязательным и по умолчанию устанавливается в текущий буфер.

Если position находится в конце object, значение равно nil, но обратите внимание, что сужение буфера не влияет на это значение. То есть, если object — это буфер или nil, и буфер сужен, а position находится в конце суженного буфера, результат может быть не-nil.

Если свойство prop строго говоря отсутствует, но символ имеет категорию свойства, которая является символом, то get-text-property возвращает свойство prop этой категории.

Функция: get-char-property position prop &optional object

Эта функция похожа на get-text-property, за исключением того, что она сначала проверяет наложения, а затем свойства текста. См. Наложения.

Аргумент object может быть строкой, буфером или окном. Если это окно, то для свойств текста и наложений используется буфер, отображаемый в этом окне, но рассматриваются только наложения, активные для этого окна. Если object является буфером, то сначала рассматриваются наложения в этом буфере в порядке убывания приоритета, а затем свойства текста. Если object — это строка, рассматриваются только свойства текста, поскольку строки никогда не имеют наложений.

Функция: get-pos-property position prop &optional object

Эта функция похожа на get-char-property, за исключением того, что она учитывает настройки "липкости" свойств и продвижения наложений, а не свойство символа по (то есть, сразу после) position.

Функция: get-char-property-and-overlay position prop &optional object

Это похоже на get-char-property, но предоставляет дополнительную информацию о наложении, откуда взято значение свойства.

Ее значение представляет собой ячейку cons, где CAR — это значение свойства, то же самое, которое вернул бы get-char-property с теми же аргументами. CDR — это наложение, в котором было найдено свойство, или nil, если оно было найдено как свойство текста или не найдено вовсе.

Если position находится в конце object, и CAR, и CDR значения равны nil.

Переменная: char-property-alias-alist

Эта переменная содержит alist, который сопоставляет имена свойств списку альтернативных имен свойств. Если символ не указывает прямое значение для свойства, проверяются альтернативные имена свойств по порядку; используется первое не-nil значение. Эта переменная имеет приоритет над default-text-properties, а свойства category имеют приоритет над этой переменной.

Функция: text-properties-at position &optional object

Эта функция возвращает полный список свойств символа по position в строке или буфере object. Если object равен nil, по умолчанию используется текущий буфер.

Если position находится в конце object, значение равно nil, но обратите внимание, что сужение буфера не влияет на это значение. То есть, если object — это буфер или nil, и буфер сужен, а position находится в конце суженного буфера, результат может быть не-nil.

Переменная: default-text-properties

Эта переменная содержит список свойств, предоставляющий значения по умолчанию для свойств текста. Всякий раз, когда символ не указывает значение для свойства, ни напрямую, ни через символ категории, ни через char-property-alias-alist, используется значение, хранящееся в этом списке. Вот пример:

(setq default-text-properties '(foo 69)
      char-property-alias-alist nil)
;; Убедитесь, что у символа 1 нет собственных свойств.
(set-text-properties 1 2 nil)
;; То, что мы получаем, когда спрашиваем, — это значение по умолчанию.
(get-text-property 1 'foo)
     ⇒ 69
Функция: object-intervals OBJECT

Эта функция возвращает копию интервалов (то есть свойств текста) в object в виде списка интервалов. object должен быть строкой или буфером. Изменение структуры этого списка не меняет интервалы в объекте.

(object-intervals (propertize "foo" 'face 'bold))
     ⇒ ((0 3 (face bold)))

Каждый элемент в возвращаемом списке представляет один интервал. Каждый интервал состоит из трех частей: первая — начало, вторая — конец, а третья часть — само свойство текста.