[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[locale] Предложение по генерации раскладок
Господа!
На Ваш суд выносится предложение по генерации консольных раскладок.
Приаттачено в виде genkbd.tgz . Разумеется, скрипты и пр. выглядят
достаточно сыро. Уж сильно не ругайте, пианист играет, как успевает. ;-)
Идея следующая: есть некий шаблон, в нашем случае это ru.m4, сильно
напоминающий обычную раскладку, с кодировко-зависимыми полями,
представленными в виде Cyrillic_*, и раскладко-зависимыми полями,
представленными в виде Xkb_*, которые, в свою очередь, представлены в
виде Cyrillic_*.
Cyrillic_* могут принимать различные значения, в зависимости от
выбираемой кодировки. Набор значений можно сгенерировать, например, с
помощью прилагаемой charmap.pl, которой в качестве аргумента даётся
каталог с кодировками. Обычно это /usr/share/i18n/charmaps. Полученные
данные выдаются в файл charmap.m4. В charmap.pl я нагло написал
$CHARMAP = "(koi8-r|cp1251|iso-8859-5|cp866)"
ограничившись тем самым данными кодировками (плюс юникодная, которая
"зашита" в сам charmap.pl). Файл charmap.m4 используется в ru.m4, и в
зависимости от указанных в его заголовочных комментариях параметров -D,
подсовывает файлу ru.m4 разные значения для Cyrillic_* .
Xkb_* находятся в файле layout.m4, который также содержит заголовок с
возможными значениями раскладок. Этот файл получается с помощью
layout.pl, которому в качестве аргумента передаётся Xkb'шная русская
раскладка (обычно лежит в /usr/X11R6/lib/X11/xkb/symbols/ru, но здесь я
прилагаю её модифицированный вариант, на базе которого и был
сгенерирован layout.m4). Итак, получается довольно простой и наглядный
механизм синхронизации "подвижной" части раскладок с раскладкой из xkb.
Зачем создавать отдельную базу раскладок, когда есть прекрасная
возможность воспользоваться имеющейся?! Кстати, надеюсь,
модифицированный (обогащённый) вариант Xkb'шной ru будет утверждён, в
конце концов.
Возможность выбора различных клавиш-переключателей заложена в сам ru.m4,
что и отражено в его заголовочных комментариях.
Краткое описание всех файлов из genkbd.tgz :
ru.m4 -- Базовый шаблон раскладок (использует
сгенерированные layout.m4 и charmap.m4)
layout.m4 -- Генерируется с помощью layout.pl
charmap.m4 -- Генерируется с помощью charmap.pl
layout.pl -- Генерирует файл layout.m4
charmap.pl -- Генерирует файл charmap.m4
ru -- Модифицированный вариант
/usr/X11R6/lib/X11/xkb/symbols/ru, который
использовался при создании прилагаемого layout.m4
genkbd -- Скрипт на sh с использованием утилиты dialog для
"наглядной" генерации раскладок
genkbd.tcl -- Скрипт на Tcl/Tk для аналогичной цели
ПРИМЕР.
Машинописная раскладка для кодировки KOI8-R с
клавишей-переключателем "Правый Alt" генерируется так:
m4 -Dtypewriter -Dkoi8-r -Dalt_lk ru.m4 > ru.map
Или же с помощью прилагаемых менюхообразных и окноподобных
genkbd и genkbd.tcl :-)
Жду ответной реакции...
--
Best regards,
Eugene
genkbd.tgz