Переменная face-remapping-alist используется для буферно-локальных или
глобальных изменений внешнего вида лица. Например, она используется
для реализации команды text-scale-adjust (см. Масштабирование текста в Руководстве GNU Emacs).
Значение этой переменной является ассоциативным списком, элементы которого имеют вид
(лицо . переназначение). Это заставляет Emacs отображать
любой текст, имеющий лицо лицо, с использованием переназначение, а не
обычного определения лицо.
переназначение может быть любой спецификацией лица, подходящей для текстового
свойства face: либо лицо (т.е. имя лица или список свойств вида
«атрибут/значение»), либо список лиц. Подробности см. в описании
текстового свойства face в Свойства со специальным значением. переназначение служит полной спецификацией для
переназначенного лица — оно заменяет обычное определение лицо,
а не модифицирует его.
Если face-remapping-alist является буферно-локальным, его локальное значение
действует только в этом буфере. Если face-remapping-alist
включает лица, применимые только к определённым окнам, через использование
(:filtered (:window парам знач) спец),
то это лицо действует только в окнах, которые соответствуют условиям
фильтра (см. Свойства со специальным значением). Чтобы временно отключить фильтрацию лиц,
привяжите face-filters-always-match к значению, отличному от nil,
тогда все фильтры лиц будут соответствовать любому окну.
Примечание: переназначение лиц не является рекурсивным. Если переназначение ссылается
на то же имя лица лицо, либо напрямую, либо через
атрибут :inherit другого лица в переназначение, то эта
ссылка использует обычное определение лицо. Например, если
лицо 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 вида
(лицо относительная-спец-1 относительная-спец-2 ... базовая-спец)
где, как объяснено выше, каждая из относительная-спец-N и
базовая-спец является либо именем лица, либо списком свойств вида
«атрибут/значение». Каждая из записей относительного переназначения,
относительная-спец-N, управляется функциями
face-remap-add-relative и face-remap-remove-relative;
они предназначены для простых модификаций, например изменения размера текста.
Запись базового переназначения, базовая-спец, имеет
наименьший приоритет и управляется функциями face-remap-set-base
и face-remap-reset-base; она предназначена для основных режимов,
чтобы переназначать лица в управляемых ими буферах.
Эта функция добавляет спец-список как относительные переназначения для лица лицо в текущем буфере. спец-список должен быть списком, где каждый элемент является либо именем лица, либо списком свойств вида «атрибут/значение».
Возвращаемое значение является Lisp-объектом, который служит маркером; вы можете
передать этот объект как аргумент face-remap-remove-relative,
если вам нужно будет позднее удалить это переназначение.
;; Переназначить лицо 'escape-glyph' в комбинацию ;; лиц 'highlight' и 'italic': (face-remap-add-relative 'escape-glyph 'highlight 'italic) ;; Увеличить размер лица 'default' на 50%: (face-remap-add-relative 'default :height 1.5)
Обратите внимание, что буферно-локальное переназначение лиц не работает надёжно для
родительских лиц базовых лиц (см. Базовые лица). (Это
лица, которые используются в строках режима, строках заголовка и других базовых
украшениях окон и фреймов). Например,
mode-line-inactive наследует от mode-line, но
переназначение mode-line обычно не даёт желаемого эффекта на
mode-line-inactive, особенно если оно выполнено локально для некоторых
буферов. Вместо этого вам нужно переназначить mode-line-inactive
напрямую.
Эта функция удаляет относительное переназначение, ранее добавленное
face-remap-add-relative. маркер должен быть Lisp-объектом,
возвращённым face-remap-add-relative при добавлении переназначения.
Эта функция устанавливает базовое переназначение для лицо в текущем
буфере в спец-список. Если спец-список пуст, восстанавливается
базовое переназначение по умолчанию, аналогично вызову face-remap-reset-base
(см. ниже); обратите внимание, что это отличается от случая, когда спец-список содержит
единственное значение nil, что даёт противоположный результат (глобальное
определение лицо игнорируется).
Это перезаписывает значение базовая-спец по умолчанию, которое наследует глобальное определение лица, поэтому вызывающая сторона должна сама позаботиться о добавлении такого наследования, если это необходимо.
Эта функция устанавливает базовое переназначение лицо в его значение по умолчанию, которое наследует от глобального определения лицо.