Атрибуты шрифта определяют внешний вид шрифта. В следующей таблице перечислены все атрибуты шрифта, их возможные значения и их эффекты.
Помимо значений, указанных ниже, каждый атрибут шрифта может иметь
значение unspecified. Это специальное значение означает, что
шрифт не указывает этот атрибут напрямую. Атрибут unspecified
показывает Emacs обратиться вместо этого к родительскому шрифту (см.
описание атрибута :inherit ниже); или, в противном
случае, к базовому шрифту (см. Отображение шрифтов).
(Однако unspecified не является допустимым значением в
defface.)
Атрибут шрифта также может иметь значение reset. Это
специальное значение означает значение соответствующего атрибута шрифта
default.
Шрифт default должен явно указывать все атрибуты и
не может использовать специальное значение reset.
Некоторые из этих атрибутов имеют смысл только для определенных типов отображения. Если ваше отображение не может обработать определенный атрибут, этот атрибут игнорируется.
:familyИмя семейства шрифтов (строка). Для получения дополнительной
информации о семействах шрифтов см. Шрифты в
Руководстве GNU Emacs. Функция
font-family-list (см. ниже) возвращает список доступных
имен семейств.
:foundryИмя мастерской шрифтов для семейства шрифтов,
указанного атрибутом :family (строка). См. Шрифты в
Руководстве GNU Emacs.
:widthОтносительная ширина символа. Это должно быть одно из символов
ultra-condensed, extra-condensed,
condensed, semi-condensed, normal,
regular, medium, semi-expanded,
expanded, extra-expanded или
ultra-expanded.
:heightВысота шрифта. В самом простом случае это целое число в единицах 1/10 пункта.
Значение также может быть числом с плавающей запятой или функцией, которая определяет высоту относительно базового шрифта (см. Отображение шрифтов). Число с плавающей запятой определяет, на какую величину масштабировать высоту базового шрифта. Значение функции вызывается с одним аргументом — высотой базового шрифта — и возвращает высоту нового шрифта. Если функции передается целое число, она должна вернуть целое число.
Высота шрифта по умолчанию должна быть указана с использованием целого числа; значения с плавающей запятой и функции не допускаются.
:weightВес шрифта — одно из символов (от самого плотного до самого
светлого): ultra-bold, extra-bold,
bold, semi-bold, normal,
semi-light, light, extra-light
или ultra-light. В текстовых терминалах, поддерживающих
текст переменной яркости, любой вес, превышающий нормальный, отображается
как сверхяркий, а любой вес, меньший нормального, отображается как полуяркий.
:slantНаклон шрифта — одно из символов italic,
oblique, normal, reverse-italic
или reverse-oblique. В текстовых терминалах, поддерживающих
текст переменной яркости, наклонный текст отображается как полуяркий.
:foregroundЦвет переднего плана, строка. Значение может быть именем цвета, определенным системой, или шестнадцатеричным указанием цвета. См. Имена цветов. На черно-белых дисплеях определенные оттенки серого реализуются с помощью точечных узоров.
:distant-foregroundАльтернативный цвет переднего плана, строка. Это похоже на
:foreground, но цвет используется как передний план только тогда,
когда цвет фона близок к цвету, который использовался бы в качестве
переднего плана. Это полезно, например, при выделении текста (т.е.
региональный шрифт). Если текст имеет передний план, видимый с помощью
регионального шрифта, используется этот передний план. Если передний план
близок к фону регионального шрифта, вместо этого используется
:distant-foreground, чтобы текст был читаемым.
:backgroundЦвет фона, строка. Значение может быть именем цвета, определенным системой, или шестнадцатеричным указанием цвета. См. Имена цветов.
:underlineНужно ли подчеркивать символы и как. Возможные значения атрибута
:underline:
nilНе подчеркивать.
tПодчеркивать цветом переднего плана шрифта.
Подчеркивание цветом color, строка, указывающая цвет.
(:color color :style style :position position)color — это либо строка, либо символ
foreground-color, означающий цвет переднего плана шрифта.
Опущение атрибута :color означает использование
цвета переднего плана шрифта. style — это символ,
который устанавливает стиль линии подчеркивания. Он должен быть одним из
line, double-line, wave,
dots или dashes. Графические рамки в
большинстве оконных систем поддерживают все вышеупомянутые стили
подчеркивания, в то время как в текстовых терминалах double-line,
wave и dots зависят от наличия
возможностей Smulx или Su terminfo.
Опущение атрибута :style означает использование
прямой линии. position, если не nil,
означает отображение подчеркивания в области спуска текста, а не на
базовой линии. Если это число, то оно указывает количество пикселей
выше спуска для отображения подчеркивания.
:overlineНужно ли подчеркивать символы сверху и каким цветом. Если
значение равно t, подчеркивание использует цвет
переднего плана шрифта. Если значение — строка, подчеркивание использует
этот цвет. Значение nil означает не подчеркивать сверху.
:strike-throughНужно ли перечеркивать символы и каким цветом. Значение используется
как для :overline.
:boxНужно ли рисовать рамку вокруг символов, ее цвет, ширину линий
рамки и 3D-внешний вид. Вот возможные значения атрибута :box
и их значение:
nilНе рисовать рамку.
tНарисовать рамку с линиями шириной 1, в цвете переднего плана.
Нарисовать рамку с линиями шириной 1, в цвете color.
(:line-width (vwidth . hwidth) :color color :style style)Вы можете явно указать все аспекты рамки с помощью plist такого вида. Любой элемент в этом plist может быть опущен.
Значения vwidth и hwidth
указывают соответственно на ширину вертикальных и горизонтальных линий для
рисования; по умолчанию они равны (1 . 1). Отрицательная горизонтальная или
вертикальная ширина — n означает рисование линии
шириной n, занимающей пространство базового текста, таким образом
избегая увеличения высоты или ширины символа. Для упрощения ширина
может быть указана только одним числом n вместо
списка; такой случай эквивалентен ((abs n) . n).
Значение color указывает цвет, с которым рисовать. По
умолчанию это цвет фона шрифта для 3D-рамки и flat-button,
и цвет переднего плана шрифта для других рамок.
Значение style указывает, рисовать ли 3D-рамку. Если
это released-button, рамка выглядит как 3D-кнопка,
которая не нажата. Если это pressed-button, рамка выглядит
как 3D-кнопка, которая нажата. Если это nil,
flat-button или опущено, используется простая 2D-рамка.
Если вы используете атрибут шрифта :box для строк,
отображаемых вместо текста буфера через свойство текста display,
могут применяться особые соображения, если окружающий текст буфера также
имеет атрибут шрифта :box. См. Спецификации отображения, заменяющие текст.
Также обратите внимание, что вертикальные линии рамки рисуются только тогда,
когда атрибут :box меняется с nil на
не-nil или наоборот; две последовательные свойства шрифта с
не-nil атрибутом :box будут отображаться без
вертикальной линии между ними.
:inverse-videoНужно ли отображать символы в инвертированном видео. Значение должно
быть t (да) или nil (нет).
:stippleФоновый точечный узор, битовая карта.
Значение может быть строкой; это должно быть имя файла, содержащего
битовые данные X в внешнем формате. Файл находится в каталогах, перечисленных
в переменной x-bitmap-file-path.
Или значение может указывать битовую карту напрямую, в виде списка
такого вида: (width height data).
Здесь width и height указывают размер в
пикселях, а data — это строка, содержащая необработанные
биты битовой карты, построчно. Каждая строка занимает (width + 7) / 8
последовательных байтов в строке (что должно быть строкой unibyte для наилучших
результатов). Это означает, что каждая строка всегда занимает по крайней мере
один целый байт.
Если значение равно nil, это означает, что не используется
точечный узор.
Обычно вам не нужно устанавливать атрибут точечного узора, потому что он автоматически используется для обработки определенных оттенков серого.
:fontШрифт, используемый для отображения шрифта. Его значение должно быть объектом шрифта или набором шрифтов. Если это объект шрифта, он указывает шрифт, который будет использоваться шрифтом для отображения символов ASCII. См. Низкоуровневое представление шрифта для информации об объектах шрифтов, спецификациях шрифтов и сущностях шрифтов. См. Наборы шрифтов для информации о наборах шрифтов.
При указании этого атрибута с помощью
set-face-attribute или
set-face-font (см. Функции атрибутов шрифта),
вы также можете предоставить спецификацию шрифта, сущность шрифта или строку.
Emacs преобразует такие значения в соответствующий объект шрифта и
сохраняет этот объект шрифта как фактическое значение атрибута. Если вы
указываете строку, содержимое строки должно быть именем шрифта (см. Шрифты в
Руководстве GNU Emacs); если имя шрифта — это XLFD, содержащий
подстановочные знаки, Emacs выбирает первый шрифт, соответствующий этим
подстановочным знакам. Указание этого атрибута также изменяет значения
атрибутов :family,
:foundry, :width, :height,
:weight и
:slant.
:inheritИмя шрифта, от которого наследуются атрибуты, или список имен
шрифтов. Атрибуты из наследуемых шрифтов объединяются в шрифт, как если бы
это был базовый шрифт, с более высоким приоритетом, чем у базовых
шрифтов (см. Отображение шрифтов).
Если шрифт для наследования unspecified, он рассматривается
так же, как nil, поскольку Emacs никогда не объединяет
атрибуты :inherit. Если используется список шрифтов,
атрибуты из шрифтов, стоящих раньше в списке, переопределяют атрибуты из
более поздних шрифтов.
:extendНужно ли, чтобы этот шрифт расширялся за конец строки и влиял на
отображение пустого пространства между концом строки и краем окна. Значение
должно быть t, чтобы отображать пустое пространство
между концом строки и краем окна с использованием этого шрифта, или
nil, чтобы не использовать этот шрифт для пространства между
концом строки и краем окна. Когда Emacs объединяет несколько шрифтов для
отображения пустого пространства за концом строки, объединяются только те
шрифты, у которых :extend не равно nil.
По умолчанию только небольшое количество шрифтов, в частности,
region, имеют этот атрибут. Этот атрибут отличается от
других тем, что когда тема не указывает явное значение для шрифта,
используется значение из исходного определения шрифта с помощью
defface (см. Определение шрифтов).
Некоторые режимы, такие как hl-line-mode, используют
шрифт с свойством :extend для выделения всей текущей
строки. Однако обратите внимание, что Emacs всегда позволит вам переместить
курсор после последнего символа в буфере, и если буфер заканчивается
символом новой строки, курсор может быть размещен на том, что кажется
строкой в конце буфера — но Emacs не может выделить эту «строку», потому что
ее на самом деле не существует.
Эта функция возвращает список доступных имен семейств шрифтов.
Необязательный аргумент frame указывает рамку, на которой
должен отображаться текст; если он равен nil, используется
выбранная рамка.
Эта переменная указывает минимальное расстояние между базовой линией и подчеркиванием в пикселях при отображении подчеркнутого текста.
Эта переменная указывает список каталогов для поиска
файлов битовой карты для атрибута :stipple.
Это возвращает t, если object является
допустимой спецификацией битовой карты, подходящей для использования с
:stipple (см. выше). В противном случае возвращается
nil.