Отображение Super + HJKL на клавиши со стрелками под X

23

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

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

но, кажется, между нажатием клавиши и заметкой какого-либо результата возникает большая задержка, и в большинстве случаев ничего не происходит вообще.

Есть ли более элегантный способ сделать это, который действительно работает без задержки?

Уильям Казарин
источник
2
Выяснилось,
Tom Power,
Какая ОС? Я также думаю, что вам лучше использовать Control-Super или какую-либо другую комбинацию.
Harrymc

Ответы:

15

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

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

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Добавить Left, Down, Up, в Rightкачестве третьего пункта к ч, 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. Легко!

Уильям Казарин
источник
1
Это работает и в Arch Linux, но не сразу после команды xmodmap. После перезагрузки работает практически идеально. Просто не могу сделать CTRL + SHIFT + стрелка с CTRL + SHIFT + CAPS + hjkl, обычно для выбора слов. есть идеи как это сделать?
Косс
Хм, ты прав, лучшее, что я мог сделать, это снова добавить влево, вниз, вверх, вправо в другой столбец. Это не делает работу подсветки, но пропускает слова как обычно. Я должен смотреть на это больше.
Уильям Казарин
Это работает достаточно хорошо для меня. Единственная проблема, которая у меня есть, это не работает в Chrome, и это неприятно.
настроение
Вам может потребоваться очистить кэшированные файлы xkb, /var/lib/xkb/*.xkmчтобы изменения /usr/share/X11/xkb/symbols/usвступили в силу.
соло
1
Это работает на Ubuntu 14.04. Мне пришлось создать xmodmap /home/alex/.Xmodmapприложение для запуска и удалить все файлы * .xkm из / var / lib / xkb. Предупреждение: я уничтожил одну виртуальную машину Ubuntu, выполняя этот последний шаг, и тогда моя клавиатура больше не работала, поэтому будьте осторожны и подготовьте резервную копию :-) Shift + Control + Caps + hjkl для выбора текста хорошо работает в Firefox и Thunderbird, но в некоторых приложениях его нет (например, Chrome)
Александр Рехштайнер
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.
Ну вот:

Super + h -> Левый
Super + j -> Вниз
Super + k -> Вверх
Super + l -> Вправо

Чтобы применить новые настройки, запустите 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.

basic6
источник
Я сам сделал такой подход, но он работает не для всех приложений! xevясно говорит, Leftи это работает для большинства приложений. Но некоторые программы реагируют только на «настоящие» клавиши со стрелками, такие как возвышенный текстовый редактор и другие.
Tarrasch
1
Работает, как описано в Redhat 6.2. Мои больные запястья спасибо!
BuckFilledPlatypus
Спасибо basic6, он работает в Ubuntu после шагов, описанных ниже. Существует проблема в Ubuntu (протестирована в Ubuntu 14.04), что файлы .xkm не перекомпилируются, и поэтому изменения в / usr / share / X11 / xkb / symbols / * не действуют. Чтобы улучшить его, удалите все файлы * .xkm из / var / lib / xkb и перезагрузите систему. После этого файлы * .xkm будут перекомпилированы. Для получения дополнительной информации, пожалуйста, посмотрите: ubuntuforums.org/showthread.php?t=1589744
MPtr
3

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

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

gacrux
источник
xkb не может работать с супер ключом в качестве модификатора. xkb работает только с (по порядку) Unmodified, Shift, AltGr, Shift-AltGr. Модификаторы более высокого уровня также могут быть назначены (например, в примере CapsLock Билла Касарина), но они не входят в стандартную клавиатуру. Сопоставление Super с модификатором выше исключает его функционирование в качестве Super (как в примере с basic6).
dotancohen
3

Не нужно sudo , производное отсюда , измененное, чтобы оно работало также в сочетании с 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`

Invoke

xmodmap file

Он отображает AltGrна Capsвместо Super, чтобы вы могли лучше установить

keycode 66 = Super_L

(или все, что xevдает вам при ударе Super)

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

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

setxkbmap
Zeitvertreib
источник
Это не сработало для меня, но вывело меня на правильный путь. Это работает для меня: github.com/sblask/dotfiles/commit/…
Себастьян Бласк
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 может обеспечить такую ​​навигацию (и многое другое) с помощью всего лишь нескольких флажков.

sgtpep
источник
1

Я являюсь пользователем HHKB в Debian / Ubuntu, и это решение работает для меня.

использовать Left 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>
Чу-Саинг Лай
источник
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.

Хуон Имбергер
источник