42.12.3 Функции атрибутов лица

В этом разделе описаны функции для непосредственного доступа и изменения атрибутов именованного лица.

Функция: face-attribute face attribute &optional frame inherit

Эта функция возвращает значение атрибута attribute для face на frame. См. Атрибуты лица для списка поддерживаемых атрибутов.

Если frame опущен или равен nil, это означает выбранный фрейм (см. Ввод фокуса). Если frame равен t, эта функция возвращает значение указанного атрибута для вновь создаваемых фреймов, т.е. значение атрибута до применения спецификации лица в определении defface лица (см. Определение лиц) или спецификации, установленной с помощью face-spec-set. Это значение по умолчанию для attribute обычно равно unspecified, если только вы не указали другое значение с помощью set-face-attribute; см. ниже.

Если inherit равен nil, учитываются только атрибуты, непосредственно определенные face, поэтому возвращаемое значение может быть unspecified или относительным значением. Если inherit не равен nil, определение attribute в face объединяется с лицами, указанными в его атрибуте :inherit; однако возвращаемое значение все равно может быть unspecified или относительным. Если inherit — это лицо или список лиц, то результат дополнительно объединяется с этим лицом (или лицами), пока не станет определенным и абсолютным.

Чтобы гарантировать, что возвращаемое значение всегда определено и абсолютно, используйте значение default для inherit; это разрешит любые неопределенные или относительные значения путем объединения с лицом default (которое всегда полностью определено).

Например,

(face-attribute 'bold :weight)
     ⇒ bold
Функция: face-attribute-relative-p attribute value

Эта функция возвращает не nil, если value, используемое как значение атрибута лица attribute, является относительным. Это означает, что оно будет изменять, а не полностью переопределять любое значение, которое исходит от последующего лица в списке лиц или которое унаследовано от другого лица.

unspecified является относительным значением для всех атрибутов. Для :height значения с плавающей точкой и функции также являются относительными.

Например:

(face-attribute-relative-p :height 2.0)
     ⇒ t
Функция: face-all-attributes face &optional frame

Эта функция возвращает alist атрибутов face. Элементы результата являются парами имя-значение вида (имя-атрибута . значение-атрибута). Необязательный аргумент frame указывает фрейм, чье определение face следует возвращать; если он опущен или равен nil, возвращаемое значение описывает атрибуты по умолчанию face для вновь создаваемых фреймов, т.е. значения, которые эти атрибуты имеют до применения спецификации лица в определении defface лица или спецификации, установленной с помощью face-spec-set. Эти значения атрибутов по умолчанию обычно равны unspecified, если только вы не указали другое значение с помощью set-face-attribute; см. ниже.

Функция: merge-face-attribute attribute value1 value2

Если value1 является относительным значением для атрибута лица attribute, возвращает его, объединенное с базовым значением value2; в противном случае, если value1 является абсолютным значением для атрибута лица attribute, возвращает value1 без изменений.

Обычно Emacs использует спецификации лиц каждого лица для автоматического вычисления его атрибутов на каждом фрейме (см. Определение лиц). Функция set-face-attribute может переопределить это вычисление, непосредственно назначая атрибуты лицу, либо для конкретного фрейма, либо для всех фреймов. Эта функция в основном предназначена для внутреннего использования.

Функция: set-face-attribute face frame &rest arguments

Эта функция устанавливает один или несколько атрибутов face для frame. Атрибуты, указанные таким образом, переопределяют спецификацию(ии) лица, принадлежащие face. См. Атрибуты лица для списка поддерживаемых атрибутов.

Дополнительные аргументы arguments определяют устанавливаемые атрибуты и их значения. Они должны состоять из чередующихся имен атрибутов (таких как :family или :underline) и значений. Таким образом,

(set-face-attribute 'foo nil :weight 'bold :slant 'italic)

устанавливает атрибут :weight в bold и атрибут :slant в italic.

Если frame равен t, эта функция устанавливает атрибуты по умолчанию для вновь создаваемых фреймов; они фактически переопределят значения атрибутов, указанные в defface. Если frame равен nil, эта функция устанавливает атрибуты для всех существующих фреймов, а также для вновь создаваемых фреймов.

Чтобы сбросить значение атрибута, то есть указать, что лицо само по себе не определяет значение для атрибута, используйте специальное значение unspecified (не nil!) для атрибута и установите аргумент frame в t в дополнение к вызову с frame, установленным в nil. Это связано с тем, что атрибуты по умолчанию для вновь создаваемых фреймов объединяются со спецификацией лица в defface при создании нового фрейма, и поэтому наличие unspecified в атрибутах по умолчанию для новых фреймов не сможет переопределить defface; специальный вызов этой функции, описанный выше, обеспечит переопределение defface.

Обратите внимание, что пары атрибут-значение вычисляются в том порядке, в котором они указаны, за исключением атрибутов :family и :foundry, которые вычисляются первыми. Это означает, что если определенный атрибут указан более одного раза, будет использоваться только последнее значение. Это также означает, что в некоторых случаях другой порядок атрибутов даст разные результаты. Например, когда :weight указан перед :font, значение веса применяется к текущему шрифту лица и может быть округлено до ближайшего доступного веса этого шрифта, тогда как когда :font указан перед :weight, значение веса применяется к указанному шрифту.

Следующие команды и функции в основном обеспечивают совместимость со старыми версиями Emacs. Они работают путем вызова set-face-attribute. Значения t и nil (или опущенные) для их аргумента frame обрабатываются так же, как в set-face-attribute и face-attribute. Команды читают свои аргументы с использованием мини-буфера, если вызываются интерактивно.

Команда: set-face-foreground face color &optional frame
Команда: set-face-background face color &optional frame

Эти команды устанавливают атрибут :foreground (или атрибут :background, соответственно) face в color.

Команда: set-face-stipple face pattern &optional frame

Эта команда устанавливает атрибут :stipple face в pattern.

Команда: set-face-font face font &optional frame

Изменить атрибуты, связанные со шрифтом, face на атрибуты font (строка или объект шрифта). См. face-font-attribute для поддерживаемых форматов аргумента font. Эта функция устанавливает атрибут :font лица, а также косвенно атрибуты :family, :foundry, :width, :height, :weight и :slant, как определено шрифтом. Если frame не равен nil, изменяет атрибуты только на указанном фрейме.

Функция: set-face-bold face bold-p &optional frame

Эта функция устанавливает атрибут :weight face в normal, если bold-p равен nil, и в bold в противном случае.

Функция: set-face-italic face italic-p &optional frame

Эта функция устанавливает атрибут :slant face в normal, если italic-p равен nil, и в italic в противном случае.

Команда: set-face-underline face underline &optional frame

Эта команда устанавливает атрибут :underline face в underline.

Команда: set-face-inverse-video face inverse-video-p &optional frame

Эта команда устанавливает атрибут :inverse-video face в inverse-video-p.

Команда: invert-face face &optional frame

Эта команда меняет местами цвета переднего плана и фона лица face.

Команда: set-face-extend face extend &optional frame

Эта команда устанавливает атрибут :extend face в extend.

Следующие функции исследуют атрибуты лица. Они в основном обеспечивают совместимость со старыми версиями Emacs. Если вы не указываете frame, они относятся к выбранному фрейму; t относится к данным по умолчанию для новых фреймов. Они возвращают unspecified, если лицо не определяет никакого значения для этого атрибута. Если inherit равен nil, возвращается только атрибут, непосредственно определенный лицом. Если inherit не равен nil, любые лица, указанные в его атрибуте :inherit, также учитываются, и если inherit — это лицо или список лиц, то они также учитываются, пока не будет найден указанный атрибут. Чтобы гарантировать, что возвращаемое значение всегда определено, используйте значение default для inherit.

Функция: face-font face &optional frame character

Эта функция возвращает имя шрифта, используемого указанным face.

Если указан необязательный аргумент frame, она возвращает имя шрифта face для этого фрейма; frame по умолчанию равен выбранному фрейму, если он равен nil или опущен. Если frame равен t, функция сообщает о шрифтах по умолчанию для face, которые будут использоваться для новых фреймов.

По умолчанию возвращаемый шрифт предназначен для отображения символов ASCII, но если frame — это что угодно, кроме t, и указан необязательный третий аргумент character, функция возвращает имя шрифта, используемого face для этого символа.

Функция: face-foreground face &optional frame inherit
Функция: face-background face &optional frame inherit

Эти функции возвращают цвет переднего плана (или цвет фона, соответственно) лица face в виде строки. Если цвет не указан, они возвращают nil.

Функция: face-stipple face &optional frame inherit

Эта функция возвращает имя фонового точечного узора лица face или nil, если его нет.

Функция: face-bold-p face &optional frame inherit

Эта функция возвращает не nil, если атрибут :weight face является более жирным, чем нормальный (т.е. одним из semi-bold, bold, extra-bold или ultra-bold). В противном случае она возвращает nil.

Функция: face-italic-p face &optional frame inherit

Эта функция возвращает не nil, если атрибут :slant face равен italic или oblique, и nil в противном случае.

Функция: face-underline-p face &optional frame inherit

Эта функция возвращает не nil, если лицо face определяет атрибут :underline, отличный от nil.

Функция: face-inverse-video-p face &optional frame inherit

Эта функция возвращает не nil, если лицо face определяет атрибут :inverse-video, отличный от nil.

Функция: face-extend-p face &optional frame inherit

Эта функция возвращает не nil, если лицо face определяет атрибут :extend, отличный от nil. Аргумент inherit передается в face-attribute.