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