[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [locale] Q: Xkb problem
> Hi!
>
> Я тут пытаюсь собрать ru-yawerty для X11,
> и тут наткнулся на проблему.
>
> В нем я определяю строки подобные этим:
> key <AE08> { [ 8, asterisk ]};
> key <AE09> { [ 9, parenleft ]};
> что бы восстановить после других раскладок.
>
> В /etc/X11/XF86Config у меня только:
> XkbRules "xfree86"
> XkbModel "pc104"
>
> И я устанавливаю: 'setxkbmap -layout ru-yawerty -option grp:ctrl_shift_toggle'
>
> Запускаю 'xkbcomp bad.xkb -' и в результате получаю:
>
> key <AE08> {
> symbols[Group1]= [ 8, asterisk ],
> symbols[Group2]= [ bracketleft, trademark ]
> };
> key <AE09> {
> symbols[Group1]= [ 9, parenleft ],
> symbols[Group2]= [ bracketright, plusminus ]
> };
Все верно. У меня в доках сказано, что для symbols существует
дополнительный "способ добавления" (merge mode) - replace.
Если новая раскладка добавляется к предыдущей в режиме replace, то
новые определения полностью переписывают старые, а вот если в режиме
override, то из новых определений берутся только те "ячейки" (отдельные keysym),
которые в ней присутствуют. То есть, если в предыдущем описании для данной
клавиши уже описаны две группы, а в новой только одна, то вот эта одна и
заменяется, а вторая остается без изменений.
Как вы уже догадались, при описании через rules/model/layout специфические
(layout'овые) symbols map добавляются в режиме override.
> Теперь в русском языке нет некоторых цифр и знаков.
> Откуда берется это?
Берется из en_US, точнее - из файла "iso9995-3", который includ'ом вставлен
в en_US. А все остальные layout (ну, кроме самой en_US и еще us) получатся
сложением двух карт
en_US(<model>)+<layout>(<variant>)
Это можно подсмотреть в xkb/rules/xfree86
> Я ожидал что "{ [ 8, asterisk ]};" будет для всех групп.
> В принципе "key <AE08> { [ 8, asterisk ], [ 8, asterisk ]};"
> помогает, но как-то все это странно.
Ну надеюсь, я объяснил, что это как-раз не странно.
Надо в "ru" описывать обе группы.
По идее должно помоч указание replace прямо перд каждыми описанием
key <...> {...};
но почему-то не работает. Скорее всего - это баг xkbcomp. Но я до него
еще на добрался.
> И ещё, какой XkbLayout по default?
По умолчанию - "us" (в нем, кстати, только одна группа).
Но если задан параметр layout (не важно - в XF86Config или через setxkbmap),
то, как я уже говорил - конечная symbols map составляется из en_US и той,
что в указана в layout.
>
> P.S. Я надеюсь что раскладка yawerty тоже будет включена в XFree86,
> т.к. я обнаружил много людей которым она поможет писать по русски.
Кстати, по хорошему ее надо бы делать как variant в ru.
Но я не уверен, что все "конфигурялки" нормально предлагают возможные
варианты. (Во всяком случае XF86Setup этого не умеет).
--
Ivan U. Pascal | e-mail: pascal@tsu.ru
Administrator of | Tomsk State University
University Network | Tomsk, Russia