Свойства со специальным значением
Вот таблица имен свойств текста, которые имеют особые встроенные значения. В следующих разделах перечислены несколько дополнительных специальных имен свойств, которые управляют заполнением и наследованием свойств. Все остальные имена не имеют стандартного значения, и вы можете использовать их по своему усмотрению.
Примечание: свойства 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 на размещение курсора на любом нужном символе этих строк, придав этому символу свойство текста, отличное от
nilcursor. Кроме того, если значение свойства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-hooksinsert-behind-hooks-
Операция вставки текста в буфер также вызывает функции, указанные в свойстве
insert-in-front-hooksследующего символа и в свойствеinsert-behind-hooksпредыдущего символа. Эти функции получают два аргумента, начало и конец вставляемого текста. Функции вызываются после фактической вставки.Когда эти функции вызываются,
inhibit-modification-hooksпривязано к ненулевомуnil. Если функции изменяют буфер, вы можете привязатьinhibit-modification-hooksкnil, чтобы вызвать обработчики изменений для этих изменений. Однако, это может вызвать рекурсивный вызов собственного обработчика изменений, поэтому убедитесь, что вы готовы к этому.См. также Обработчики изменений для других обработчиков, которые вызываются при изменении текста в буфере.
point-enteredpoint-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перед передачей функции, если только у строки справки нет свойства, отличного отnilhelp-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