Обычно нет необходимости напрямую управлять шрифтами. Если вам всё же нужно это сделать, данный раздел объясняет, как.
В языке Emacs Lisp шрифты представлены тремя различными типами объектов Lisp: объектами шрифта, спецификациями шрифта и сущностями шрифта.
Возвращает t, если объект является объектом шрифта, спецификацией шрифта или сущностью шрифта. В противном случае возвращает nil.
Необязательный аргумент тип, если он не равен nil, определяет точный тип объекта Lisp, который следует проверять. В этом случае тип должен быть одним из font-object, font-spec или font-entity.
Объект шрифта — это объект Lisp, представляющий шрифт, который Emacs открыл. Объекты шрифта нельзя изменять в Lisp, но их можно исследовать.
Возвращает объект шрифта, используемый для отображения символа в позиции позиция в окне окно. Если окно равно nil, по умолчанию используется выбранное окно. Если строка равна nil, то позиция указывает позицию в текущем буфере; в противном случае строка должна быть строкой, а позиция указывает позицию в этой строке.
Спецификация шрифта — это объект Lisp, содержащий набор параметров, которые можно использовать для поиска шрифта. Более одного шрифта могут соответствовать параметрам в спецификации шрифта.
Возвращает новую спецификацию шрифта, используя параметры из аргументы, которые должны быть парами свойство-значение. Возможные параметры:
:nameИмя шрифта (строка) в формате XLFD, Fontconfig или GTK+. См. Шрифты в Руководстве по GNU Emacs.
:family:foundry:weight:slant:widthЭти свойства имеют те же значения, что и одноимённые атрибуты стиля. См. Атрибуты стиля. :family и :foundry являются строками, а остальные три — символами. В качестве примеров значений: :slant может быть italic, :weight может быть bold, а :width может быть normal.
:sizeРазмер шрифта — либо неотрицательное целое число, задающее размер в пикселях, либо число с плавающей запятой, задающее размер в пунктах.
:adstyleДополнительная типографская информация о шрифте, например «sans». Значение должно быть строкой или символом.
:registryРеестр кодировки и набор символов шрифта, например «iso8859-1». Значение должно быть строкой или символом.
:dpiРазрешение в точках на дюйм, для которого разработан шрифт. Значение должно быть неотрицательным числом.
:spacingИнтервал шрифта: пропорциональный, двойной, моноширинный или ячеечный. Значение должно быть либо целым числом (0 для пропорционального, 90 для двойного, 100 для моноширинного, 110 для ячеечного), либо однобуквенным символом (одним из P, D, M или C).
:avgwidthСредняя ширина шрифта в единицах 1/10 пикселя. Значение должно быть неотрицательным числом.
:scriptСистема письма, которую должен поддерживать шрифт (символ).
:langЯзык, который должен поддерживать шрифт. Значение должно быть символом, имя которого является двухбуквенным кодом языка ISO-639. На X значение сопоставляется с полем «Additional Style» в имени XLFD шрифта, если оно не пусто. В MS-Windows шрифты, соответствующие спецификации, должны поддерживать кодовые страницы, необходимые для данного языка. В настоящее время с этим свойством поддерживается лишь небольшой набор языков CJK: «ja», «ko» и «zh».
:otf ¶Шрифт должен быть шрифтом OpenType, поддерживающим эти функции OpenType, при условии, что Emacs скомпилирован с библиотекой, такой как «libotf» в GNU/Linux, которая поддерживает сложную верстку текста для систем письма, нуждающихся в этом. Значение должно быть списком вида
(script-tag langsys-tag gsub gpos)
где script-tag — это символ тега сценария OpenType; langsys-tag — это символ тега языковой системы OpenType или nil для использования языковой системы по умолчанию; gsub — это список символов тегов функций OpenType GSUB или nil, если ни одна не требуется; а gpos — это список символов тегов функций OpenType GPOS или nil, если ни одна не требуется. Если gsub или gpos являются списком, то элемент nil в этом списке означает, что шрифт не должен соответствовать ни одному из оставшихся символов тегов. Элемент gpos может быть опущен. Список тегов сценариев, языков и функций OpenType см. в списке зарегистрированных тегов OTF.
:type ¶Символ, определяющий бэкенд шрифта, используемый для отрисовки символов. Возможные значения зависят от платформы и того, как Emacs был сконфигурирован при сборке. Типичные значения включают ftcrhb и xfthb на X, harfbuzz в MS-Windows, ns в GNUstep и т. д. Также может быть nil, если не указано, обычно в спецификации шрифта.
Устанавливает свойство шрифта свойство в спецификации шрифта спецификация-шрифта в значение. свойство может быть любым из описанных выше.
Сущность шрифта — это ссылка на шрифт, который не обязательно должен быть открыт. Её свойства являются промежуточными между объектом шрифта и спецификацией шрифта: подобно объекту шрифта и в отличие от спецификации шрифта, она ссылается на один конкретный шрифт. В отличие от объекта шрифта, создание сущности шрифта не загружает содержимое этого шрифта в память компьютера. Emacs может открывать несколько объектов шрифта разных размеров из одной сущности шрифта, ссылающейся на масштабируемый шрифт.
Эта функция возвращает сущность шрифта, которая наилучшим образом соответствует спецификации шрифта спецификация-шрифта на фрейме фрейм. Если фрейм равен nil, по умолчанию используется выбранный фрейм.
Эта функция возвращает список всех сущностей шрифта, соответствующих спецификации шрифта спецификация-шрифта.
Необязательный аргумент фрейм, если не равен nil, определяет фрейм, на котором должны отображаться шрифты. Необязательный аргумент num, если не равен nil, должен быть целым числом, определяющим максимальную длину возвращаемого списка. Необязательный аргумент предпочитаемый, если не равен nil, должен быть другой спецификацией шрифта, которая используется для управления порядком возвращаемого списка; возвращаемые сущности шрифта сортируются в порядке убывания близости к этой спецификации шрифта.
Если вы вызываете set-face-attribute и передаёте спецификацию шрифта, сущность шрифта или строку с именем шрифта в качестве значения атрибута :font, Emacs открывает наилучший соответствующий шрифт, доступный для отображения. Затем он сохраняет соответствующий объект шрифта как фактическое значение атрибута :font для этого стиля.
Следующие функции можно использовать для получения информации о шрифте. Для этих функций аргумент шрифт может быть объектом шрифта, сущностью шрифта или спецификацией шрифта.
Эта функция возвращает значение свойства шрифта свойство для шрифт. свойство может быть любым из поддерживаемых font-spec.
Если шрифт является спецификацией шрифта, и спецификация шрифта не задаёт свойство, возвращаемое значение — nil. Если шрифт является объектом шрифта или сущностью шрифта, значение для свойства :script может быть списком систем письма, поддерживаемых шрифтом, а значение свойства :otf является парой вида (gsub . gpos), где gsub и gpos являются списками, представляющими функции OpenType, поддерживаемые шрифтом, вида
((script-tag (langsys-tag feature…) …) …)
где script-tag, langsys-tag и feature являются символами, представляющими теги верстки OpenType.
Если шрифт является объектом шрифта, специальное свойство :combining-capability не равно nil, если бэкенд шрифта шрифт поддерживает отрисовку комбинируемых символов для не-OpenType шрифтов.
Эта функция возвращает список атрибутов стиля, соответствующих шрифт. Необязательный аргумент фрейм определяет фрейм, на котором отображается шрифт. Если он равен nil, используется выбранный фрейм. Возвращаемое значение имеет вид
(:family family :height height :weight weight :slant slant :width width)
где значения family, height, weight, slant и width являются значениями атрибутов стиля. Некоторые из этих пар ключ-атрибут могут быть опущены в списке, если они не заданы шрифт.
Эта функция возвращает строку XLFD (X Logical Font Descriptor), соответствующую шрифт. См. Шрифты в Руководстве по GNU Emacs для получения информации об XLFD.
Если необязательный аргумент fold-wildcards не равен nil, последовательные шаблоны в XLFD сворачиваются в один.
Если необязательный аргумент long-xlfds опущен или равен nil, функция возвращает nil, если XLFD превышает 255 символов в длину; это сделано для совместимости с протоколом X, который требует ограничения длины XLFD. Если long-xlfds не равен nil, это ограничение снимается, и функция может возвращать XLFD любой длины.
Следующие две функции возвращают важную информацию о шрифте.
Эта функция возвращает информацию о шрифте, заданном его имя (строкой), в том виде, в котором он используется на фрейм. Если фрейм опущен или равен nil, по умолчанию используется выбранный фрейм.
Значение, возвращаемое функцией, является вектором вида [opened-name full-name size height
baseline-offset relative-compose default-ascent
max-width ascent descent space-width
average-width filename capability]. Вот описание каждого компонента этого вектора:
Имя, использованное для открытия шрифта, строка.
Полное имя шрифта, строка.
Размер шрифта в пикселях.
Высота шрифта в пикселях.
Смещение в пикселях от базовой линии ASCII, положительное вверх.
Числа, управляющие составными символами.
Максимальная ширина продвижения шрифта.
Верхний и нижний выступы этого шрифта. Сумма этих двух чисел должна быть равна значению height выше.
Ширина символа пробела в пикселях.
Средняя ширина символов шрифта. Emacs использует это для расчёта расположения текста на экране; если значение average-width равно нулю, Emacs использует значение space-width вместо него для этих целей.
Имя файла шрифта в виде строки. Может быть nil, если бэкенд шрифта не предоставляет способа узнать имя файла шрифта.
Список, первый элемент которого является символом, представляющим тип шрифта: x, opentype, truetype, type1, pcf или bdf. Для шрифтов OpenType список включает 2 дополнительных элемента, описывающих функции GSUB и GPOS, поддерживаемые шрифтом. Каждый из этих элементов является списком вида ((script (langsys feature …) …) …), где script — это символ, представляющий тег сценария OpenType, langsys — это символ, представляющий тег языковой системы OpenType (или nil, означающий языковую систему по умолчанию), а каждый feature — это символ, представляющий тег функции OpenType.
Эта функция возвращает информацию об объект-шрифта. (В отличие от font-info, которая принимает имя шрифта (строку) в качестве аргумента.)
Значение, возвращаемое функцией, является вектором вида [name filename pixel-size max-width
ascent descent space-width average-width
capability]. Вот описание каждого компонента этого вектора:
Имя шрифта, строка.
Имя файла шрифта в виде строки. Может быть nil, если бэкенд шрифта не предоставляет способа узнать имя файла шрифта.
Размер шрифта в пикселях, использованный для открытия шрифта.
Максимальная ширина продвижения шрифта.
Верхний и нижний выступы этого шрифта. Сумма этих двух чисел даёт высоту шрифта.
Ширина символа пробела в пикселях.
Средняя ширина символов шрифта. Если она равна нулю, Emacs использует значение space-width при расчёте расположения текста на экране.
Список, первый элемент которого является символом, представляющим тип шрифта: x, opentype, truetype, type1, pcf или bdf. Для шрифтов OpenType список включает 2 дополнительных элемента, описывающих функции GSUB и GPOS, поддерживаемые шрифтом. Каждый из этих элементов является списком вида ((script (langsys feature …) …) …), где script — это символ, представляющий тег сценария OpenType, langsys — это символ, представляющий тег языковой системы OpenType (или nil, означающий языковую систему по умолчанию), а каждый feature — это символ, представляющий тег функции OpenType.
Следующие четыре функции возвращают информацию о размерах шрифтов, используемых различными стилями, что позволяет учитывать различные аспекты верстки в программах на Lisp. Эти функции учитывают переопределение стилей, возвращая информацию о переопределённом стиле, если данный стиль был переопределён. См. Переопределение стилей.
Эта функция возвращает среднюю ширину в пикселях шрифта, используемого стилем по умолчанию текущего буфера, для выбранного фрейма.
Эта функция возвращает высоту в пикселях шрифта, используемого стилем по умолчанию текущего буфера, для выбранного фрейма.
Эта функция возвращает среднюю ширину в пикселях для шрифта, используемого стиль в окно. Указанное окно должно быть активным окном. Если nil или опущено, окно по умолчанию равно выбранному окну, а стиль по умолчанию равен стилю по умолчанию в окно.
Эта функция возвращает высоту в пикселях для шрифта, используемого стиль в окно. Указанное окно должно быть активным окном. Если nil или опущено, окно по умолчанию равно выбранному окну, а стиль по умолчанию равен стилю по умолчанию в окно.