34 votes

Mapping Super+hjkl aux touches fléchées sous X

J'essaie d'établir une carte :

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

Globalement sous X. L'idée est que je ne veux pas quitter ma ligne d'accueil si souvent pour utiliser les touches fléchées, donc je vais utiliser le Super modificateur + hjkl pour émuler les touches fléchées sous X. Y a-t-il un moyen de faire cela ?

Une chose que j'ai essayée est xbindkeys + xte en utilisant cette configuration :

"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

mais il semble y avoir un délai important entre le moment où j'appuie sur la touche et le moment où je constate un résultat, et la plupart du temps, il ne se passe rien du tout.

Existe-t-il une manière plus élégante de procéder qui fonctionne réellement sans délai ?

19voto

Deniz Points 99

Capslock + HJKL pour les touches fléchées

  1. Créez ~/.Xmodmap et mettez-y ceci :

    clear Lock 
    keycode 66 = ISO_Level3_Shift
  2. Ajouter Left , Down , Up , Right comme troisième élément des entrées de clé h,j,k,l dans /usr/share/X11/xkb/symbols/us (la première section) :

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

Alternatif : Capslock comme Control et Control_L + HJKL comme touches fléchées

Voici ma configuration actuelle. J'ai dé-mappé Control_L comme touche de contrôle et je l'utilise comme touche modificateur spécial (ISO_Level3_Shift), ce qui correspond à la troisième entrée dans le site /usr/share/X11/xkb/symbols/us pour les mappings hjkl.

  1. J'ai modifié la première strophe de /usr/share/X11/xkb/symbols/us comme précédemment :

    key { [ h, H, Left, Left ] }; 
    key { [ j, J, Down, Down ] };
    key { [ k, K, Up, Up ] }; 
    key { [ l, L, Right, Right ] };
  2. Ensuite, j'ai mis ceci dans mon fichier ~/.Xmodmap :

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

keycode 66 est le capslock et keycode 37 est laissé au contrôle

  1. exécuter xmodmap ~/.Xmodmap

Avec cette configuration, je peux utiliser les touches fléchées avec Control_L + hjkl ainsi que le saut. mots avec Control_L + caps + hl. C'est facile !

9voto

basic6 Points 2392

Les changements mentionnés ci-dessus dans /usr/share/X11/xkb/symboles/us ne travaillent PAS pour moi :
Erreur de chargement de la nouvelle description du clavier

Mais après avoir parcouru de nombreux howtos contradictoires, j'ai trouvé une solution, qui associe la super touche gauche (touche Windows gauche / Mod4) en combinaison avec hjkl à Gauche, Bas, Haut, Droite. Il s'agit d'un réglage à l'échelle du système.

Ajouter ce bloc à la fin de la première section (juste avant }; ) de votre /usr/share/X11/xkb/symboles/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!

La première ligne de touches associe AltGr+h à Gauche.
La dernière ligne de touche fait en sorte que la super touche gauche se comporte comme AltGr.
Voilà :

Super + h -> Gauche
Super + j -> Down
Super + k -> Up
Super + l -> Droite

Afin d'appliquer les nouveaux paramètres, exécutez setxkbmap ou redémarrez votre système.

Important : Cela désactive évidemment la super touche, donc si vous utilisez réellement votre super touche à d'autres fins (c'est-à-dire déplacer une fenêtre vers un autre espace de travail), vous ne devriez pas la remapper comme cela.
Afin d'utiliser le verrouillage des majuscules au lieu de Super, changez la dernière ligne de touche par :

key <CAPS> { [ ISO_Level3_Shift ] };

Voici la première section complète de mon fichier de configuration :

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

};

J'espère que cela aidera quelqu'un d'autre...

Si quelqu'un a une meilleure solution, faites-le moi savoir.

Edit : Testé sur Fedora.

4voto

Huon Imberger Points 31

Celui-ci fonctionne pour moi sur Arch. Il remappe Caps+hjkl aux touches fléchées, et Shift+Caps aux Caps.

Mettez ce qui suit dans ~/.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

Redémarrez-le ou réglez-le avec xmodmap ~/.Xmodmap

Si vous obtenez une erreur comme :

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

Cela signifie probablement que vous devez effacer quelque chose d'autre que mod5 (ce qui est actuellement réglé sur Mode_switch ). Vérifiez vos mappages de modificateurs actuels avec xmodmap .

3voto

Daniel Moore Points 193

Je n'ai pas essayé moi-même mais il semble que xkb pourrait faire ce que vous voulez. http://en.wikipedia.org/wiki/X_keyboard_extension .

J'ai un paquet dans Ubuntu appelé x11-xkb-utils qui semble prometteur :)

3voto

George Duckett Points 17305

Pas de sudo nécessaire, dérivé de ici modifié pour qu'il fonctionne également lorsqu'il est combiné avec Alt .

créer un file w le contenu suivant :

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

invoquez

xmodmap file

Il cartographie AltGr a Caps au lieu de Super il est donc préférable de définir

keycode 66 = Super_L

(ou autre xev vous donne sur la frappe Super )

La partie sucre donne les fonctions backspace et Del comme assignation spéciale à i et o, vous pouvez omettre cela, ou le voir comme un bonus ou une motivation pour développer/ajuster par vous-même ;)

PS : si vous l'expérimentez, réinitialisez le mappage "par défaut" en invoquant

setxkbmap

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X