Свойства наложения
Свойства наложения похожи на свойства текста, поскольку свойства, которые изменяют отображение символа, могут поступать из любого источника. Но в большинстве аспектов они отличаются. См. Свойства текста для сравнения.
Свойства текста считаются частью текста; наложения и их свойства специально считаются не частью текста. Таким образом, копирование текста между различными буферами и строками сохраняет свойства текста, но не пытается сохранить наложения. Изменение свойств текста буфера помечает буфер как измененный, в то время как перемещение наложения или изменение его свойств не делают этого. В отличие от изменений свойств текста, изменения свойств наложения не записываются в список отмены буфера.
Поскольку более одного наложения может указать значение свойства для одного и того же символа, 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