42.12.1 Атрибуты шрифта

Атрибуты шрифта определяют внешний вид шрифта. В следующей таблице перечислены все атрибуты шрифта, их возможные значения и их эффекты.

Помимо значений, указанных ниже, каждый атрибут шрифта может иметь значение 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 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, в цвете переднего плана.

color

Нарисовать рамку с линиями шириной 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 не может выделить эту «строку», потому что ее на самом деле не существует.

Функция: font-family-list &optional frame

Эта функция возвращает список доступных имен семейств шрифтов. Необязательный аргумент frame указывает рамку, на которой должен отображаться текст; если он равен nil, используется выбранная рамка.

Пользовательский вариант: underline-minimum-offset

Эта переменная указывает минимальное расстояние между базовой линией и подчеркиванием в пикселях при отображении подчеркнутого текста.

Пользовательский вариант: x-bitmap-file-path

Эта переменная указывает список каталогов для поиска файлов битовой карты для атрибута :stipple.

Функция: bitmap-spec-p object

Это возвращает t, если object является допустимой спецификацией битовой карты, подходящей для использования с :stipple (см. выше). В противном случае возвращается nil.