15 июня 2005 г
Пополнение личной коллекции консольных шрифтов - насущная задача для пользователя BSD-систем. Для и пользователю Linux отнюдь не помешает расширить свой репертуар. Для него это особенно актуально в связи с распространением UTF-8 - штатно поддерживающие эту кодировку шрифты во всех известных мне дистрибутивах Linux (например, из семейства LatArCyrHeb) производят впечатление вполне отвратительное.
И потому эта интермедия посвящается замечательному пакету terminus-fonts
. Он - болгарского происхождения, автор его - Dimitar Toshkov Zhekov (затрудняюсь транскирибировать с языка братьев-славян) и проживает здесь: http://www.is-vn.bg/hamster/jimmy-en.html в виде архива tar.gz объемом около 100 Кбайт. Его можно найти также в портах FreeBSD и в портежах Gentoo, вероятно, и в других системах. Для FreeBSD, в частности, он доступен и в качестве бинарного пакета. Впрочем, использовать последний я не рекомендовал бы - почему-то в него не вошли собственно консольные шрифты (а только шрифты для X-терминала). Так что лучше получить "авторский экземпляр" пакета и установить его самостояткльно. Или уж, на худой конец, скачать мою подборку кириллических шрифтов для syscons
, включающую и уже готовые шрифты из описываемого пакета. Кстати, кириллические шрифты для Linux-консоли можно выудить рядом.
Пакет terminus-fonts
- не просто шрифтовой набор, а универсальный инструмент для генерации терминальных шрифтов любого назначения. Он включает в себя:
- шрифтовые файлы базовой гарнитуры в формате BDF (Bitmap Distribution Format) нормального и полужирного начертания, высотой от 14 до 24 пикселей, в кодировке Unicode;
- набор скриптов для преобразования их в шрифтовые файлы различных используемых Unix-консолями и X-терминалами форматов;
- make-файлы для соответствующих преобразований;
- необходимые дополнительные данные, в частности, unimap-таблицы для преобразования 8-битных кодировок в Unicode;
- файлы документации на английском и болгарском языках.
В README-файлах дается исчерпывающее описание того, как обращаться с пакетов. И потому я лишь кратко опишу доступные возможности. И так, базовые bdf-шрифты могут быть преобразованы в шрифтовые файлы следующих форматов:
- raw-формат, в котором шрифтовой файл содержит только бинарные данные; этот формат используется для вывода в консольных драйверах BSD-семейства (
syscons
FreeBSD и DragonFlyBSD,pcvt
иwscons
, применяемые в OpenBSD и NetBSD); - psf-формат, включающий, кроме собственно шрифтовых данных, заголовок и psf-сигнатуру с дополнительной информацией о шрифте; это - основной формат вывода в Linux-консоли;
- pcf-формат для вывода на X-терминалах.
Генерация шрифтовых файлов осуществляется командой make с указанием соответствующей цели, например,
$ make raw
для создания raw-файлов,
$ make psf
и
$ make pcf
для psf- и pcf-форматов, соответственно. Кроме того, командой
$ make txt
можно сгенерировать smf-таблицы для ряда кодировок. В чем, впрочем, необходимости как будто нет, так как эти таблицы встраиваются, судя по README, в собственно psf-файл.
Какой бы формат шрифта ни был избран для компиляции, в итоге генерируется три "шрифтоначертания" - ter-*n
("нормальное"), ter-*b
(полужирное) и ter-*f
(для использования в консоли с Frame Buffer). Размеры матрицы образовавшихся шрифтов зависят от выходного формата: raw-шрифты имет матрицы 14 и 16 пикселей по вертикали, срдеи шрифтов для Linux-консоли представлены также матрицы 20, 24, 28 и 32 пикселя (правда, их нет в представлении для Frame Buffer).
Каждое шрифтоначертание автоматически генерируется в нескольких кодировках: ISO8859-1/2/5/9/15/16, Windows-1250/1251/1252/1254, IBM-437/852/855/866, KOI8-R/U/E/F, Bulgarian-MIK, Paratype-PT154/PT254 и Macintosh-Ukrainian. Поскольку все шрифты - более чем 500-символьные, для Linux-консоли и X-терминала можно подобрать любые сочетания кодировок ввода и вывода.
Интересно, что для BSD-консоли шрифты с традиционной для нее кодировкой вывода CP866 сами собой не образуются. Однако их при желании можно изготовить из шрифтов Linux-консоли способом, описанным ранее. Или - просто отказаться от использования DOS-кодировки, ограничившись выводом в KOI8. Ведь одна из причин применения CP866 на выводе - низкое качество KOI-шрифтов, - теперь отпадает, а с разрывами в рамках псевдографических программ я, например, вполне готов примириться. Тем более, что их и не видно...
Ибо качество консольных шрифтов исключительно высокое. При этом их внешний вид и читабельность не ухудшаются при нестандартной плотности знаков. Правда, их вариации для X-терминалов именно в терминале выглядят достаточно непривычно. Однако для текстового режима - пожалуй, ничего лучше не придумаешь. Главное же - варианты шрифтов для Frame Buffer в графической консоли (что Linux, что DragonFlyBSD) выглядят просто замечательно.
Правда, на использование шрифтов terminus-fonts во FreeBSD (и в DragonFlyBSD), что и на самодельные шрифты, описанные ранее. Будучи представлены в чистом raw-формате, они не могут ни быть встроенными в ядро систем, ни использоваться с программой src2png
. Однако для повседневной жизни в консоли лучше их трудно что-либо придумать.