Zuordnung von Super + hjkl zu Pfeiltasten unter X

23

Ich versuche zu mappen:

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

Die Idee ist, dass ich meine Startzeile nicht so oft verlassen möchte, um die Pfeiltasten zu verwenden. Daher verwende ich den Super-Modifikator + hjkl, um die Pfeiltasten unter X zu emulieren. Gibt es eine Möglichkeit, dies zu tun ?

Eine Sache, die ich versucht habe, ist xbindkeys + xte mit dieser Konfiguration:

"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

aber es scheint eine große Verzögerung zwischen dem Drücken der Taste und dem Bemerken eines Ergebnisses zu geben, und die meiste Zeit passiert überhaupt nichts.

Gibt es eine elegantere Methode, die tatsächlich ohne Verzögerung funktioniert?

William Casarin
quelle
2
Ich fand das großartig, um so etwas zu tun: code.google.com/p/autokey
Tom Power
Was ist das Betriebssystem? Ich denke auch, dass Sie mit Control-Super oder einer solchen Kombination besser dran sind.
Harrymc

Antworten:

15

Feststelltaste + HJKL zu den Pfeiltasten

  1. Erstelle ~ / .Xmodmap und füge dies ein:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Hinzufügen Left, Down, Up, Rightals ein drittes Element an den h, j, k, l Schlüsseleinträge in /usr/share/X11/xkb/symbols/us(der erste Abschnitt):

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

Alternative: Feststelltaste als Control und Control_L + HJKL zu den Pfeiltasten

Dies ist mein aktuelles Setup. Ich habe Control_L als Steuerschlüssel deaktiviert und verwende es als speziellen Modifikator (ISO_Level3_Shift), der dem dritten Eintrag in der /usr/share/X11/xkb/symbols/usDatei für die hjkl-Zuordnungen entspricht.

  1. Ich habe die erste Zeilengruppe von / usr / share / X11 / xkb / symbols / us wie folgt geändert:

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
    
  2. Dann füge ich das in meine ~ / .Xmodmap-Datei ein:

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

keycode 66ist Feststelltaste und keycode 37bleibt unter Kontrolle

  1. Führen Sie xmodmap ~ / .Xmodmap aus

Mit diesem Setup kann ich Pfeiltasten mit Control_L + hjkl verwenden sowie Wörter mit Control_L + caps + hl überspringen. Einfach!

William Casarin
quelle
1
Dies funktioniert auch unter Arch Linux, jedoch nicht unmittelbar nach dem Befehl xmodmap. Nach dem Neustart funktioniert fast perfekt. STRG + UMSCHALT + Pfeil kann nicht mit STRG + UMSCHALT + GROSSBUCHSTABEN + hjkl ausgeführt werden, normalerweise zum Auswählen von Wörtern. Irgendeine Idee, wie das geht?
Kos
Hmm, du hast recht, am besten füge ich Left, Down, Up, Right noch einmal in eine andere Spalte ein. Das Hervorheben funktioniert nicht, aber es überspringt Wörter wie gewohnt. Ich muss mich mehr darum kümmern.
William Casarin
Das funktioniert gut genug für mich. Das einzige Problem, das ich habe, es funktioniert nicht in Chrome und das ist ein Ärgernis.
Stimmung
Möglicherweise müssen Sie die zwischengespeicherten xkb-Dateien löschen, /var/lib/xkb/*.xkmdamit die Änderungen /usr/share/X11/xkb/symbols/uswirksam werden.
Solo
1
Dies funktioniert unter Ubuntu 14.04. Ich musste xmodmap /home/alex/.Xmodmapeine Startanwendung erstellen und alle * .xkm-Dateien aus / var / lib / xkb entfernen. Warnung: Ich habe eine Ubuntu-VM in diesem letzten Schritt in den Papierkorb geworfen und meine Tastatur funktionierte dann überhaupt nicht mehr. Seien Sie also vorsichtig und halten Sie ein Backup bereit :-) Shift + Control + Caps + hjkl, um Text auszuwählen, funktioniert gut in Firefox und Thunderbird, aber in einigen Anwendungen nicht (Chrome zum Beispiel)
Alexander Rechsteiner
8

Die oben genannten Änderungen in / usr / share / X11 / xkb / symbols / us funktionieren bei mir NICHT:
Fehler beim Laden der neuen Tastaturbeschreibung

Aber nachdem ich viele widersprüchliche Anleitungen durchgesehen habe, habe ich eine Lösung gefunden, die die linke Supertaste (linke Windows-Taste / Mod4) in Kombination mit hjkl auf Links, Abwärts, Aufwärts, Rechts abbildet. Dies ist eine systemweite Einstellung.

Fügen Sie diesen Block am Ende des ersten Abschnitts (direkt davor };) Ihres / usr / share / X11 / xkb / symbols / us hinzu :

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

Die erste Tastenzeile ordnet AltGr + h Links zu.
Die letzte Tastenzeile bewirkt, dass sich die linke Supertaste wie AltGr verhält.
Bitte schön:

Super + h -> Links
Super + j -> Runter
Super + k -> Hoch
Super + l -> Rechts

Um die neuen Einstellungen zu übernehmen, führen Sie setxkbmap aus oder starten Sie Ihr System neu.

Wichtig : Dadurch wird der Superschlüssel offensichtlich deaktiviert. Wenn Sie den Superschlüssel also tatsächlich für andere Zwecke verwenden (z. B. zum Verschieben eines Fensters in einen anderen Arbeitsbereich), sollten Sie ihn nicht wie folgt neu zuordnen.
Um die Feststelltaste anstelle von Super zu verwenden, ändern Sie die letzte Schlüsselzeile mit:

key <CAPS> { [ ISO_Level3_Shift ] };

Hier ist der komplette erste Abschnitt meiner Konfigurationsdatei:

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


};

Ich hoffe das hilft jemandem da draußen ...

Wenn jemand eine bessere Lösung hat, lass es mich wissen.

Edit: Getestet auf Fedora.

basic6
quelle
Ich habe diesen Ansatz selbst gemacht, aber er funktioniert nicht für alle Anwendungen! xevklar sagt Leftund es funktioniert für die meisten Anwendungen. Einige Programme reagieren jedoch nur auf die "echten" Pfeiltasten, wie zum Beispiel der hervorragende Texteditor und andere.
Tarrasch
1
Funktioniert wie in Redhat 6.2 beschrieben. Meine wunden Handgelenke, danke!
BuckFilledPlatypus
Vielen Dank basic6, es funktioniert unter Ubuntu nach den unten beschriebenen Schritten. Unter Ubuntu (getestet unter Ubuntu 14.04) gibt es ein Problem, bei dem .xkm-Dateien nicht neu kompiliert werden und daher Änderungen in / usr / share / X11 / xkb / symbols / * keine Auswirkung haben. Um dies zu verbessern, entfernen Sie alle * .xkm-Dateien aus / var / lib / xkb und starten Sie das System neu. Danach werden die * .xkm-Dateien neu kompiliert. Weitere Informationen finden Sie unter: ubuntuforums.org/showthread.php?t=1589744
MPtr
3

Ich habe das selbst nicht versucht , aber es sieht aus wie xkb könnte tun , was Sie wollen http://en.wikipedia.org/wiki/X_keyboard_extension .

Ich habe ein Paket in Ubuntu namens x11-xkb-utils, das vielversprechend klingt :)

Gacrux
quelle
xkb kann nicht mit der Supertaste als Modifikator arbeiten. xkb funktioniert nur mit (in der Reihenfolge) Unmodified, Shift, AltGr, Shift-AltGr. Es können auch übergeordnete Modifikatoren zugewiesen werden (wie in Bill Casarins CapsLock-Beispiel), die jedoch nicht auf einer Standardtastatur enthalten sind. Durch die Zuordnung von Super zu einem höheren Modifikator wird die Funktion als Super deaktiviert (wie im Beispiel von basic6).
Dotancohen
3

Kein Sudo erforderlich, abgeleitet von hier , modifiziert, damit es auch in Kombination mit funktioniert Alt.

Erstelle einen filew folgenden Inhalt:

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

aufrufen

xmodmap file

Es wird AltGrauf Capsanstatt abgebildet Super, Sie können es also lieber einstellen

keycode 66 = Super_L

(oder xevwas auch immer Sie beim Schlagen gibt Super)

Der Zuckerteil gibt "Backspace" und "Del" als spezielle Zuweisung an "i" und "o". Sie können dies weglassen oder als Bonus oder Motivation zum Erweitern / Anpassen auf eigene Faust betrachten.

PS: Wenn Sie damit experimentieren, setzen Sie die "Standard" -Zuordnung durch Aufrufen zurück

setxkbmap
Zeitvertreib
quelle
Das hat bei mir nicht funktioniert, hat mich aber auf den richtigen Weg gebracht. Dies funktioniert für mich: github.com/sblask/dotfiles/commit/…
Sebastian Blask
2

Endlich scheint es, dass ich die Lösung gefunden habe, die mit allen Modifikatoren (Strg +, Umschalt +, Strg + Umschalt +) und Sublime Text 2 funktioniert.

Aller Ruhm geht an diese Edelsteinkonfiguration, die ich kürzlich gefunden habe: http://www.spinics.net/lists/xorg/msg35931.html . Es beschreibt ijkl-Pfeile, kann aber für die hjkl-Navigation leicht modifiziert werden. Sie müssen Ihre Tastaturlayoutdatei (en) / usr / share / X11 / xkb / symbols / * aktualisieren (persönlich verwende ich / usr / share / X11 / xkb / symbols / typo, die ich mit Xkb in mein Tastaturlayout einbinde) Option "misc: typo", funktioniert also für jedes Tastaturlayout). Die Konfiguration setzt voraus, dass die Modifizierertaste ISO_Level3_Shift sendet (es gibt viele Möglichkeiten, Super oder Alt an ISO_Level3_Shift zu binden).

Schlüsseldefinitionen sollten wie folgt aussehen (verwenden Sie NoSymbol, wenn Sie ../symbols/typo ändern):

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

Außerdem müssen Sie / usr / share / X11 / types / basic bearbeiten und den Typ "MOD5_NAV" deklarieren:

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

Was Sublime Text 2 betrifft, ist die Lösung kniffliger und hackiger. Wie oben erwähnt, liest Sublime Text 2 die Schlüsselcodes direkt vom Gerät und ignoriert daher einige Funktionen von Xkb (und ein xkb-Trick mit Pfeilen hat keine Auswirkung). Es gibt ein fast aufgegebenes, aber noch laufendes Projekt, Gizmo Daemon http://gizmod.sourceforge.net/ . Nach einigem Kämpfen und Googeln habe ich es erfolgreich auf meinem Debian Wheezy kompiliert. Dann habe ich dieses gizmod-Skript erstellt und es unter ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD abgelegt

PS Unter Linux vermisse ich manchmal KeyboardRemap4MacBook. Diese großartige, unkomplizierte OS X-Software kann eine solche Navigation (und viele andere Dinge) mit nur wenigen Kontrollkästchen ermöglichen.

sgtpep
quelle
1

Ich bin ein HHKB-Benutzer auf Debian / Ubuntu und diese Lösung funktioniert für mich.

Verwenden Sie, Left Ctrlum die Taste zu aktivieren.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Fügen Sie unter diesem Code // End alphanumeric sectionin dem Basisblock in / usr / share / X11 / xkb / Symbolen / us

//hjkl
//Ctrl + hjkl
key <AC06> {    [   h,  H,  Left    ]   };
key <AC07> {    [   j,  J,  Down    ]   };
key <AC08> {    [   k,  K,  Up      ]   };
key <AC09> {    [   l,  L,  Right   ]   };

Nun sollten Sie in der Lage sein , nach links zu verwenden, unten, oben und rechter Taste mit Ctrl+ h, j, k, l.

By the way, wenn Sie verwendet haben pentadactyl auf Firefox, können Sie diesen Code hinzufügen , in ~ / .pentadactylrc

map -modes=i,c <C-down> <down>
map -modes=i,c <C-up> <up>
Chu-Saing Lai
quelle
1

Dieser arbeitet für mich auf Arch. Es ordnet Caps + hjkl den Pfeiltasten und Shift + Caps den Caps zu.

Geben Sie Folgendes ein ~/.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

Neu starten oder mit einstellen xmodmap ~/.Xmodmap

Wenn Sie eine Fehlermeldung erhalten wie:

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

Dies bedeutet wahrscheinlich, dass Sie etwas anderes löschen müssen als mod5(was auch immer aktuell eingestellt ist Mode_switch). Überprüfen Sie Ihre aktuellen Modifikatorzuordnungen mit xmodmap.

Huon Imberger
quelle