Ниже приведена таблица имен свойств текста, имеющих специальные встроенные значения. В следующих разделах перечислены несколько дополнительных специальных имен свойств, которые управляют заполнением и наследованием свойств. Все остальные имена не имеют стандартного значения, и вы можете использовать их по своему усмотрению.
Примечание: свойства composition, display,
invisible и intangible также могут приводить к перемещению точки в приемлемое место после каждой команды Emacs. См. Корректировка точки после команд.
categoryЕсли символ имеет свойство category, мы называем его категорией свойства символа. Оно должно быть символом. Свойства этого символа служат значениями по умолчанию для свойств символа.
face ¶Свойство face управляет внешним видом символа (см. Лица). Значением свойства может быть следующее:
(ключ
значение …), где каждый ключ — это имя атрибута лица, а значение — значение этого атрибута.
(foreground-color . имя-цвета)
или (background-color . имя-цвета). Это задает цвет переднего плана или фона, аналогично (:foreground
имя-цвета) или (:background имя-цвета). Эта форма поддерживается только для обратной совместимости и ее следует избегать.
(:filtered фильтр спецификация-лица), которая задает лицо, определяемое спецификацией-лица, но только если фильтр совпадает при использовании лица для отображения. Спецификация-лица может использовать любые из указанных выше форм. Фильтр должен иметь вид (:window параметр значение), который совпадает для окон, чей параметр параметр является eq к значению. Если переменная 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 является функцией, эта функция вызывается с тремя аргументами: окно, объект и позиция и должна возвращать строку помощи или nil для отсутствия. Первый аргумент, окно — это окно, в котором была найдена подсказка. Второй, объект — это буфер, оверлей или строка, имеющие свойство help-echo. Аргумент позиция следующий:
help-echo, а позиция — это позиция в буфере оверлея.
display), то позиция — это позиция в этой строке.
Если значение свойства help-echo не является ни функцией, ни строкой, оно вычисляется для получения строки помощи.
Вы можете изменить способ отображения текста помощи, установив переменную show-help-function (см. Отображение помощи).
Эта функция используется в строке режима и для другого активного текста.
help-echo-inhibit-substitutionЕсли первый символ строки help-echo имеет ненулевое свойство help-echo-inhibit-substitution, то она отображается как есть функцией show-help-function без передачи через substitute-command-keys.
left-fringe-helpright-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 с ненулевым значением, а затем удалите свойство. См. Буферы только для чтения.
inhibit-read-onlyСимволы, имеющие свойство inhibit-read-only, могут редактироваться даже в буферах только для чтения. См. Буферы только для чтения.
invisibleНенулевое свойство invisible может сделать символ невидимым на экране. Подробнее см. Невидимый текст.
inhibit-isearch ¶Ненулевое свойство inhibit-isearch заставит isearch пропускать текст.
intangibleЕсли группа последовательных символов имеет равные и ненулевые свойства intangible, то вы не можете поместить точку между ними. Если вы попытаетесь переместить точку вперед в группу, точка фактически переместится в конец группы. Если вы попытаетесь переместить точку назад в группу, точка фактически переместится в начало группы.
Если последовательные символы имеют неравные ненулевые свойства intangible, они принадлежат к разным группам; каждая группа обрабатывается отдельно, как описано выше.
Когда переменная inhibit-point-motion-hooks не равна nil (как это происходит по умолчанию), свойство intangible игнорируется.
Остерегайтесь: это свойство работает на очень низком уровне и влияет на множество кода неожиданным образом. Поэтому используйте его с особой осторожностью. Частое неправильное использование — это помещение свойства intangible на невидимый текст, что на самом деле не нужно, поскольку командный цикл все равно переместит точку за пределы невидимого текста в конце каждой команды. См. Корректировка точки после команд. По этим причинам это свойство устарело; используйте вместо него свойство cursor-intangible.
cursor-intangibleКогда включен второстепенный режим cursor-intangible-mode, точка перемещается от любой позиции, имеющей ненулевое свойство cursor-intangible, непосредственно перед перерисовкой. Обратите внимание, что «липкость» свойства (см. Липкость свойств текста) учитывается при вычислении допустимых позиций курсора, поэтому (например) чтобы вставить участок из пяти символов ‘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. Кроме того, если значение свойства cursor является целым числом, оно указывает количество позиций символов буфера, начиная с позиции, где начинается оверлей или свойство display, для которых курсор должен отображаться на этом символе. В частности, если значение свойства cursor символа равно числу n, курсор будет отображаться на этом символе для любой позиции буфера в диапазоне [поз-оверлея..поз-оверлея+n), где поз-оверлея — это начальная позиция оверлея, задаваемая overlay-start (см. Управление оверлеями), или позиция, с которой начинается свойство текста display в буфере.
Другими словами, символ строки со свойством cursor любого ненулевого значения — это символ, на котором отображать курсор, когда оверлей или строка отображения делают точку невидимой на экране. Значение свойства указывает, для каких позиций буфера отображать там курсор. Если значение является целым числом 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 не привязывается к ненулевому значению. Если функции изменяют буфер, вам следует рассмотреть возможность привязки этой переменной к ненулевому значению, чтобы предотвратить запуск хуков изменения при изменениях буфера. В противном случае вы должны быть готовы к рекурсивным вызовам. См. Хуки изменений.
Оверлеи также поддерживают свойство modification-hooks, но детали несколько иные (см. Свойства оверлеев).
insert-in-front-hooksinsert-behind-hooksОперация вставки текста в буфер также вызывает функции, перечисленные в свойстве insert-in-front-hooks следующего символа и в свойстве insert-behind-hooks предыдущего символа. Эти функции получают два аргумента: начало и конец вставленного текста. Функции вызываются после фактической вставки.
Когда эти функции вызываются, inhibit-modification-hooks привязано к ненулевому значению. Если функции изменяют буфер, вы можете захотеть привязать 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Это специальное свойство регистрирует список функций, реагирующих на движение курсора. Каждая функция в списке вызывается непосредственно перед перерисовкой с тремя аргументами: затронутое окно, предыдущая известная позиция курсора и один из символов entered или left, в зависимости от того, входит ли курсор в текст с этим свойством или покидает его. Функции вызываются только тогда, когда включен второстепенный режим 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) для текста, имеющего это свойство.
Когда эта устаревшая переменная не равна nil, хуки point-left и point-entered не запускаются, а свойство intangible не действует. Не устанавливайте эту переменную глобально; связывайте ее с помощью let. Поскольку затронутые свойства устарели, значение этой переменной по умолчанию — t, чтобы эффективно отключить их.
Если эта переменная не равна nil, она задает функцию, вызываемую для отображения строк помощи. Это могут быть свойства help-echo, строки помощи меню (см. Простые пункты меню, см. Расширенные пункты меню) или строки помощи панели инструментов (см. Панели инструментов). Указанная функция вызывается с одним аргументом — строкой помощи для отображения, которая передается через substitute-command-keys перед передачей функции, если только строка помощи не имеет ненулевого свойства help-echo-inhibit-substitution на своем первом символе; см. Подстановка привязок клавиш в документации. См. код режима Tooltip (см. Всплывающие подсказки в Руководстве GNU Emacs) для примера режима, использующего show-help-function.
Если эта переменная не равна nil, считается, что фильтры лиц, задающие атрибуты, применяемые только при выполнении определенных условий, всегда совпадают.