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: