Spec-Zone.ru › Elisp

Изучение текстовых свойств

Самый простой способ изучить текстовые свойства — запросить значение определённого свойства определённого символа. Для этого используйте 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, но дополнительно сообщает, из какого наложения получено значение свойства.

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

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

Переменная: char-property-alias-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)
;; Make sure character 1 has no properties of its own.
(set-text-properties 1 2 nil)
;; What we get, when we ask, is the default value.
(get-text-property 1 'foo)
     ⇒ 69
Функция: object-intervals OBJECT

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

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

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

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Examining-Properties.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API