[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