Spec-Zone.ru › Elisp

Свойства наложения

Свойства наложения похожи на свойства текста, поскольку свойства, которые изменяют отображение символа, могут поступать из любого источника. Но в большинстве аспектов они отличаются. См. Свойства текста для сравнения.

Свойства текста считаются частью текста; наложения и их свойства специально считаются не частью текста. Таким образом, копирование текста между различными буферами и строками сохраняет свойства текста, но не пытается сохранить наложения. Изменение свойств текста буфера помечает буфер как измененный, в то время как перемещение наложения или изменение его свойств не делают этого. В отличие от изменений свойств текста, изменения свойств наложения не записываются в список отмены буфера.

Поскольку более одного наложения может указать значение свойства для одного и того же символа, Emacs позволяет указать значение приоритета каждого наложения. Значение приоритета используется для определения того, какое из перекрывающихся наложений «победит».

Эти функции считывают и устанавливают свойства наложения:

Функция: overlay-get наложение свойство

Эта функция возвращает значение свойства свойство, записанного в наложение, если таковое имеется. Если наложение не записывает никакого значения для этого свойства, но у него есть свойство category, которое является символом, используется свойство свойство этого символа. В противном случае значение равно nil.

Функция: overlay-put наложение свойство значение

Эта функция устанавливает значение свойства свойство, записанного в наложение, на значение. Возвращает значение.

Функция: overlay-properties наложение

Возвращает копию списка свойств наложения.

См. также функцию get-char-property, которая проверяет как свойства наложения, так и свойства текста для данного символа. См. Просмотр свойств.

Многие свойства наложения имеют специальное значение; вот таблица из них:

priority

Значение этого свойства определяет приоритет наложения. Если вы хотите указать значение приоритета, используйте либо nil (или ноль), либо положительное целое число. Любое другое значение имеет неопределенное поведение.

Приоритет имеет значение, когда два или более наложения покрывают один и тот же символ и оба указывают одно и то же свойство; то, у которого значение priority больше, переопределяет другое. (Для свойства face, значение наложения с более высоким приоритетом не полностью переопределяет другое значение; вместо этого его атрибуты лица переопределяют атрибуты лица свойства с более низким приоритетом face.) Если у двух наложений одинаковое значение приоритета, и одно вложено в другое, то внутреннее наложение будет иметь преимущество перед внешним. Если ни одно не вложено в другое, то делать предположения о том, какое наложение превалирует, не следует.

В настоящее время все наложения имеют приоритет над свойствами текста.

Обратите внимание, что Emacs иногда использует значения приоритета, отличные от числовых, для некоторых своих внутренних наложений, поэтому не пытайтесь производить арифметические операции с приоритетом наложения (если это не наложение, которое вы создали). В частности, наложение, используемое для отображения области, использует значение приоритета в формате (primary . secondary), где значение primary используется как описано выше, а secondary — это резервное значение, используемое, когда primary и соображения вложенности не могут разрешить приоритет между наложениями. Однако вам рекомендуется не проектировать программы Lisp, основанные на этом детальном реализации; если вам нужно упорядочить наложения по приоритету, используйте аргумент sorted функции overlays-at. См. Поиск наложений.

window

Если свойство window не nil, то наложение применяется только к этому окну.

category

Если у наложения есть свойство category, мы называем его категорией наложения. Это должен быть символ. Свойства символа служат значениями по умолчанию для свойств наложения.

face

Это свойство управляет отображением текста (см. Лица). Значение свойства может быть следующим:

  • Имя лица (символ или строка).
  • Анонимное лицо: список свойств в формате (keyword value …), где каждое ключевое слово — это имя атрибута лица, а значение — значение этого атрибута.
  • Список лиц. Каждый элемент списка должен быть либо именем лица, либо анонимным лицом. Это определяет лицо, которое является агрегатом атрибутов каждого из перечисленных лиц. Лица, которые встречаются раньше в списке, имеют более высокий приоритет.
  • Список в виде (foreground-color . color-name) или (background-color . color-name). Это определяет цвет переднего или заднего плана, аналогично (:foreground color-name) или (:background color-name). Этот формат поддерживается только для обратной совместимости и следует избегать.
mouse-face

Это свойство используется вместо face, когда курсор находится в пределах наложения. Однако Emacs игнорирует все атрибуты лица из этого свойства, которые изменяют размер текста (например, :height, :weight, и :slant). Эти атрибуты всегда такие же, как и в неосвещенном тексте.

display

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

help-echo

Если у наложения есть свойство help-echo, то при перемещении курсора на текст в наложении Emacs отображает строку справки в области эха или в окне всплывающей подсказки. Для получения подробной информации см. Справка по текстовому эху.

field

Последовательные символы с одинаковым свойством field образуют поле. Некоторые функции перемещения, включая forward-word и beginning-of-line, прекращают перемещение на границе поля. См. Поля.

modification-hooks

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

Функции-обработчики вызываются как до, так и после каждого изменения. Если функции сохраняют получаемую информацию и сравнивают её между вызовами, они могут определить то, какое изменение было внесено в тексте буфера.

При вызове до изменения каждая функция получает четыре аргумента: наложение, nil, и начало и конец диапазона текста, который должен быть изменен.

При вызове после изменения каждая функция получает пять аргументов: наложение, t, начало и конец только что изменённого диапазона текста и длину текста до изменения, заменённую этим диапазоном. (Для вставки длина до изменения равна нулю; для удаления эта длина равна количеству удалённых символов, а начало и конец после изменения равны).

Когда эти функции вызываются, inhibit-modification-hooks привязано к не-nil. Если функции изменяют буфер, вам может понадобиться привязать inhibit-modification-hooks к nil, чтобы вызвать выполнение обработчиков изменений для этих модификаций. Однако это может привести к рекурсивному вызову вашей собственной функции-обработчика изменений, поэтому обязательно подготовьтесь к этому. См. Обработчики изменений.

Свойства текста также поддерживают свойство modification-hooks, но детали несколько отличаются (см. Специальные свойства).

insert-in-front-hooks

Значение этого свойства — список функций, которые вызываются до и после вставки текста в самом начале наложения. Правила вызова такие же, как для функций modification-hooks.

insert-behind-hooks

Значение этого свойства — список функций, которые вызываются до и после вставки текста в самом конце наложения. Правила вызова такие же, как для функций modification-hooks.

invisible

Свойство invisible может сделать текст в наложении невидимым, что означает, что он не отображается на экране. Для получения подробной информации см. Невидимый текст.

intangible

Свойство intangible на наложении работает так же, как свойство текста intangible. Оно устарело. Для получения подробной информации см. Специальные свойства.

isearch-open-invisible

Это свойство указывает поиску по частям, как сделать невидимое наложение видимым, постоянно, если окончательный совпадение его перекрывает. См. Невидимый текст.

isearch-open-invisible-temporary

Это свойство указывает поиску по частям, как сделать невидимое наложение видимым временно во время поиска. См. Невидимый текст.

before-string

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

after-string

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

line-prefix

Это свойство определяет спецификацию отображения, добавляемую перед каждой строкой, не являющейся продолжением, во время отображения. См. Обрезка.

wrap-prefix

Это свойство определяет спецификацию отображения, добавляемую перед каждой строкой продолжения, во время отображения. См. Обрезка.

evaporate

Если это свойство отлично от nil, наложение удаляется автоматически, если оно становится пустым (т. е. если его длина становится равной нулю). Если вы дадите пустому наложению (см. пустое наложение) свойство evaporate, отличное от nil, оно удалится немедленно. Обратите внимание, что, если у наложения нет этого свойства, оно не будет удалено при удалении текста между его начальным и конечным положениями из буфера.

keymap

Если это свойство отлично от nil, оно определяет ключевую карту для части текста. Эта ключевая карта имеет приоритет над большинством других ключевых карт (см. Активные ключевые карты), и она используется, когда точка находится в пределах наложения, где свойства передвижения вперёд и назад определяют, рассматриваются ли границы как внутри или нет.

local-map

Свойство local-map аналогично keymap, но оно заменяет локальную карту буфера, а не дополняет существующие ключевые карты. Это также означает, что оно имеет более низкий приоритет, чем ключевые карты режима малой интенсивности.

Свойства keymap и local-map не влияют на отображение строки, задаваемой свойствами before-string, after-string, или display. Это актуально только для щелчков мышью и других событий мыши, которые попадают на строку, так как точка никогда не находится на строке. Чтобы связать специальные события мыши для строки, присвойте ей свойство текста keymap или local-map. См. Специальные свойства.

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

Spec-Zone.ru

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