Spec-Zone.ru › Elisp

Свойства, имеющие особое значение

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

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

category

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

face

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

  • Имя лица (символ или строка).
  • Анонимное лицо: список свойств вида (keyword value …), где каждое 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 (см. Режим 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). Эти атрибуты всегда такие же, как у невыделенного текста.

cursor-face

Это свойство похоже на mouse-face, но применяется, когда точка (а не мышь) находится внутри текста с этим свойством. Подсветка происходит только при включённом режиме cursor-face-highlight-mode. Если переменная cursor-face-highlight-nonselected-window не равна nil, текст с этим лицом подсвечивается, даже если окно не выбрано, подобно тому, как highlight-nonselected-windows действует для области (см. Метка и область в Руководстве по GNU Emacs).

fontified

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

display

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

help-echo

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

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

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

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

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

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

help-echo-inhibit-substitution

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

left-fringe-help
right-fringe-help

Если у видимого текста экранной строки есть текстовое свойство left-fringe-help или right-fringe-help со строковым значением, то при наведении указателя мыши на поле продолжения соответствующей строки эта строка будет показана с помощью show-help-function (см. Отображение справки). Это полезно в сочетании с курсорами и растровыми изображениями в полях продолжения (см. Поля продолжения).

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, может сделать символ невидимым на экране. Подробности см. в разделе Невидимый текст.

inhibit-isearch

Свойство inhibit-isearch, не равное nil, заставляет isearch пропускать текст.

intangible

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

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

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

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

cursor-intangible

Когда включён второстепенный режим cursor-intangible-mode, непосредственно перед перерисовкой точка перемещается из любой позиции, имеющей свойство cursor-intangible, не равное nil. Обратите внимание: при вычислении допустимых позиций курсора учитывается «фиксация» свойства (см. Фиксация текстовых свойств). Поэтому, например, чтобы вставить фрагмент из пяти символов «x», в который курсор не сможет войти, следует сделать примерно так:

(insert
 (propertize "xxxx" 'cursor-intangible t)
 (propertize "x" 'cursor-intangible t 'rear-nonsticky t))

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

field

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

cursor

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

Иными словами, символ строки, имеющий свойство cursor со значением, отличным от nil, — это символ, на котором следует отображать курсор, когда наложение или строка отображения делают точку невидимой на экране. Значение свойства задаёт позиции буфера, для которых курсор должен отображаться именно там. Если значение — целое число n, курсор отображается там, когда точка находится в любой позиции между началом наложения или свойства display и позицией, отстоящей от него на n позиций. Если значение — любое другое значение, отличное от nil, курсор отображается там, только когда точка находится в позиции буфера, где начинается свойство 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 имеет приоритет над значением переменной wrap-prefix). См. Усечение.

line-prefix

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

Префикс строки также можно задать для всего буфера с помощью локальной для буфера переменной 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

Это специальное свойство хранит список функций, реагирующих на перемещение курсора. Каждая функция из списка вызывается непосредственно перед перерисовкой с тремя аргументами: затронутым окном, прежней известной позицией курсора и символом, обозначающим направление перемещения. Направлением может быть entered или left, в зависимости от того, входит ли курсор в текст с этим свойством или покидает его, либо moved, если курсор переместился внутри этого текста. Другие значения направления следует игнорировать. Правила определения того, считаются ли граничные позиции (в начале и конце наложения или участка текста со свойством) внутренними или внешними, совпадают с правилами для get-pos-property; см. Границы текстовых свойств и свойств наложений. Функции вызываются только при включённом второстепенном режиме cursor-sensor-mode.

Если переменная cursor-sensor-inhibit не равна nil, свойство cursor-sensor-functions игнорируется.

composition

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

minibuffer-message

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

display-line-numbers-disable

Это текстовое свойство запрещает отображение номеров строк (см. display-line-numbers в Руководстве по GNU Emacs) для текста, имеющего это свойство.

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

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

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

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

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

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

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

Spec-Zone.ru

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