Переназначение лиц
Переменная 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