xcape vous permet d'utiliser une touche de modification comme une autre touche lorsqu'elle est enfoncée et relâchée seule. Notez que cela est légèrement plus lent que d'appuyer sur la touche d'origine, car l'événement enfoncé ne se produit que lorsque la touche est relâchée. Le comportement par défaut consiste à générer la touche Échap lorsque le contrôle gauche est enfoncé et relâché tout seul. (Si vous ne comprenez pas pourquoi quelqu'un voudrait cela, je suppose que Vim n'est pas votre éditeur de texte préféré ;)
Installez d’abord les dépendances de développement. Sur les systèmes basés sur Debian (y compris Ubuntu et Linux Mint), exécutez :
$ sudo apt-get install git gcc make pkg-config libx11-dev libxtst-dev libxi-dev
Sur les systèmes basés sur Fedora, exécutez :
$ sudo dnf install git gcc make pkgconfig libX11-devel libXtst-devel libXi-devel
Puis exécutez :
$ git clone https://github.com/alols/xcape.git
$ cd xcape
$ make
$ sudo make install
$ xcape [-d] [-f] [-t <timeout ms>] [-e <map-expression>]
-d
Mode débogage. Ne passe pas à l’arrière-plan. Imprime les informations de débogage.
-f
Mode premier plan. Ne passe pas à l’arrière-plan.
-t <timeout ms>
Si vous détenez une clé plus longtemps que ce délai, xcape ne générera pas d'événement clé. La valeur par défaut est 500 ms.
-e <map-expression>
L'expression a la grammaire 'ModKey=Key[|OtherKey][;NextExpression]'
La liste des noms de clés se trouve dans le fichier d'en-tête X11/keysymdef.h
(supprimez le préfixe XK_
). Notez qu'en raison des limitations de X11, les touches majuscules doivent être spécifiées comme une touche majuscule suivie de la touche sur laquelle appuyer plutôt que comme le nom réel du personnage. Par exemple, pour générer "{", l'expression 'ModKey=Shift_L|bracketleft'
peut être utilisée (en supposant que vous ayez une clé avec "{" au-dessus de "[").
Vous pouvez également spécifier des clés en décimal (préfixe #
), octal ( #0
) ou hexadécimal ( #0x
). Ils seront interprétés comme des codes clés à moins qu'aucun nom de clé correspondant ne soit trouvé.
Cela fera que Left Shift générera Escape lorsqu'il sera enfoncé et relâché tout seul, et Left Control générera une combinaison Ctrl-O lorsqu'il sera enfoncé et relâché tout seul.
xcape -e 'Shift_L=Escape;Control_L=Control_L|O'
En conjonction avec xmodmap, il est possible de faire en sorte qu'une touche ordinaire agisse comme un modificateur supplémentaire. Mappez d'abord la clé sur le modificateur avec xmodmap, puis le modificateur sur la clé avec xcape. Cependant, cela présente plusieurs limites : la touche ne fonctionnera pas normalement jusqu'à ce qu'elle soit relâchée, et notamment, elle peut agir comme un modificateur involontairement si vous tapez trop vite. Ce n'est pas un bug de xcape, mais une conséquence inévitable de l'utilisation conjointe de ces deux outils de cette manière. À titre d'exemple, nous pouvons faire fonctionner la barre d'espace comme une touche ctrl supplémentaire lorsqu'elle est maintenue enfoncée (similaire à Space2ctrl) avec la séquence de commandes suivante.
# Map an unused modifier's keysym to the spacebar's keycode and make it a
# control modifier. It needs to be an existing key so that emacs won't
# spazz out when you press it. Hyper_L is a good candidate.
spare_modifier="Hyper_L"
xmodmap -e "keycode 65 = $spare_modifier"
xmodmap -e "remove mod4 = $spare_modifier" # hyper_l is mod4 by default
xmodmap -e "add Control = $spare_modifier"
# Map space to an unused keycode (to keep it around for xcape to
# use).
xmodmap -e "keycode any = space"
# Finally use xcape to cause the space bar to generate a space when tapped.
xcape -e "$spare_modifier=space"
Si vous avez l'habitude de remapper les codes clés en symboles de touches (par exemple, en utilisant xmodmap), vous pouvez rencontrer deux problèmes.
Vous devrez redémarrer xcape après chaque fois que vous modifiez le mappage des codes clés aux symboles de touches (par exemple, avec xmodmap), sinon xcape utilisera toujours l'ancien mappage.
La clé que vous souhaitez envoyer doit avoir un code clé défini. Ainsi, par exemple, avec le mappage par défaut Control_L=Escape
, vous avez toujours besoin d'une touche d'échappement définie dans votre mappage xmodmap. (Je contourne ce problème en utilisant 255, que mon clavier ne peut pas envoyer).
Trouvez la dernière version sur https://github.com/alols/xcape
L'auteur peut être contacté à Albin Dot Olsson à Gmail Dot Com.