Je voudrais remapper les touches de mon pavé numérique afin qu'elles se comportent différemment selon la durée pendant laquelle la touche est enfoncée. Voici un exemple:
Si je maintiens la touche du pavé numérique 9 enfoncée pendant moins de 300 ms, il enverra le raccourci clavier "onglet précédent" Ctrl+Tab
Si je maintiens la touche du pavé numérique 9 enfoncée pendant 300 à 599 ms, il enverra le raccourci clavier "nouvel onglet" Ctrl+T
Si je maintiens la touche du pavé numérique 9 enfoncée pendant 600 à 899 ms, il enverra le raccourci clavier "Fermer l'onglet / fenêtre" Ctrl+W
Si je maintiens la touche du pavé numérique 9 enfoncée pendant plus de 899 ms, cela ne fait rien au cas où j'aurais raté la fenêtre de temps que je voulais.
Sous Windows, je pourrais le faire avec AutoHotKey et sous OS XI avec le ControllerMate, mais je ne trouve pas d'outil sous UNIX / Linux qui permette le remappage des clés en fonction de la durée de conservation d'une clé.
Si vous connaissez un outil qui peut résoudre mon problème, assurez-vous de fournir un script ou un exemple de code qui illustre le comportement de durée de conservation de clé conditionnelle que j'ai décrit ci-dessus. Il n'a pas besoin d'être le code complet pour résoudre mon exemple, mais il devrait être suffisant pour moi de le réutiliser pour mon exemple.
Réponses:
Je viens d'écrire ceci en C :
Utilisez
showkey -a
pour obtenir le code clé de liaison:Placez le code clé de liaison 5 et sa commande (par exemple, exécuter
/tmp/.a.out
) dans ~ / .bashrc:Notez que le code clé pertinent doit également être modifié dans le code source (la valeur hexadécimale peut également être obtenue par le
sudo showkey -a
haut):Compiler avec (sortie
/tmp/a.out
dans mon exemple):Manifestation:
Pavé numérique 5, appuyez brièvement sur ouvrir un nouvel onglet, appuyez légèrement sur gedit ouvert et appuyez longuement sur gnome-terminal.
Ce n'est pas directement applicable dans aucune fenêtre du gestionnaire de bureau gnome, mais je pense que cela devrait vous donner une idée de la façon (difficile) de le mettre en œuvre. Il fonctionne également dans la console virtuelle (Ctrl + Alt + N) et fonctionne dans certains émulateurs de terminaux (par exemple konsole, gnome-terminal, xterm).
p / s: je ne suis pas programmeur ac, alors pardonnez-moi si ce code n'est pas optimisé.
[MISE À JOUR]
La réponse précédente ne fonctionne que dans le shell et le focus requis, donc je pense que l'analyse du / dev / input / eventX est la solution pour travailler dans toute la session X.
Je ne veux pas réinventer la roue. Je joue avec l'
evtest
utilitaire et j'ai modifié la partie inférieure d' evtest.c avec mon propre code:Notez que vous devez changer la partie nom d'utilisateur ( xiaobai est mon nom d'utilisateur). Et aussi
if ( (ev[i].code == 76) ) {
est mon code clavier Numpad 5, vous devrez peut-être imprimer manuellement le code ev [i]. Pour confirmer deux fois. Et bien sûr, vous devez également changer le chemin de la vidéo :)Compilez-le et testez-le directement avec (la partie `` est pour obtenir le bon
/dev/input/eventN
):Notez que
/by-id/
cela ne fonctionne pas dans Fedora 24, donc je le change en / by-path /. Kali pas un tel problème.Mon gestionnaire de bureau est gdm3:
Donc, j'ai mis cette ligne
/etc/gdm3/PostLogin/Default
pour exécuter cette commande en tant que root au démarrage de gdm (/etc/X11/Xsession.d/*
ne fonctionne pas):Pour une raison inconnue /
etc/gdm/PostLogin/Default
ne fonctionne pas sur Fedora 24 'gdm qui me donne " Autorisation refusée " lors de la vérification du/tmp/l_gdmE
journal. Exécuter manuellement aucun problème cependant.Manifestation:
Pavé numérique 5, appui instantané (<= 0,2 seconde) sera ignoré, appui court (0,2 à 0,5 seconde) ouvert
nautilus
, appui moyen (0,5 à 1 seconde) ouvertvlc
pour lire la vidéo, appui long (1 à 2 secondes) ouvertgnome-terminal
et timeout-appuyez sur (2 secondes) pour ouvrirgedit
.J'ai téléchargé le code complet (un seul fichier) ici .
[MISE À JOUR à nouveau]
[1] Ajout d'un flux de clés multiples et correction d'un
notify-send
échec par defineDBUS_SESSION_BUS_ADDRESS
. [2] AjoutéXDG_CURRENT_DESKTOP
etGNOME_DESKTOP_SESSION_ID
pour s'assurer que konsole utilise le thème gnome gui (Modifiez-le si vous n'utilisez pas gnome).J'ai mis à jour mon code ici .
Notez que ce code ne gère pas le flux de clés combinées, par exemple Ctrl+ t.
MISE À JOUR:
Il existe plusieurs interfaces de périphérique dont la séquence d'entrées / dev / input / by-path / XXX-eventN est aléatoire. Je change donc la commande
/etc/gdm3/PostLogin/Default
comme ci-dessous (Chesen
c'est mon nom de clavier, pour votre cas, vous devriez le changer à lagrep Razer
place):Vous pouvez essayer l'extrait eventN de
cat /proc/bus/input/devices | grep -i Razer -A 4
:Dans cet exemple ci-dessus, seule
sudo cat /dev/input/event7
l'impression bizarre sera imprimée lorsque vous cliquerez sur les 12 chiffres de la souris Razer, qui a le modèle «sysrq kbd leds event7» à utilisergrep -P '^(?=.*sysrq)(?=.*leds)'
ci-dessus (votre modèle peut varier).sudo cat /dev/input/event6
imprime une sortie bizarre uniquement lorsque vous cliquez sur la touche centrale haut / bas. Whilesudo cat /dev/input/event5
imprimera une sortie bizarre lorsque vous déplacez votre souris et faites défiler la molette.[Mise à jour: prise en charge du câble du clavier pour recharger le programme]
Ce qui suit devrait être une explication:
la source
if-else
chaque pression de touche, tandis que j'ai également ajoutéif (currCode >= 59) && (currCode <= 81)
pour limiter la plage avantif-else
.Vous trouverez peut-être un outil qui fonctionne avec un ensemble particulier de programmes, mais il n'y aura pas d'outil utilisable globalement car le comportement lié au temps est effectué dans les applications dans X, plutôt que par le système de fenêtrage.
la source
avez-vous vérifié le Xmodmap?
xmodmap est un utilitaire pour modifier les mappages de touches et les mappages de boutons de pointeur dans Xorg
https://wiki.archlinux.org/index.php/Xmodmap
la source