18

Я пытаюсь отобразить:

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 ответов8

13

Capslock + HJKL для клавиш со стрелками

  1. Создать ~/.Xmodmap и поместите это внутри:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Добавьте 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 ] };
    
  3. запустите xmodmap ~/.Xmodmap

Альтернатива: Capslock as Control и Control_L + HJKL для клавиш со стрелками

Это моя текущая настройка. Я отключил Control_L в качестве управляющего ключа и использую его как специальный модификатор (ISO_Level3_Shift), который соответствует третьей записи в файле /usr/share/X11/xkb/symbols/us для отображений hjkl.

  1. Я изменил первый раздел /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 ] };
    
  2. Затем я положил это в мой ~ /.Файл Xmodmap:

    clear Control
    keycode 66 = Control_L
    add Control = Control_L
    add Control = Control_R
    keycode 37 = ISO_Level3_Shift
    

Код клавиши keycode 66 - это заглавная буква, а keycode 37 - это оставленный элемент управления

  1. запустите xmodmap ~/.Xmodmap

С этой настройкой я могу использовать клавиши со стрелками с Control_L + hjkl, а также пропускать слова с Control_L + caps + hl. Легко!

8

Вышеупомянутые изменения в /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.

3

Нет Судо нужно, образовавшиеся от здесь, не будет изменено , чтобы заставить его работать также в сочетании с Alt.

создайте file со следующим содержимым:

! 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 дает вам при ударе Super)

Сахарная часть дает backspace и Del в качестве специального назначения для i и o, вы можете его пропустить или рассматривать как бонус или мотивацию для расширения / настройки по своему усмотрению;)

PS: если поэкспериментировать с этим, сбросьте "отображение по умолчанию", вызвав

setxkbmap
3

Я не пробовал это сам, но похоже, что xkb может делать то, что вы хотите http://en.wikipedia.org/wiki/X_keyboard_extension.

У меня есть пакет в Ubuntu под названием x11-xkb-utils, который звучит многообещающе :)

2

Наконец-то кажется, что я нашел решение, которое работает со всеми модификаторами (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 может обеспечить такую навигацию (и многое другое) с помощью всего лишь нескольких флажков.

1

Я нашел autokey, и это лучше для картирования.

Я полагаю, что связывание клавиш связи - эмулировать клавиатуру на ноутбуке - спросите, Ubuntu может вам помочь.

1

Этот работает для меня на 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 .

0

Я являюсь пользователем 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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .