Да, позволяет. В определенных пределах. Твоя задача состоит в том, чтобы заставить комбинацию Super (а какая кнопка у тебя супер?) + Space посылать символ ISO_Next_Group. Этот символ выбирает следующую языковую группу.
Вот третья и четвертая комбинация -- это Mode_switch и Shift+Mode_switch. Можно попробовать сделать так, чтобы "Command" генерировала Mode_switch, но это явно не то, что надо. Тогда эта кнопка всегда будет генерировать Mode_switch.
Сделать это можно так:
xmodmap -e "keycode <код яблочка из xev> = Mode_switch"
Но тогда символ Super эта кнопка уже не будет генерировать. Да, задачка твоя несколько посложнее, чем мне показалось. Надо подумать.
Короче, насколько я понял, сделать это можно, написав кое-какие
правила для xkbcomp. Я не очень-то хорошо разобрался, но раз уж влез
в обсуждение, то написал кое-какие файлики. Дальше сам разберись,
почему это работает, как это работает (насколько это именно то, что
надо) и куда это потом вставлять. У меня просто времени нет, к
сожалению, проверить, насколько я верно это сделал. Для xkbcomp пишу
в первый раз в жизни. А так как лично мне пока этого не надо,
то глубоко уходить в тему не хочу.
Это в файл ~/my_model.xkb
xkb_keymap "my_model" {
xkb_keycodes {
include "xfree86"
};
xkb_types { include "complete"
include "my_types"
};
xkb_compatibility { include "complete" };
xkb_symbols {
include "pc(pc105)"
include "us"
include "ru(winkeys):2"
include "my_group(super_space_toggle)"
};
xkb_geometry { include "pc(pc105)" };
};
Это в файл ~/my_types:
partial default xkb_types "default" {
virtual_modifiers Super;
type "PC_SUPER" {
modifiers = Super;
map[None] = Level1;
map[Super] = Level2;
level_name[Level1] = "Base";
level_name[Level2] = "Super";
};
};
Это в файл ~/my_group:
partial modifier_keys
xkb_symbols "super_space_toggle" {
virtual_modifiers Super;
key <SPCE> {
type[Group1]="PC_SUPER",
symbols[Group1]= [ NoSymbol, ISO_Next_Group ],
virtualMods = Super
};
};
Проблемы:
1. Я не до конца еще понял, что я сотворил. Можно ли без этого вообще
обойтись?
2. Emacs при смене языка моргает (visible-bell), но язык меняет
Пocмотрел xev. Мне кажется, что
он реагирует на символ Super_L или Super_R. А вот должен ли этот
символ передаваться, я не знаю еще. Наверное, это как-то поправимо.
3. Компилировать это можно прямо в нужный DISPLAY (можно в файл,
читать man xkbcomp):
$ xkbcomp my_model.xkb :0
Сразу должно работать.