Відмітка 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
Ми вважаємо, що це чудово для подібних речей: code.google.com/p/autokey
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 як Control та Control_L + HJKL до клавіш зі стрілками

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

  1. Я змінив першу строфу / usr / share / X11 / xkb / символів / нас, як і раніше:

    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 form / var / lib / xkb. Попередження: Я перебив одну програму Ubuntu VM, виконуючи цей останній крок, і тоді моя клавіатура більше не працюватиме, тому будьте обережні і підготуйте резервну копію :-) Shift + Control + Caps + hjkl для вибору тексту добре працює у Firefox і Thunderbird, але в деяких додатках це не так (наприклад, Chrome)
Alexander Rechsteiner

8

Вищезазначені зміни в / usr / share / X11 / xkb / символах / для мене НЕ працюють:
Помилка завантаження нового опису клавіатури

Але переглянувши безліч суперечливих хаутов, я придумав рішення, яке відображає ліву супер-клавішу (ліва клавіша Windows / Mod4) у поєднанні з hjkl вліво, вниз, вгору, вправо. Це загальносистемне налаштування.

Додайте цей блок до кінця першого розділу (прямо перед };) вашого / usr / share / X11 / xkb / символів / 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.
Ось вам:

Супер + h -> Вліво
Супер + j -> Вниз
Супер + k -> Вгору
Супер + 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.


Я сам робив такий підхід, але він працює не для всіх застосувань! xevчітко говорить, Leftі це працює для більшості програм. Але деякі програми реагують лише на "справжні" клавіші зі стрілками, наприклад, піднесений текстовий редактор та інші.
Тарраш

1
Працює так, як описано в Redhat 6.2. Мої болі зап’ястя дякую!
BuckFilledPlatypus

Дякую basic6, він працює на Ubuntu після описаних нижче кроків. На Ubuntu (випробувана на Ubuntu 14.04) існує проблема, що .xkm файли не перекомпілюються, і, отже, зміни в / usr / share / X11 / xkb / символи / * не впливають. Щоб покращити його, видаліть усі * .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, який звучить перспективно :)


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

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)

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

PS: якщо експериментувати з ним, скиньте "за замовчуванням" відображення шляхом виклику

setxkbmap

Це не спрацювало для мене, але привело мене в правильний шлях. Це працює для мене: 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 / символи / * (персонально, я використовую / usr / share / X11 / xkb / символи / 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/ . Після певних зусиль і гуглінгу я успішно склав це на своєму Debian Wheezy. Потім я створив цей скрипт gizmod і розмістив його у ~ / .gizmod / module.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS У Linux я іноді сумую за KeyboardRemap4MacBook. Цей чудовий мир програмного забезпечення OS X може ввімкнути таку навігацію (та багато іншого) за допомогою лише кількох прапорців.


1

Я користувач HHKB на Debian / Ubuntu, і це рішення працює для мене.

використовувати Left Ctrlдля активного клавіші.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Додайте цей код під // End alphanumeric sectionв базовому блоці в / USR / частки / X11 / XKB / символи / нам

//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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.