[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Аналог PuntoSwitcher



On Sat, 22 Jan 2005 22:04:01 +0300
Artem Chuprina <ran@ran.pp.ru> wrote:

> alexander barakin -> debian-russian@lists.debian.org  @ Sat, 22 Jan 2005 20:13:52 +0200:
>  ab> работает.  а можно ли добиться трех раскладок, загружая их, как в
>  ab> Вашем примере, с помощью xkbcomp?
> 
> Судя по тому, что я вижу в конфигах, скорее всего, можно, но
> документировать это забыли...

точно - можно таки приучить xkb не перебирать раскладки в цикле (украинцы меня поймут :), а привязать каждую
 раскладку на уникальное сочетание клавиш.
в приведенном примере задействованы три - us+ru+ua, но, при желании, можно и четвертую (максимально 
возможную) прикрутить.
основой взят многострадальный CapsLock:
нажатие CapsLock - раскладка us
Shift+CapsLock - ru
Ctrl+CapsLock - ua
Shift+Ctrl+CapsLock - "классика" - переключение режима CapsLock (для тех, кто много пишет ПРОПИСЬЮ :)
проверено на версии 
xkb-1.10-6
XFree86-4.3.0-42

итак, по пунктам:

1. файл .xsession:
...
(cd ~/etc/xkb && xkbcomp three_groups.keymap $DISPLAY)
...

2. файл ~/etc/xkb/three_groups.keymap:
xkb_keymap "THREE_LANG_MAP" {
  xkb_keycodes { include "xfree86" };
  xkb_geometry { include "pc(pc104)" };
  xkb_types    { include "complete+three_groups.types" };
  xkb_compat   { include "complete+leds(scroll)+three_groups.compat" };
  // leds(scroll) можно и выкинуть - раскладки контролируются ручками :))
  xkb_symbols
  {
    include "pc/pc(pc104)+pc/us+pc/ru(winkeys):2+pc/ua(winkeys):3"
    replace key <CAPS> // можно и с другими поэкспериментировать
    {
      type = "THREE_LANG", // собственный "тип" клавиши. описан в
                           // three_groups.types
      [
        ISO_First_Group, // "чистая" клавиша переключает на us
        ISO_Last_Group,  // +Shift - ru
        Mae_Koho,        // это не украинское ругательство. это буква
                         // такая :)
                         // просто взял от фонаря из keysymdef.h то,
                         // что заведомо не используется в кириллице
        Caps_Lock        // +Shift+Ctrl - "родная" функция клавиши
      ]
    };
  };
};

3. файл ~/etc/xkb/types/three_groups.types:
partial xkb_types "shift" {
  type "THREE_LANG" {
    modifiers = Shift+Control+Alt;
    map[None] = Level1;
    map[Shift] = Level2;
    map[Control] = Level3;
    map[Control+Shift] = Level4;
    level_name[Level1] = "Base";
    level_name[Level2] = "Shift";
    level_name[Level3] = "Ctrl";
    level_name[Level4] = "Ctrl Shift";
  };
};

4. файл ~/etc/xkb/compat/three_groups.compat:
default partial xkb_compatibility "default"  {
    interpret Mae_Koho {
        action= LockGroup(group=3); // за работоспособность такой
                                    // конструкции
                                    // во всех версиях xkb, видимо,
                                    // никто не поручится :(
    };
};

скорее всего, много лишнего, но я пока только учусь.
благо есть у кого (тонкий намек в сторону Artem Chuprina :))

с уважением, александр баракин. 



Reply to: