Spec-Zone.ru › Elisp

Переназначение лиц

Переменная face-remapping-alist используется для локальных для буфера или глобальных изменений внешнего вида лица. Например, она используется для реализации команды text-scale-adjust (см. Масштаб текста в Руководстве GNU Emacs).

Переменная: face-remapping-alist

Значение этой переменной — ассоциативный список, элементы которого имеют вид (face . remapping). В результате Emacs отображает любой текст с лицом face используя remapping, а не обычное определение face.

remapping может быть любой спецификацией лица, подходящей для свойства текста face: либо лицо (то есть имя лица или список свойств с парами атрибут/значение), либо список лиц. Подробности см. в описании свойства текста face в разделе Свойства со специальным значением. remapping служит полной спецификацией переназначенного лица — она заменяет обычное определение face, а не изменяет его.

Если face-remapping-alist является локальной для буфера, её локальное значение действует только в этом буфере. Если face-remapping-alist включает лица, применимые только к определённым окнам, благодаря использованию (:filtered (:window param val) spec), это лицо действует только в окнах, соответствующих условиям фильтра (см. Свойства со специальным значением). Чтобы временно отключить фильтрацию лиц, свяжите face-filters-always-match с не-nil значением; тогда все фильтры лиц будут соответствовать любому окну.

Примечание: переназначение лиц не является рекурсивным. Если remapping ссылается на то же имя лица face напрямую или через атрибут :inherit какого-либо другого лица в remapping, такая ссылка использует обычное определение face. Например, если лицо mode-line переназначено с помощью этой записи в face-remapping-alist:

(mode-line italic mode-line)

то новое определение лица mode-line наследуется от лица italic и от обычного (не переназначенного) определения лица mode-line.

Следующие функции предоставляют интерфейс более высокого уровня для face-remapping-alist. Большинству кода Lisp следует использовать эти функции, а не задавать face-remapping-alist напрямую, чтобы не затрагивать переназначения, применённые в других местах. Эти функции предназначены для переназначений, локальных для буфера, поэтому все они в качестве побочного эффекта делают face-remapping-alist локальной для буфера. Они управляют записями face-remapping-alist следующего вида:

  (face relative-spec-1 relative-spec-2 ... base-spec)

где, как объяснено выше, каждое из значений relative-spec-N и base-spec является либо именем лица, либо списком свойств с парами атрибут/значение. Каждая запись относительного переназначения relative-spec-N управляется функциями face-remap-add-relative и face-remap-remove-relative; они предназначены для простых изменений, например изменения размера текста. Запись базового переназначения base-spec имеет наименьший приоритет и управляется функциями face-remap-set-base и face-remap-reset-base; она предназначена для того, чтобы основные режимы переназначали лица в управляемых ими буферах.

Функция: face-remap-add-relative face &rest specs

Эта функция добавляет specs как относительные переназначения лица face в текущем буфере. specs должен быть списком, каждый элемент которого является либо именем лица, либо списком свойств с парами атрибут/значение.

Возвращаемое значение — объект Lisp, служащий маркером; этот объект можно передать в качестве аргумента функции face-remap-remove-relative, если позднее потребуется удалить переназначение.

;; Remap the 'escape-glyph' face into a combination
;; of the 'highlight' and 'italic' faces:
(face-remap-add-relative 'escape-glyph 'highlight 'italic)

;; Increase the size of the 'default' face by 50%:
(face-remap-add-relative 'default :height 1.5)

Обратите внимание, что переназначение лица, локальное для буфера, ненадёжно работает для родительских лиц базовых лиц (см. Базовые лица). (Это лица, используемые в строках режимов, строках заголовков и других базовых элементах оформления окон и рамок.) Например, mode-line-inactive наследуется от mode-line, но переназначение mode-line обычно не даст желаемого эффекта для mode-line-inactive, особенно если оно выполняется локально для некоторых буферов. Вместо этого необходимо непосредственно переназначить mode-line-inactive.

Функция: face-remap-remove-relative cookie

Эта функция удаляет относительное переназначение, ранее добавленное функцией face-remap-add-relative. cookie должен быть объектом Lisp, возвращённым функцией face-remap-add-relative при добавлении переназначения.

Функция: face-remap-set-base face &rest specs

Эта функция задаёт базовое переназначение face в текущем буфере равным specs. Если specs пуст, восстанавливается базовое переназначение по умолчанию, как при вызове face-remap-reset-base (см. ниже); обратите внимание, что это отличается от случая, когда specs содержит единственное значение nil, результат которого противоположен (глобальное определение face игнорируется).

Эта функция перезаписывает значение base-spec по умолчанию, которое наследует глобальное определение лица, поэтому вызывающая сторона должна добавить такое наследование, если оно требуется.

Функция: face-remap-reset-base face

Эта функция задаёт базовому переназначению face значение по умолчанию, которое наследуется от глобального определения face.

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/Face-Remapping.html

Spec-Zone.ru

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