Mapowanie Super + hjkl do klawiszy strzałek pod X

23

Próbuję zmapować:

Super+h -> Left
Super+j -> Down
Super+k -> Up
Super+l -> Right

globalnie pod X. Pomysł jest taki, że nie chcę opuszczać mojego domowego rzędu, aby często używać klawiszy strzałek, więc użyję Super modyfikatora + hjkl, aby emulować klawisze strzałek pod X. Czy jest jakiś sposób, aby to zrobić ?

Jedną z rzeczy, których próbowałem, są xbindkeys + xte przy użyciu tej konfiguracji:

"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

ale wydaje mi się, że istnieje duże opóźnienie między naciśnięciem klawisza i zauważeniem jakiegokolwiek wyniku, a przez większość czasu nic się nie dzieje.

Czy istnieje bardziej elegancki sposób na zrobienie tego, który faktycznie działa bez opóźnień?

William Casarin
źródło
2
Okazało się, że jest to świetne do robienia takich rzeczy: code.google.com/p/autokey
Tom Power
Co to jest system operacyjny? Myślę też, że lepiej byłoby użyć Control-Super lub jakiegoś takiego zestawu.
harrymc

Odpowiedzi:

15

Capslock + HJKL do klawiszy strzałek

  1. Utwórz ~ / .Xmodmap i umieść to w środku:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Dodaj Left, Down, Up, Rightjako trzeci element do H, J, K, L w pozycji kluczowych /usr/share/X11/xkb/symbols/us(pierwszy odcinek):

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  3. biegać xmodmap ~/.Xmodmap

Alternatywnie: Capslock jako Control i Control_L + HJKL do klawiszy strzałek

To jest moja obecna konfiguracja. Odmapowałem Control_L jako klawisz kontrolny i używam go jako specjalnego modyfikatora (ISO_Level3_Shift), który odpowiada trzeciemu wpisowi w /usr/share/X11/xkb/symbols/uspliku dla mapowań hjkl.

  1. Zmodyfikowałem pierwszą zwrotkę / usr / share / X11 / xkb / symbols / us jak wcześniej:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. Następnie umieszczam to w moim pliku ~ / .Xmodmap:

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

keycode 66jest Capslock i keycode 37pozostawia kontrolę

  1. uruchom xmodmap ~ / .Xmodmap

Dzięki tej konfiguracji mogę używać klawiszy strzałek z Control_L + hjkl, a także pomijać słowa za pomocą Control_L + Caps + hl. Łatwo!

William Casarin
źródło
1
Działa to również w Arch Linux, ale nie natychmiast po komendzie xmodmap. Po ponownym uruchomieniu działa prawie idealnie. Po prostu nie można zrobić CTRL + SHIFT + strzałka za pomocą CTRL + SHIFT + CAPS + hjkl, zwykle do wyłapywania słów. Masz pomysł, jak to zrobić?
koss
Hmm, masz rację, najlepiej, co mogę zrobić, to dodać Lewo, Dół, Góra, Prawo ponownie do innej kolumny. Nie powoduje to podświetlania, ale pomija słowa jak zwykle. Będę musiał przyjrzeć się temu więcej.
William Casarin
To mi wystarcza. Jedyny problem, jaki mam, to nie działa w Chrome i to jest uciążliwe.
Nastrój
Konieczne może być wyczyszczenie buforowanych plików xkb, /var/lib/xkb/*.xkmaby zmiany odniosły /usr/share/X11/xkb/symbols/usskutek.
solo
1
Działa to na Ubuntu 14.04. Musiałem stworzyć xmodmap /home/alex/.Xmodmapaplikację startową i usunąć wszystkie pliki * .xkm z / var / lib / xkb. Ostrzeżenie: zrujnowałem jedną maszynę wirtualną Ubuntu, wykonując ten ostatni krok, a następnie moja klawiatura w ogóle nie działała, więc bądź ostrożny i przygotuj kopię zapasową :-) Shift + Control + Caps + hjkl, aby zaznaczyć tekst działa dobrze w Firefox i Thunderbird, ale w niektórych aplikacjach tak nie jest (na przykład Chrome)
Alexander Rechsteiner
8

Powyższe zmiany w / usr / share / X11 / xkb / symbols / us NIE działają dla mnie:
Błąd ładowania nowego opisu klawiatury

Ale po przejrzeniu wielu sprzecznych poradników, wymyśliłem rozwiązanie, które mapuje lewy super klawisz (lewy klawisz Windows / Mod4) w połączeniu z hjkl na Lewo, Dół, Góra, Prawo. Jest to ustawienie systemowe.

Dodaj ten blok na końcu pierwszej sekcji (tuż przed };) twojego / 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!

Pierwsza linia klucza odwzorowuje AltGr + h na lewą.
Ostatnia linia klucza powoduje, że lewy superklucz zachowuje się jak AltGr.
Proszę bardzo:

Super + h -> Left
Super + j -> Down
Super + k -> Up
Super + l -> Right

Aby zastosować nowe ustawienia, uruchom setxkbmap lub uruchom ponownie system.

Ważne : To oczywiście wyłącza superklucz, więc jeśli faktycznie używasz superklucza do innych celów (np. Przenosząc okno do innego obszaru roboczego), nie powinieneś go ponownie mapować w ten sposób.
Aby użyć Caps Lock zamiast Super, zmień ostatnią linię klucza za pomocą:

key <CAPS> { [ ISO_Level3_Shift ] };

Oto pełna pierwsza sekcja mojego pliku konfiguracyjnego:

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 ] };


};

Mam nadzieję, że to pomoże komuś tam ...

Jeśli ktoś ma lepsze rozwiązanie, daj mi znać.

Edycja: Testowane na Fedorze.

podstawowy 6
źródło
Podjąłem takie podejście, ale nie działa ono dla wszystkich aplikacji! xevwyraźnie mówi Lefti działa w przypadku większości aplikacji. Ale niektóre programy reagują tylko na „prawdziwe” klawisze strzałek, takie jak wysublimowany edytor tekstu i inne.
Tarrasch
1
Działa jak opisano w Redhat 6.2. Moje obolałe nadgarstki dziękuję!
BuckFilledPlatypus
Dziękuję basic6, działa na Ubuntu po krokach opisanych poniżej. Występuje problem na Ubuntu (testowany na Ubuntu 14.04), że pliki .xkm nie są rekompilowane, a zatem zmiany w / usr / share / X11 / xkb / symbols / * nie mają żadnego wpływu. Aby to poprawić, usuń wszystkie pliki * .xkm z / var / lib / xkb i zrestartuj system. Następnie pliki * .xkm zostaną ponownie skompilowane. Aby uzyskać więcej informacji, spójrz: ubuntuforums.org/showthread.php?t=1589744
MPtr
3

Nie próbowałem tego sam, ale wygląda na to, że xkb może zrobić, co chcesz http://en.wikipedia.org/wiki/X_keyboard_extension .

Mam pakiet w Ubuntu o nazwie x11-xkb-utils, który brzmi obiecująco :)

gacrux
źródło
xkb nie może działać z klawiszem Super jako modyfikatorem. xkb działa tylko z (w kolejności) niezmodyfikowanymi, Shift, AltGr, Shift-AltGr. Można także przypisać modyfikatory wyższego poziomu (takie jak przykład CapsLock Billa Casarina), ale nie są one dostępne na standardowej klawiaturze. Mapowanie Super na wyższy modyfikator usuwa go z działania jako Super (jak w przykładzie basic6).
dotancohen
3

Nie potrzebne sudo , pochodzące stąd , zmodyfikowane, aby działało także w połączeniu z Alt.

utwórz filew następującą treść:

! 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`

odwołać się

xmodmap file

Odwzorowuje AltGrna Capszamiast Super, więc możesz raczej ustawić

keycode 66 = Super_L

(lub cokolwiek xevdaje ci po uderzeniu Super)

Część z cukrem daje backspace i Del jako specjalne przypisanie do i i o, możesz to pominąć lub zobaczyć jako bonus lub motywację do samodzielnego rozszerzenia / dostosowania;)

PS: jeśli eksperymentujesz z tym, zresetuj mapowanie „domyślne”, wywołując

setxkbmap
Zeitvertreib
źródło
To nie działało dla mnie, ale doprowadziło mnie na właściwy tor. Działa to dla mnie: github.com/sblask/dotfiles/commit/…
Sebastian Blask,
2

W końcu wydaje się, że znalazłem rozwiązanie, które działa ze wszystkimi modyfikatorami (Ctrl +, Shift +, Ctrl + Shift +) i Sublime Text 2.

Cała chwała należy do tej konfiguracji klejnotów, którą niedawno znalazłem http://www.spinics.net/lists/xorg/msg35931.html . Opisuje strzałki ijkl, ale można je łatwo modyfikować do nawigacji w hjkl. Musisz zaktualizować pliki układu klawiatury / usr / share / X11 / xkb / symbols / * (osobiście używam / usr / share / X11 / xkb / symbols / literówka, które dołączam do mojego układu klawiatury za pomocą Xkb opcja „misc: literówka”, więc działa na każdym układzie klawiatury). Konfiguracja zakłada, że ​​klawisz modyfikujący wysyła ISO_Level3_Shift (istnieje wiele sposobów na powiązanie Super lub Alt z ISO_Level3_Shift).

Kluczowe definicje powinny wyglądać (użyj NoSymbol, jeśli modyfikujesz ../symbols/typo):

key <AC07> {    
    type="MOD5_NAV",
    [NoSymbol, NoSymbol, Down, Down],   
    actions[Group1] = [NoAction(), NoAction(), RedirectKey(key=<DOWN>, clearmods=ISO_Level3_Shift)]
};

Musisz także edytować / usr / share / X11 / types / basic i zadeklarować typ „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";
};

Jeśli chodzi o Sublime Text 2, rozwiązanie jest trudniejsze i bardziej hackerskie. Jak wspomniano powyżej, Sublime Text 2 odczytuje kody klawiszy bezpośrednio z urządzenia, dlatego ignoruje niektóre funkcje Xkb (a sztuczka xkb ze strzałkami nie ma żadnego efektu). Istnieje prawie opuszczony, ale wciąż działający projekt, Gizmo Daemon http://gizmod.sourceforge.net/ . Po kilku zmaganiach i googlowaniu udało mi się skompilować go na moim Debian Wheezy. Następnie utworzyłem ten skrypt Gizmod i umieściłem go w ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS W systemie Linux czasami brakuje mi KeyboardRemap4MacBook. Ten wielki spokój oprogramowania OS X może umożliwić taką nawigację (i wiele innych rzeczy) za pomocą kilku pól wyboru.

sgtpep
źródło
1

Jestem użytkownikiem HHKB na Debian / Ubuntu i to rozwiązanie działa dla mnie.

użyj Left Ctrldo aktywnego klucza.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Dodaj ten kod // End alphanumeric sectionw bloku podstawowym w / 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   ]   };

Teraz powinieneś być w stanie wykorzystać w lewo, w dół, w górę iw prawo klucz Ctrl+ h, j, k, l.

Nawiasem mówiąc, jeśli używałeś pentadactyla w Firefoksie, możesz dodać ten kod w ~ / .pentadactylrc

map -modes=i,c <C-down> <down>
map -modes=i,c <C-up> <up>
Chu-Saing Lai
źródło
1

Ten działa dla mnie na Arch. Ponownie mapuje Caps + hjkl na klawisze strzałek oraz Shift + Caps na Caps.

Wprowadź następujące dane ~/.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

Uruchom ponownie lub ustaw za pomocą xmodmap ~/.Xmodmap

Jeśli pojawi się błąd taki jak:

X Error of failed request:  BadValue (integer parameter out of range for operation)

Prawdopodobnie oznacza to, że musisz wyczyścić coś innego niż mod5(cokolwiek jest obecnie ustawione Mode_switch). Sprawdź swoje obecne mapowania modyfikatora za pomocą xmodmap.

Huon Imberger
źródło