On Sat, 22 Jan 2005 22:04:01 +0300 Artem Chuprina <[EMAIL PROTECTED]> 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 :)) с уважением, александр баракин. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]