Mappage de Super + hjkl aux touches fléchées sous X

23

J'essaie de cartographier:

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 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 le faire ?

J'ai essayé 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 qu'il y ait un grand délai entre le moment où j'appuie sur la touche et le résultat, et la plupart du temps rien ne se passe.

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

William Casarin
la source
2
J'ai trouvé que c'était génial pour faire ce genre de chose: code.google.com/p/autokey
Tom Power
Qu'est-ce que l'OS? Je pense également que vous feriez mieux d'utiliser Control-Super ou un combo de ce type.
harrymc

Réponses:

15

Capslock + HJKL aux touches fléchées

  1. Créez ~ / .Xmodmap et mettez-le à l'intérieur:

    clear Lock 
    keycode 66 = ISO_Level3_Shift
    
  2. Ajouter Left, Down, Up, en Righttant que troisième point aux h, j, k, des entrées de touche 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. courir xmodmap ~/.Xmodmap

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

Ceci est ma configuration actuelle. J'ai démappé Control_L comme clé de contrôle et l'utilise comme modificateur spécial (ISO_Level3_Shift), ce qui correspond à la troisième entrée du /usr/share/X11/xkb/symbols/usfichier pour les mappages hjkl.

  1. J'ai modifié la première strophe de / usr / share / X11 / xkb / symboles / us comme avant:

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

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

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

  1. exécutez xmodmap ~ / .Xmodmap

Avec cette configuration, je peux utiliser les touches fléchées avec Control_L + hjkl ainsi que sauter des mots avec Control_L + caps + hl. Facile!

William Casarin
la source
1
Cela fonctionne également sur Arch Linux, mais pas immédiatement après la commande xmodmap. Après le redémarrage, fonctionne presque parfaitement. Impossible de faire CTRL + MAJ + flèche avec CTRL + MAJ + MAJ + hjkl, généralement pour la sélection de mots. Une idée de comment faire ça?
koss
Hmm tu as raison, le mieux que je puisse faire est d'ajouter à nouveau Gauche, Bas, Haut, Droite dans une autre colonne. Cela ne fait pas fonctionner la mise en évidence mais cela sautera les mots comme d'habitude. Je vais devoir approfondir cela.
William Casarin
Cela fonctionne assez bien pour moi. Le seul problème que j'ai, cela ne fonctionne pas dans Chrome et c'est une nuisance.
Humeur du
Vous devrez peut-être effacer les fichiers xkb mis en cache /var/lib/xkb/*.xkmpour que les modifications /usr/share/X11/xkb/symbols/usprennent effet.
solo le
1
Cela fonctionne sur Ubuntu 14.04. J'ai dû créer xmodmap /home/alex/.Xmodmapune application de démarrage et supprimer tous les fichiers * .xkm sous forme / var / lib / xkb. Avertissement: j'ai jeté une machine virtuelle Ubuntu lors de cette dernière étape et mon clavier ne fonctionnerait plus du tout, alors soyez prudent et préparez une sauvegarde :-) Shift + Control + Caps + hjkl pour sélectionner du texte fonctionne bien dans Firefox et Thunderbird, mais pas dans certaines applications (Chrome par exemple)
Alexander Rechsteiner
8

Les modifications mentionnées ci-dessus dans / usr / share / X11 / xkb / symboles / us ne fonctionnent PAS pour moi:
erreur lors du chargement de la nouvelle description du clavier

Mais après avoir parcouru de nombreux howtos contradictoires, j'ai trouvé une solution, qui mappe la super touche gauche (touche windows gauche / Mod4) en combinaison avec hjkl vers Left, Down, Up, Right. Il s'agit d'un paramètre à l'échelle du système.

Ajoutez 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 clé mappe AltGr + h à gauche.
La dernière ligne de touche fait que la super touche de gauche se comporte comme AltGr.
Voici:

Super + h -> Gauche
Super + j -> Bas
Super + k -> Haut
Super + l -> Droite

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

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

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 aide quelqu'un là-bas ...

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

Edit: Testé sur Fedora.

basic6
la source
J'ai fait cette approche moi-même, mais cela ne fonctionne pas pour toutes les applications! xevdit clairement Leftet cela fonctionne pour la plupart des applications. Mais certains programmes ne réagissent qu'aux "vraies" touches fléchées, comme un sublime éditeur de texte et d'autres.
Tarrasch
1
Fonctionne comme décrit sur Redhat 6.2. Mes poignets endoloris merci!
BuckFilledPlatypus
Merci basic6, cela fonctionne sur Ubuntu après les étapes décrites ci-dessous. Il y a un problème sur Ubuntu (testé sur Ubuntu 14.04) que les fichiers .xkm ne sont pas recompilés, et donc les changements dans / usr / share / X11 / xkb / symboles / * n'ont aucun effet. Afin de l'améliorer, supprimez tous les fichiers * .xkm de / var / lib / xkb et redémarrez le système. Après cela, les fichiers * .xkm seront recompilés. Pour plus d'informations, veuillez consulter: ubuntuforums.org/showthread.php?t=1589744
MPtr
3

Je n'ai pas essayé cela moi-même, mais il semble que xkb puisse 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 :)

gacrux
la source
xkb ne peut pas fonctionner avec la touche Super comme modificateur. xkb ne fonctionne qu'avec (dans l'ordre) Non modifié, Shift, AltGr, Shift-AltGr. Des modificateurs de niveau supérieur peuvent également être attribués (comme dans l'exemple CapsLock de Bill Casarin) mais ils ne sont pas fournis sur un clavier standard. Mapper Super à un modificateur supérieur le supprime de fonctionner comme Super (comme dans l'exemple de basic6).
dotancohen
3

Aucun sudo nécessaire, dérivé d' ici , modifié pour le faire fonctionner également lorsqu'il est combiné avec Alt.

créer un filew 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`

invoquer

xmodmap file

Il correspond AltGrà Capsau lieu de Super, vous pouvez donc plutôt définir

keycode 66 = Super_L

(ou watever xevvous donne en frappant Super)

La partie sucre donne un retour arrière et Del comme une affectation spéciale à i et o, vous pouvez l'omettre, ou le voir comme un bonus ou une motivation pour l'étendre / l'ajuster vous-même;)

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

setxkbmap
Zeitvertreib
la source
Cela n'a pas fonctionné pour moi, mais m'a mis sur la bonne voie. Cela fonctionne pour moi: github.com/sblask/dotfiles/commit/…
Sebastian Blask
2

Enfin, il semble que j'ai trouvé la solution qui fonctionne avec tous les modificateurs (Ctrl +, Shift +, Ctrl + Shift +) et Sublime Text 2.

Toute la gloire revient à cette configuration de gemme que j'ai trouvée récemment http://www.spinics.net/lists/xorg/msg35931.html . Il décrit les flèches ijkl, mais il peut être facilement modifié pour la navigation hjkl. Vous devez mettre à jour vos fichiers de disposition de clavier / usr / share / X11 / xkb / symboles / * (personnellement, j'utilise / usr / share / X11 / xkb / symboles / typo, que j'inclus dans ma disposition de clavier avec Xkb option "misc: typo", donc cela fonctionne pour n'importe quelle disposition de clavier). La configuration suppose que la touche de modification envoie ISO_Level3_Shift (il existe plusieurs façons de lier Super ou Alt à ISO_Level3_Shift).

Les définitions de clés devraient ressembler à (utilisez NoSymbol si vous modifiez ../symbols/typo):

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

Vous devez également modifier / usr / share / X11 / types / basic et déclarer le type "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";
};

Quant à Sublime Text 2, la solution est plus délicate et plus hackeuse. Comme mentionné ci-dessus, Sublime Text 2 lit les codes clés directement à partir de l'appareil et ignore ainsi certaines fonctionnalités de Xkb (et l'astuce xkb avec des flèches n'a aucun effet). Il existe un projet presque abandonné mais toujours fonctionnel, Gizmo Daemon http://gizmod.sourceforge.net/ . Après quelques difficultés et recherches sur Google, j'ai réussi à le compiler sur mon Debian Wheezy. J'ai ensuite créé ce script gizmod et je l'ai placé dans ~ / .gizmod / modules.d / 010-KeyboardViMode-SublimeText2.py http://pastebin.com/HNQgGEwD

PS Sous Linux, je manque parfois KeyboardRemap4MacBook. Cette grande paix du logiciel OS X peut permettre une telle navigation (et beaucoup d'autres choses) avec seulement quelques cases à cocher.

sgtpep
la source
1

Je suis un utilisateur HHKB sur Debian / Ubuntu et cette solution fonctionne pour moi.

utiliser Left Ctrlpour la touche active.

$ vi ~/.Xmodmap
keycode 37 = ISO_Level3_Shift

Ajoutez ce code sous // End alphanumeric sectiondans le bloc de base dans / usr / share / X11 / xkb / symboles / us

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

Maintenant, vous devriez être en mesure d'utiliser à gauche, vers le bas, touche haut et à droite avec Ctrl+ h, j, k, l.

Par ailleurs, si vous avez utilisé pentadactyl sur Firefox, vous pouvez ajouter ce code dans ~ / .pentadactylrc

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

Celui-ci fonctionne pour moi sur Arch. Il remappe Caps + hjkl aux touches fléchées et Shift + Caps en 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 ou définissez-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 autre chose que mod5(ce qui est actuellement défini sur Mode_switch). Vérifiez vos mappages de modificateurs actuels avec xmodmap.

Huon Imberger
la source