So, I've started to collect fonts and keyboard layouts. There are lot of people who contributed: Cyril Slobin wrote set of C preprocessor macros to generate keyboard layout, wich insure that no special key would be unmapped in cyrillic mode, Vadim Zhytnikoc contributed set of Unicyr fonts, which can be used with any cyrillic encoding, Anton Zinoviev created and maintains debian console-cyrillic package.
You can download latest version of the package from my ftp site.
Package also includes script to convert console font into X font, which can be used in Dosemu.
Шрифты рассчитаны на использование утилиты consolechars (пакет console-tools из Debian), впрочем с последними kbd они тоже будут работать.
Все шрифты сделаны на базе альтернативной кодировки (cp866). Почему? Потому что использование любой другой кодировки русских букв в качестве физической в текстовом режиме VGA приводит к тому, что горизонтальная псевдографика получается с разрывами. Это аппаратное свойство VGA, которое никак не лечится. Единственный выход - использовать шрифты, в которых псевдографика расположена на тех же позициях, что и в cp437.
Поскольку шрифты этого пакета содержат в себе unicode mapping, сочетание их с Application character map позволит добиться любой требуемой кодировки на консоли. Например:
consolechars -f 866_8x16.psf -m koi8-r.acm
В пакет входят четыре комплекта шрифтов (каталог psf):
Все шрифты содержат в себе таблицу отображения в unicode. В виде отдельных файлов эти таблицы (alt.sfm и cp866.sfm) находятся в каталоге sfm.
Кроме того, в каталоге acm приведены таблицы перекодировки из распространенных кодировок русского, белорусского, болгарского и украинского языков в unicode, использование которых совместно с приведенными шрифтами позволяет настроить вашу консоль в любую требуемую кодировку кириллицы.
В каталоге acm вы найдете acm файлы для наиболее распространенных кодировок русского языка. А также и кодировку koi8-u (к сожалению я не смог достучаться до ее официального сайта www.ua.net, поэтому взял определение с первого же попавшегося сайта, посвященного кирилличиским кодировкам)
В пакет включена комплект для генерации клавиатуры, основанный на идеях, предложенных Кириллом Злобиным <slobin@ice.ru>. Он находится в каталоге keymaps.
Раскладки клавиатуры получаются с помощью обработки препроцессором C (/usr/bin/cpp) файла кодировки и собственно файла раскладки. При этом используется еще и общий для всех раскладок файл macros.inc
Использование макросов для описаний клавиш позволяет существенно полнее чем в большинстве распространенных раскладок определить комбинации Alt-клавиша, Ctrl-клавиша и т.д., как в русском, так и в латинском режимах.
Командой
cpp cyr-russian.cpp |loadkeys
вы получите раскладку клавиатуры для кодировки koi8-r Для работы с любой другой кодировкой требуется указать в командной строке имя соответствующего .enc файла. Например,
cat cp866.enc cyr-russian.cpp|cpp | loadkeys
В этой раскладке переключателем кириллического/латинского режима по умолчанию является правый Control. Правый Alt - временное (на время пока удерживается клавиша) переключение.
На Windows клавиатурах для переключения можно также использовать как переключатель клавишу системного меню. Клавиша Windows служит временным переключателем.
Эти умолчания можно изменить определив символ ALTSWITCH или WINONLY при генерации раскладки.
cpp -DALTSWITCH cyr-russian.cpp |loadkeys
Символ ALTSWITCH меняет местами функции правого Alt и правого Control. Я предпочитаю этот вариант, так как у меня правый Alt используется также и в X-ах.
Символ WINONLY делает правые Control и ALT эквивалентными левым Control и Alt, оставляя для переключения только клавиши Windows.
По умолчанию клавиша BackSpace генерирует символ Delete (ASCII 127) (потому что так принято в Debian Linux)
Изменить это умолчание можно указав -DBACKSPACE
В комплект входят следующие раскладки клавиатур
Имя файла | Язык | Кодировка по умолчанию | Автор |
---|---|---|---|
cyr-russian.cpp | Русский | koi8-r | Кирил Злобин |
cyr-russian-ms.cpp | Русский (раскладка microsoft) | koi8-r | Виктор Вагнер |
cyr-belorussian.cpp | Белорусский | cp1251 | Александр Микаэлян |
cyr-bulgarian-bds.cpp | Болгарский | cp1251 | Антон Зиновиев |
cyr-bulgarian-phon.cpp | Болгарский (фонетическая) | cp1251 | Антон Зиновиев |
cyr-serbian.cpp | Сербский | iso8859-5 | Антон Зиновиев |
cyr-ukrainian.cpp | Украинский | koi8-u | Виктор Вагнер |
cyr-ukrainian1.cpp | Украинский | koi8-u | Игорь Власенко |
cyr-ukrainian-ms.cpp | Украинский | koi8-u | Игорь Власенко |
cyr-ukrainian-ms-like1 | Украинский | koi8-u | Не помню кто |
cyr-ukrainian-ms-like2 | Украинский | koi8-u | Не помню кто |
Внимание - раскладка cyr-ukrainian была в свое время сделана мной "щобы було" и не тестировалась. Лучше пользуюйтесь раскладками Игоря Власенко.
Раскладки Игоря Власенко поддерживают дополнительные флаги при препросессировании. См. комментарии в самой раскладке.
Указанная кодировка по умолчанию - та, которая будет использована, если в командной строке CPP не указать файла .enc.
Поддерживаются следующие кодировки: MacCyrillic bulgarian-mik cp1251 cp866 iso8859-5 koi8-r koi8-u utf-8
В каталоге x-window находится шрифт для X-window vga.bdf, который имеет кодировку cp866 и позволяет работать с русским языком в xdosemu.
В каталоге scripts находятся скрипты, использованные мной для создания этих шрифтов и таблиц.
Скрипт raw2psf берет файл шрифта в формате raw и генерирует файл в формате psf. Вторым аргументом может быть указана таблица отображения шрифта в unicode. Могут быть использованы либо таблицы в формате sfm (текстовая разновидность) либо определения charset которые можно скачать с ftp.unicode.org или взять из дистрибутива catdoc.
Скрипт makeacm генерирует из таблицы в одном из вышеприведенных форматов файл acm. Для этого скрипта необходим модуль Unicode::String, который можно взять со CPAN.
Скрипт dumppsf позволяет сконвертить psf-файл в некоторое текстовое представление, позволяющее посмотреть на шрифт, не загружая его. Вот когда-нибудь напишу обратный конвертер и можно будет редактировать консольные шрифты в vim...
Скрипт displayfont, написанный Кириллом Злобиным, позволяет просмотреть все символы текущего шрифта на экране. Не то чтобы я его реально использовал, но раз уж автор предложил...
Скрипт mkvgafont это shell-овский скрипт, который делает из raw-шрифта для консоли шрифт для X-Window, который можно использовать в DOSEMU
Документация на все перловые скрипты в формате pod встроена в сами скрипты. Вы можете использовать команду perldoc script для ее просмотра или pod2man script для создания полноценной man-страницы.