Отображение Super+ HJKL на клавиши со стрелками под X
Я пытаюсь отобразить:
Super+h -> Left
Super+j -> Down
Super+k -> Up
Super+l -> Right
глобально под X. Идея в том, что я не хочу оставлять свой домашний ряд, который часто использует клавиши со стрелками, поэтому я буду использовать модификатор Super + hjkl для эмуляции клавиш со стрелками под X. Есть ли способ сделать это?
Я попробовал одну вещь - xbindkeys + xte, используя эту конфигурацию:
"xte 'keydown Up' 'keyup Up'"
Mod4+k
"xte 'keydown Down' 'keyup Down'"
Mod4+j
"xte 'keydown Left' 'keyup Left'"
Mod4+h
"xte 'keydown Right' 'keyup Right'"
Mod4+l
но, кажется, между нажатием клавиши и заметкой какого-либо результата возникает большая задержка, и в большинстве случаев ничего не происходит вообще.
Есть ли более элегантный способ сделать это, который действительно работает без задержки?
8 ответов
Capslock + HJKL для клавиш со стрелками
Создайте ~/.Xmodmap и поместите это внутри:
clear Lock keycode 66 = ISO_Level3_Shift
добавлять
Left
,Down
,Up
,Right
в качестве третьего элемента к ключевым записям h,j,k,l в/usr/share/X11/xkb/symbols/us
(первый раздел):key { [ h, H, Left, Left ] }; key { [ j, J, Down, Down ] }; key { [ k, K, Up, Up ] }; key { [ l, L, Right, Right ] };
бежать
xmodmap ~/.Xmodmap
Альтернатива: Capslock as Control и Control_L + HJKL для клавиш со стрелками
Это мои текущие настройки. Я отключил Control_L в качестве управляющего ключа и использую его в качестве специального модификатора (ISO_Level3_Shift), который соответствует третьей записи в /usr/share/X11/xkb/symbols/us
файл для отображений hjkl.
Я изменил первый раздел /usr/share/X11/xkb/symbols/us как прежде:
key { [ h, H, Left, Left ] }; key { [ j, J, Down, Down ] }; key { [ k, K, Up, Up ] }; key { [ l, L, Right, Right ] };
Затем я помещаю это в мой файл ~/.Xmodmap:
clear Control keycode 66 = Control_L add Control = Control_L add Control = Control_R keycode 37 = ISO_Level3_Shift
keycode 66
это кепка и keycode 37
левый контроль
- запустите xmodmap ~/.Xmodmap
С этой настройкой я могу использовать клавиши со стрелками с Control_L + hjkl, а также пропускать слова с помощью Control_L + caps + hl. Легко!
Вышеупомянутые изменения в /usr/share/X11/xkb/symbols/us НЕ работают для меня:
Ошибка загрузки нового описания клавиатуры
Но после просмотра множества противоречивых инструкций я нашел решение, которое отображает левую супер-клавишу (левая клавиша Windows / Mod4) в сочетании с hjkl влево, вниз, вверх, вправо. Это общесистемная настройка.
Добавьте этот блок в конец первого раздела (прямо перед };
) вашего /usr/share/X11/xkb/symbols/us:
//hjkl
//AltGr + hjkl
key <AC06> { [ h, H, Left ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
//Super_L -> Alt Gr
key <LWIN> { [ ISO_Level3_Shift ] }; //see below!
Первая ключевая строка отображает AltGr+h влево.
Последняя строка клавиш заставляет левый суперключ вести себя как AltGr.
Ну вот:
Супер + ч -> левый
Супер + Дж -> Вниз
Супер + к -> Вверх
Супер + л -> Право
Чтобы применить новые настройки, запустите setxkbmap или перезагрузите систему.
Важное замечание: Это, очевидно, отключает супер ключ, поэтому, если вы на самом деле используете свой супер ключ для других целей (например, для переноса окна в другое рабочее пространство), вам не следует переназначать его следующим образом.
Чтобы использовать Caps Lock вместо Super, измените последнюю ключевую строку на:
key <CAPS> { [ ISO_Level3_Shift ] };
Вот полный первый раздел моего конфигурационного файла:
default
partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1]= "English (US)";
// Alphanumeric section
key <TLDE> { [ grave, asciitilde ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
key <AE05> { [ 5, percent ] };
key <AE06> { [ 6, asciicircum ] };
key <AE07> { [ 7, ampersand ] };
key <AE08> { [ 8, asterisk ] };
key <AE09> { [ 9, parenleft ] };
key <AE10> { [ 0, parenright ] };
key <AE11> { [ minus, underscore ] };
key <AE12> { [ equal, plus ] };
key <AD01> { [ q, Q ] };
key <AD02> { [ w, W ] };
key <AD03> { [ e, E ] };
key <AD04> { [ r, R ] };
key <AD05> { [ t, T ] };
key <AD06> { [ y, Y ] };
key <AD07> { [ u, U ] };
key <AD08> { [ i, I ] };
key <AD09> { [ o, O ] };
key <AD10> { [ p, P ] };
key <AD11> { [ bracketleft, braceleft ] };
key <AD12> { [ bracketright, braceright ] };
key <AC01> { [ a, A ] };
key <AC02> { [ s, S ] };
key <AC03> { [ d, D ] };
key <AC04> { [ f, F ] };
key <AC05> { [ g, G ] };
key <AC06> { [ h, H ] };
key <AC07> { [ j, J ] };
key <AC08> { [ k, K ] };
key <AC09> { [ l, L ] };
key <AC10> { [ semicolon, colon ] };
key <AC11> { [ apostrophe, quotedbl ] };
key <AB01> { [ z, Z ] };
key <AB02> { [ x, X ] };
key <AB03> { [ c, C ] };
key <AB04> { [ v, V ] };
key <AB05> { [ b, B ] };
key <AB06> { [ n, N ] };
key <AB07> { [ m, M ] };
key <AB08> { [ comma, less ] };
key <AB09> { [ period, greater ] };
key <AB10> { [ slash, question ] };
key <BKSL> { [ backslash, bar ] };
// End alphanumeric section
//hjkl
//AltGr + hjkl
key <AC06> { [ h, H, Left ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
//Super_L -> Alt Gr
key <LWIN> { [ ISO_Level3_Shift ] };
};
Я надеюсь, что это помогает кому-то там...
Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать.
Изменить: проверено на Fedora.
Этот работает для меня на Arch. Он переназначает Caps+hjkl на клавиши со стрелками, а Shift+Caps на Caps.
Поместите следующее в ~/.Xmodmap
:
! Remap caps lock to special modifier, but still allow shift+caps to
toggle caps lock
clear lock
clear mod5
add lock = Mode_switch
keycode 66 = Mode_switch Caps_Lock NoSymbol NoSymbol
keycode 43 = h H Left Left
keycode 44 = j J Down Down
keycode 45 = k K Up Up
keycode 46 = l L Right Right
Перезагрузите или установите его с xmodmap ~/.Xmodmap
Если вы получаете сообщение об ошибке вроде:
X Error of failed request: BadValue (integer parameter out of range for operation)
Это, вероятно, означает, что вам нужно очистить что-то кроме mod5
(все, что в данный момент установлено на Mode_switch
). Проверьте ваши текущие сопоставления модификаторов с xmodmap
,
Не требуется sudo, производное от него, измененное, чтобы оно работало также в сочетании с Alt.
создать file
w следующего содержания:
! remove Caps Lock
clear lock
! remove Lock = Caps_Lock
! remove Shift = Caps_Lock
keycode 66 = NoSymbol NoSymbol
keycode 66 = ISO_Level3_Shift
keysym h = h H NoSymbol NoSymbol Left Left
keysym j = j J NoSymbol NoSymbol Down Down
keysym k = k K NoSymbol NoSymbol Up Up
keysym l = l L NoSymbol NoSymbol Right Right
! some sugar
keysym o = o O NoSymbol NoSymbol BackSpace NoSymbol
keysym i = i I NoSymbol NoSymbol Delete NoSymbol`
взывать
xmodmap file
Он отображает AltGr в Caps вместо Super, так что вы можете установить
keycode 66 = Super_L
(или что угодно xev
дает удар по супер)
Сахарная часть дает backspace и Del в качестве специального назначения для i и o, вы можете его пропустить или рассматривать как бонус или мотивацию для расширения / настройки по своему усмотрению;)
PS: если поэкспериментировать с этим, сбросьте "отображение по умолчанию", вызвав
setxkbmap
Я не пробовал это сам, но похоже, что xkb может делать то, что вы хотите http://en.wikipedia.org/wiki/X_keyboard_extension.
У меня есть пакет в Ubuntu под названием x11-xkb-utils, который звучит многообещающе:)
Наконец-то кажется, что я нашел решение, которое работает со всеми модификаторами (Ctrl+, Shift+, Ctrl+Shift+) и Sublime Text 2.
Вся слава уходит в эту конфигурацию драгоценных камней, которую я недавно обнаружил http://www.spinics.net/lists/xorg/msg35931.html. Он описывает стрелки ijkl, но его можно легко изменить для навигации по hjkl. Вам необходимо обновить файл (ы) раскладки клавиатуры /usr/share/X11/xkb/symbols/* (лично я использую /usr/share/X11/xkb/symbols/typo, который я включаю в раскладку клавиатуры с помощью Xkb опция "misc:typo", поэтому она работает для любой раскладки клавиатуры). Конфигурация предполагает, что ключ-модификатор отправляет ISO_Level3_Shift (есть много способов связать Super или Alt с ISO_Level3_Shift).
Ключевые определения должны выглядеть следующим образом (используйте NoSymbol, если вы изменяете../symbols/typo):
key <AC07> {
type="MOD5_NAV",
[NoSymbol, NoSymbol, Down, Down],
actions[Group1] = [NoAction(), NoAction(), RedirectKey(key=<DOWN>, clearmods=ISO_Level3_Shift)]
};
Также вам нужно отредактировать /usr/share/X11/types/basic и объявить тип "MOD5_NAV":
type "MOD5_NAV" {
modifiers = Shift+Mod5;
map[None] = level1;
map[Shift] = level2;
map[Mod5] = level3;
map[Mod5+Shift] = level3;
level_name[Level1] = "Base";
level_name[Level2] = "Caps";
level_name[Level3] = "Arrows";
};
Что касается Sublime Text 2, решение более хитрое и хакерское. Как уже упоминалось выше, Sublime Text 2 считывает коды клавиш непосредственно с устройства и поэтому игнорирует некоторые функции Xkb (и трюк xkb со стрелками не действует). Существует почти заброшенный, но все еще работающий проект, Gizmo Daemon http://gizmod.sourceforge.net/. После некоторой борьбы и поиска в Google я успешно скомпилировал его на своем Debian Wheezy. Затем я создал этот скрипт gizmod и поместил его в ~ /.gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD
PS На Linux я иногда скучаю по KeyboardRemap4MacBook. Этот огромный мир программного обеспечения OS X может обеспечить такую навигацию (и многое другое) с помощью всего лишь нескольких флажков.
Я нашел autokey, и это лучше для картирования.
Я полагаю, что связывание клавиш - эмуляция клавиатуры на ноутбуке - спросите, Ubuntu может вам помочь.
Я являюсь пользователем HHKB в Debian/Ubuntu, и это решение работает для меня.
используйте левую клавишу Ctrl для активной клавиши.
$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift
Добавить этот код в // End alphanumeric section
в базовом блоке в /usr/share/X11/xkb/symbols/us
//hjkl
//Ctrl + hjkl
key <AC06> { [ h, H, Left ] };
key <AC07> { [ j, J, Down ] };
key <AC08> { [ k, K, Up ] };
key <AC09> { [ l, L, Right ] };
Теперь вы должны иметь возможность использовать левую, нижнюю, верхнюю и правую клавиши с Ctrl + h, j, k, l.
Кстати, если вы использовали пентадактиль в Firefox, вы можете добавить этот код в ~/.pentadactylrc
map -modes=i,c <C-down> <down>
map -modes=i,c <C-up> <up>