Spec-Zone.ru › Elisp

Свойства со специальным значением

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

Примечание: свойства composition, display, invisible и intangible также могут привести к перемещению курсора в приемлемое место после каждой команды Emacs. См. Настройка курсора.

category

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

face

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

  • Имя стиля (символ или строка).
  • Анонимный стиль: список свойств вида (keyword value …), где каждый ключевое слово — имя атрибута стиля, а значение — значение этого атрибута.
  • Список стилей. Каждый элемент списка должен быть либо именем стиля, либо анонимным стилем. Это задает стиль, который является агрегатом атрибутов каждого из перечисленных стилей. Стиль, который встречается раньше в списке, имеет больший приоритет.
  • Список вида (foreground-color . color-name) или (background-color . color-name). Это задает цвет переднего или заднего плана, аналогично (:foreground color-name) или (:background color-name). Этот формат поддерживается только для обратной совместимости и следует избегать.
  • Список вида (:filtered filter face-spec), который задаёт стиль, указанный face-spec, только если filter совпадает при использовании стиля для отображения. face-spec может использовать любой из перечисленных выше форматов. filter должен иметь вид (:window param value), который совпадает для окон, параметр param которых равен eq к value. Если переменная face-filters-always-match не nil, все фильтры стилей считаются совпавшими.

Режим Font Lock (см. Режим выделения шрифтов) работает в большинстве буферов, динамически обновляя свойство face символов на основе контекста.

Функция add-face-text-property предоставляет удобный способ установить это свойство текста. См. Изменение свойств.

font-lock-face

Это свойство задаёт значение свойства face, которое режим Font Lock должен применить к основному тексту. Это один из методов форматирования, используемых режимом Font Lock, и он полезен для специальных режимов, реализующих собственную подсветку. См. Предвычисленная форматировка. Когда режим Font Lock отключён, font-lock-face не оказывает влияния.

mouse-face

Это свойство используется вместо face при наведении курсора на или около символа. В этом контексте «около» означает, что весь текст между символом и позицией курсора имеет одинаковое значение свойства mouse-face.

Emacs игнорирует все атрибуты стиля из свойства mouse-face, которые изменяют размер текста (например, :height, :weight, и :slant). Эти атрибуты всегда совпадают с атрибутами неоформленного текста.

fontified

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

display

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

help-echo

Если текст имеет строку в качестве свойства help-echo, то при наведении курсора на этот текст Emacs отображает эту строку в области эха или в окне всплывающих подсказок (см. Всплывающие подсказки) после обработки её через substitute-command-keys.

Если значение свойства help-echo является функцией, эта функция вызывается с тремя аргументами, окно, объект и позиция, и должна возвращать строку справки или nil для отсутствия. Первый аргумент, окно, — это окно, в котором была найдена справка. Второй, объект, — это буфер, наложение или строка, которые имели свойство help-echo. Аргумент позиция выглядит следующим образом:

  • Если объект — это буфер, позиция — это позиция в буфере.
  • Если объект — это наложение, у этого наложения есть свойство help-echo, и позиция — это позиция в буфере наложения.
  • Если объект — это строка (строка наложения или строка, отображаемая со свойством display), позиция — это позиция в этой строке.

Если значение свойства help-echo является ни функцией, ни строкой, оно оценивается для получения строки справки.

Вы можете изменить способ отображения текста справки, установив переменную show-help-function (см. Отображение справки).

Эта функция используется в строке состояния и для другого активного текста.

help-echo-inhibit-substitution

Если первый символ строки help-echo имеет свойство help-echo-inhibit-substitution которое не nil, то оно отображается как есть show-help-function, без передачи через substitute-command-keys.

keymap

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

Значение свойства для символа перед курсором применяется, если оно не nil и прилипающее кзади, а значение свойства для символа после курсора применяется, если оно не nil и прилипающее кпереди. (Для щелчков мышью используется позиция щелчка вместо позиции курсора.)

local-map

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

syntax-table

Свойство syntax-table переопределяет то, что говорит таблица синтаксиса об этом конкретном символе. См. Свойства синтаксиса.

read-only

Если у символа есть свойство read-only, то изменение этого символа запрещено. Любая команда, которая пытается это сделать, получает ошибку text-read-only. Если значение свойства — строка, эта строка используется как сообщение об ошибке.

Вставка рядом с неизменяемым символом — ошибка, если вставка обычного текста унаследовала бы свойство read-only из-за прилипания. Таким образом, вы можете контролировать разрешение на вставку рядом с неизменяемым текстом, контролируя прилипание. См. Прилипающие свойства.

Поскольку изменение свойств считается изменением буфера, удалить свойство read-only нельзя, если вы не знаете специальный приём: привяжите inhibit-read-only к значению, которое не nil, а затем удалите свойство. См. Только для чтения буферы.

inhibit-read-only

Символы, имеющие свойство inhibit-read-only, могут быть отредактированы даже в буферах только для чтения. См. Только для чтения буферы.

invisible

Свойство invisible которое не nil, может сделать символ невидимым на экране. Подробнее см. Невидимый текст.

intangible

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

Если последовательные символы имеют неравные и не nil свойства intangible, они принадлежат отдельным группам; каждая группа отдельно обрабатывается, как описано выше.

Когда переменная inhibit-point-motion-hooks не nil (как по умолчанию), свойство intangible игнорируется.

Внимание: это свойство работает на очень низком уровне и влияет на много кода неожиданными способами. Поэтому используйте его с большой осторожностью. Частая ошибка — назначение нематериального свойства невидимому тексту, что на самом деле не нужно, так как цикл команд всё равно переместит курсор за пределы невидимого текста в конце каждой команды. См. Настройка курсора. По этим причинам это свойство устарело; используйте вместо него свойство cursor-intangible.

cursor-intangible

Когда вспомогательный режим cursor-intangible-mode включён, курсор перемещается от любой позиции, имеющей свойство cursor-intangible которое не nil, перед повторным отображением.

Когда переменная cursor-sensor-inhibit не nil, свойства cursor-intangible и cursor-sensor-functions (описанные ниже) игнорируются.

field

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

cursor

Обычно курсор отображается в начале или конце любого наложения и строк свойств текста, присутствующих в текущей позиции буфера. Вы можете вместо этого указать Emacs на размещение курсора на любом нужном символе этих строк, придав этому символу свойство текста, отличное от nil cursor. Кроме того, если значение свойства cursor является целым числом, оно указывает количество позиций символов буфера, начиная с позиции, где начинается наложение или свойство display, для которых курсор должен отображаться на этом символе. Конкретно, если значение свойства cursor символа равно числу n, курсор будет отображаться на этом символе для любой позиции буфера в диапазоне [ovpos..ovpos+n), где ovpos — начальная позиция наложения, заданная значением overlay-start (см. Управление наложениями), или позиция, где начинается свойство текста display.

Другими словами, символом строки со свойством cursor любого ненулевого значения является символ, на котором должен отображаться курсор, когда точка (point) не видна на экране из-за наложения или отображаемой строки. Значение свойства указывает, для каких позиций буфера там нужно отображать курсор. Если значение является целым числом n, курсор отображается там, когда точка находится где-то между началом наложения или свойства display и n позициями после него. Если значение — любое другое ненулевое значение, курсор отображается там только тогда, когда точка находится в позиции буфера, которая является началом свойства display, или в позиции overlay-start, если эта позиция не видна на экране. Обратите внимание, что целочисленное значение свойства cursor может означать, что курсор отображается на этом символе даже тогда, когда точка видна на экране.

Одна тонкость этого свойства заключается в том, что оно не работает для символа новой строки, являющегося частью строки отображения или наложения. Это происходит потому, что символ новой строки не имеет графического представления на экране для Emacs, чтобы найти его, когда он ищет символ на экране со свойством cursor.

Когда буфер содержит множество строк наложения (например, см. before-string), которые скрывают часть текста буфера или строки свойств display, рекомендуется использовать свойство cursor для этих строк, чтобы сообщить Emacs-дисплею места, где необходимо расположить курсор при прохождении по этим строкам. Это напрямую сообщает движку отображения, где программа Lisp хочет разместить курсор, или где пользователь ожидает курсора, когда точка находится в какой-либо позиции буфера, которая «покрыта» строкой отображения или наложения.

pointer

Это задаёт форму указателя мыши, когда курсор находится над этим текстом или изображением. См. Форму указателя для возможных форм указателя.

line-spacing

Символ новой строки может иметь свойство текста или наложения line-spacing, которое контролирует высоту строки отображения, завершающейся этой новой строкой. Значение свойства переопределяет стандартную интервал строк рамки и локальную переменную буфера line-spacing. См. Высоту строки.

line-height

Символ новой строки может иметь свойство текста или наложения line-height, которое контролирует общую высоту строки отображения, заканчивающейся этой новой строкой. См. Высоту строки.

wrap-prefix

Если текст имеет свойство wrap-prefix, то задаваемый им префикс добавляется во время отображения в начало каждой продолженной строки из-за переноса текста (так что, если строки усекаются, префикс переноса никогда не используется). Он может быть строкой или изображением (см. Другие параметры отображения), или пробелом, как указано свойствами отображения :width или :align-to (см. Заданный пробел).

Префикс переноса также может быть задан для всего буфера с помощью локальной переменной буфера wrap-prefix (однако, свойство текста wrap-prefix имеет приоритет над значением переменной wrap-prefix). См. Усечение.

line-prefix

Если текст имеет свойство line-prefix, то задаваемый им префикс добавляется во время отображения в начало каждой не-продолженной строки. Он может быть строкой или изображением (см. Другие параметры отображения), или пробелом, как указано свойствами отображения :width или :align-to (см. Заданный пробел).

Префикс строки также может быть задан для всего буфера с помощью локальной переменной буфера line-prefix (однако, свойство текста line-prefix имеет приоритет над значением переменной line-prefix). См. Усечение.

modification-hooks

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

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

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

insert-in-front-hooks
insert-behind-hooks

Операция вставки текста в буфер также вызывает функции, указанные в свойстве insert-in-front-hooks следующего символа и в свойстве insert-behind-hooks предыдущего символа. Эти функции получают два аргумента, начало и конец вставляемого текста. Функции вызываются после фактической вставки.

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

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

point-entered
point-left

Специальные свойства point-entered и point-left записывают функции обратного вызова, которые сообщают о движении точки. Каждый раз, когда точка перемещается, Emacs сравнивает эти два значения свойства:

  • свойство point-left символа после старого расположения, и
  • свойство point-entered символа после нового расположения.

Если эти два значения отличаются, каждое из них вызывается (если не nil) с двумя аргументами: старым значением точки и новым.

То же сравнение выполняется для символов перед старым и новым расположениями. Результатом может быть выполнение двух функций point-left (которые могут быть одной и той же функцией) и/или двух функций point-entered (которые могут быть одной и той же функцией). В любом случае, все функции point-left вызываются сначала, а затем все функции point-entered.

Можно использовать char-after для проверки символов в разных позициях буфера без перемещения точки в эти позиции. Только фактическое изменение значения точки запускает эти функции обратного вызова.

Переменная inhibit-point-motion-hooks по умолчанию запрещает выполнение обработчиков перемещения точки point-left и point-entered, см. Запрет обработчиков перемещения точки.

Эти свойства устарели; используйте cursor-sensor-functions вместо них.

cursor-sensor-functions

Это специальное свойство записывает список функций, которые реагируют на перемещение курсора. Каждая функция в списке вызывается непосредственно перед повторным отображением с 3 аргументами: затронутым окном, предыдущей известной позицией курсора и одним из символов entered или left, в зависимости от того, входит ли курсор в текст, имеющий это свойство, или выходит из него. Функции вызываются только при включении малой вкладки cursor-sensor-mode.

Когда переменная cursor-sensor-inhibit имеет ненулевое значение, свойство cursor-sensor-functions игнорируется.

composition

Это свойство текста используется для отображения последовательности символов как одного глифа, составленного из компонентов. Но значение самого свойства полностью внутреннее для Emacs и не должно изменяться напрямую, например, put-text-property.

minibuffer-message

Это свойство текста указывает, где отображать временные сообщения в активной минипанели. Конкретно, первый символ текста минипанели, который имеет это свойство, будет иметь временное сообщение, отображаемое перед ним. По умолчанию временные сообщения отображаются в конце текста минипанели. Это свойство текста используется функцией, которая является значением по умолчанию set-message-function (см. Отображение сообщений).

Переменная: inhibit-point-motion-hooks

Когда эта устаревшая переменная имеет ненулевое значение, обработчики point-left и point-entered не выполняются, и свойство intangible не имеет эффекта. Не устанавливайте эту переменную глобально; привязывайте её с помощью let. Поскольку затрагиваемые свойства устарели, значение по умолчанию этой переменной является t, что фактически отключает их.

Переменная: show-help-function

Если эта переменная не nil, она указывает на функцию, вызываемую для отображения строк справки. Эти строки могут быть help-echo свойствами, строками справки меню (см. Простые элементы меню, см. Расширенные элементы меню) или строками справки панели инструментов (см. Панель инструментов). Указанная функция вызывается с одним аргументом — строкой справки для отображения, которая передаётся через substitute-command-keys перед передачей функции, если только у строки справки нет свойства, отличного от nil help-echo-inhibit-substitution свойства на первом символе; см. Клавиши в документации. См. код режима всплывающих подсказок (см. Всплывающие подсказки в Руководстве по GNU Emacs) для примера режима, использующего show-help-function.

Переменная: face-filters-always-match

Если эта переменная не nil, фильтры выделения, которые определяют атрибуты, применяемые только при определённых условиях, будут считаться всегда совпадающими.

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/Special-Properties.html

Spec-Zone.ru

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