web-dev-qa-db-fra.com

Remappez une touche sur Ctrl et faites-la se comporter comme Ctrl lors de l'édition de texte

J'ai acheté un clavier mécanique d'apparence élégante en Corée. En général, cela fonctionne vraiment bien, sauf pour une chose - même si elle a Alt et Ctrl touches du côté droit, ces touches ne génèrent pas les mêmes codes qu’un clavier "normal".

Longue histoire courte, droite Alt est la touche Hangul (changement entre les lettres latines et coréennes) et Ctrl est Hanja (converti entre Hangul et "vieux" caractères coréens). Je voulais utiliser plusieurs mises en page - coréenne et ma version locale (polonais) et garder le meilleur des deux mondes - cela signifie que Right Alt émettre le code d'activation pour Alt lors de la frappe en polonais et pour Hangul lors de la frappe en coréen.

Le coréen a fonctionné hors de la boîte (puisque les codes de clé sont corrects là), mais le polonais a eu besoin de peaufiner. J'ai modifié la présentation (/usr/share/X11/xkb/symbols/pl) en ajoutant les lignes suivantes dans la section active xkb_symbols:

key <HNGL>  { [ ISO_Level3_Shift ] };
key <HJCV>  { [ Control_R ] };

Et j’ai commenté les lignes relatives à HNGL et HJCV dans la présentation "inet", dans la mesure où elles écrasaient mes modifications.

Après ces changements je me suis Alt fonctionne parfaitement, mais il y avait toujours un problème avec Ctrl la clé ne fonctionne pas correctement. En général, cela fonctionne, mais lors de la modification de texte, je devrais pouvoir, par exemple, supprimer un mot en utilisant Ctrl+Backspace combinaison et je suis incapable de le faire.

J'ai exécuté xset -r 131 afin de désactiver la répétition de clé pour cette opération. CtrlTouche Hanja mais ça ne marche toujours pas comme un vrai Ctrl

Voici la sortie xev du remappé Hanja:

KeyPress event, serial 34, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49086462, (88,89), root:(3928,141),
state 0x10, keycode 131 (keysym 0xffe4, Control_R), same_screen YES,
XKeysymToKeycode returns keycode: 105
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

Et voici un habitué Ctrl (à partir d'un autre clavier):

KeyPress event, serial 39, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49144922, (616,377), root:(4456,429),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

Puis-je modifier quelque chose pour que mon système traite cette clé comme un outil à part entière? Ctrl?

5
user1234567

L'affectation d'une clé à une autre est unique lorsque la clé est un modificateur. Ceci réponse a une bonne explication:

L'action, lorsqu'il s'agit d'une action de modificateur telle que celle-ci, modifie l'état de modificateur actuel, qui est (tout simplement) un ensemble d'indicateurs enregistrés dans le système d'exploitation qui enregistrent les modificateurs actuellement activés. [Cet enregistrement] influence les actions sur lesquelles les touches plus mappent.

Ainsi, lorsque vous essayez de mapper votre clé, elle est mappée en tant que clé normale et perd des informations qui spécifient son comportement lorsque vous appuyez sur plusieurs clés.

Pour démontrer, exécutez xmodmap. Notez qu'il existe deux clés par défaut (Control_L et Control_R) associées au modificateur de contrôle. Si vous exécutez xmodmap -e 'keycode 131 = Control_L' puis xmodmap, le modificateur de contrôle doit toujours avoir deux clés, de sorte que votre clé ne soit pas reconnue comme modificateur.

Pour mapper en tant que modificateur:

Effacer la touche de modification control

xmodmap -e 'clear control'

Ajouter le code d'activation pour la clé Hanja

xmodmap -e 'keycode 131 = Control_L'

Enfin, rajoutez les modificateurs par défaut:

xmodmap -e 'add control = Control_L'
xmodmap -e 'add control = Control_R'

Maintenant, si vous exécutiez à nouveau xmodmap, vous remarquerez qu'une nouvelle clé a été ajoutée pour le contrôle de modificateur et qu'il devrait fonctionner correctement maintenant.

Here est un lien vers les instructions officielles d'Arch Linux sur la réaffectation de modificateurs aux touches de votre clavier.

modifier:

pour les modifications persistantes, ajoutez à /usr/share/X11/xkb/symbols/pl:

key <HJCV> { [ Control_L ] };

modifier_map Control { Control_L, Control_R, <HJCV> };
2
jackw11111