Я видел несколько сообщений о том, как переназначить клавиши со стрелками в X11 с помощью XKB, но, хотя они в основном работают нормально, ни один из методов (за исключением использования разных групп, что становится проблемой при настройке клавиатуры Gnome) не работает вместе с этой Windowsклавишей.
Я пытаюсь переназначить клавиатуру так, чтобы клавиши HJKL позволяли мне осуществлять навигацию с помощью ISO_Level3 modifier
.
Я пробовал назначать клавиши со стрелками как напрямую в ISO_Level3, так иперенаправлениеключ (оба примера я привожу в коде ниже).
Они прекрасно работают по отдельности (т.е. я могу использовать клавиши со стрелками отдельно), а также они работают с CTRLи ALT(т.е. CTRL+ LVL3+ H= CTRL+ LEFT), но онине работают вместе с клавишей WIN.
Мой файл символов:
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1] = "Satan";
include "us"
// middle row
key <AC06> {
symbols = [ h, H, Left ],
actions = [ NoAction(), NoAction(), Redirect(key=<LEFT>) ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
key <AC10> { [ ISO_Level3_Shift, colon, semicolon, colon ]};
modifier_map Mod5 { ISO_Level3_Shift };
};
решение1
описание
Я нашел решение, которое хорошо работает для меня в большинстве случаев, но не все приложения, похоже, интерпретируют ввод xkb напрямую. Это было немного сложнее, чем использование модификатора уровня 3. В моем случае я сопоставил, CAPSLOCK
чтобы установить контрольный слой с именем Overlay1
.
Я не очень понимаю внутреннюю работу xkb, но, кажется, этот слой не затрагивается другими модификаторами. При этом win
+ CAPS
+ {h,j,k.l}
перемещает окна (в моей настройке)
Ниже приведен соответствующий разделмой файл xkb:
partial modifier_keys xkb_symbols "xy_caps_overlay" {
replace key <CAPS> {
type[Group1] = "TWO_LEVEL",
symbols[Group1] = [ Overlay1_Enable, Overlay1_Enable ],
actions[Group1] = [ SetControls(controls=Overlay1), LockControls(controls=Overlay1) ]
};
// Movement Section
key <LatH> { Overlay1 = <LEFT> };
key <LatJ> { Overlay1 = <DOWN> };
key <LatK> { Overlay1 = <UP> };
key <LatL> { Overlay1 = <RGHT> };
key <TAB> { Overlay1 = <TAB> };
// Editing Section
key <LatQ> { Overlay1= <Esc> };
key <LatZ> { Overlay1 = <UNDO> };
key <UNDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatY>,modifiers=Control)]
};
key <LatY> { Overlay1 = <REDO> };
key <REDO> { [ VoidSymbol ],
actions[Group1]=[ RedirectKey(key=<LatZ>,modifiers=Control)]
};
key <LatX> { Overlay1 = <CUT> };
key <LatC> { Overlay1 = <COPY> };
key <LatV> { Overlay1 = <PAST> };
key <LatQ> { Overlay1 = <ESC> };
key <LatU> { Overlay1 = <HOME> };
key <LatI> { Overlay1 = <END> };
key <LatP> { Overlay1 = <PGUP> };
key <AC10> { Overlay1 = <PGDN> };
key <LatD> { Overlay1 = <DELE> };
key <LatB> { Overlay1 = <BKSP> };
key <SPCE> { Overlay1 = <RTRN> };
};
обязательно включите это partial
в свой макет, например
include "xy(xy_caps_overlay)"
где xy — имя файла, в который записаны эти частичные настройки, а xy_caps_overlay — фактическое имя частичного раздела.
примечание
Возможно, мой файл довольно запутанный. Но обратите внимание, что я ТАКЖЕ использую модификатор третьего уровня (AltGr или правый Alt) для, иногда, перекрывающих целей, поэтому я также могу перемещаться только правой рукой, но использование AltGr
+ Win
+ {h j k l}
не работает так, как задумано.
бонус
(далее в моих файлах есть еще несколько интересных вещей, с которыми я экспериментирую, но они не связаны напрямую с вашим вопросом, но могут вас заинтересовать. Смотрите xy_greek_lvl2
раздел о том, как я использую AltGr
+ ,
или .
для фиксации или сдвига клавиатуры для математических (греческих) символов.) (работа в процессе, хотя и немного беспорядочна)
Отрывок здесь (на случай, если я перемещу файлы)
key <RTSH> { // Use right shift (with shift) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol ],
actions[Group1] = [ SetMods(modifiers=Shift,clearLocks), LatchGroup(group=2) ]
};
key <AB08> { // use "," for 2nd group (with AltGr) while pressed
symbols[Group1] = [ NoSymbol, NoSymbol, VoidSymbol, VoidSymbol ],
actions[Group1] = [ NoAction(), NoAction(), LatchGroup(group=2) ]