mappages séparés pour TAB et Ci dans .inputrc

0

Pour ce que j'ai essayé, "TAB" et "Ci" dans .inputrc semblent signifier la même chose, tout ce que je lie à l'un est lié à l'autre. Je sais qu’à l’origine, c’était la même chose et que ce comportement était un peu hérité du passé, mais de nos jours, mis à part les émulateurs de terminaux, toutes les applications X font la différence entre une presse Ci et TAB.

Existe-t-il donc un moyen d'exécuter une commande de terminal ("complète" par exemple) lorsque j'appuie sur la touche TAB et d'exécuter une autre commande lorsque j'appuie sur "Ci"?

(La même question s’applique pour Cm et ENTER, Cz, Cd et toutes ces séquences de contrôle que je voudrais envoyer par un autre moyen que leur liaison originale et appliquer mes propres commandes à ces précieux raccourcis clavier)

Et, en passant, si vous pouviez expliquer un peu le processus de pression d'une touche à une interprétation de shell, cela m'aiderait à comprendre. Pour l'instant, j'ai compris que les événements de clavier sont traduits par Xmodmap, puis par .inputrc et que le résultat est interprété par le shell ou quelque chose comme ça.

Antoine Gallix
la source

Réponses:

0

Il n'y a pas de lien direct entre xmodmapet .inputrc.

Selon l'émulateur de terminal, il existe plusieurs moyens de modifier les clés envoyées via le terminal. Certains d'entre eux comprennent

  • modifier la configuration du clavier X ( xkb )
  • modifier les codes clés envoyés pour un événement donné ( xmodmap )
  • éléments spécifiques au terminal tels que la translationsressource utilisée par xterm.

Cependant, dans la situation normale, control/Ienvoie un tabcaractère car c'est ainsi que presque tous les terminaux ont été configurés.

Avec xkb, vous pouvez (en principe) changer ce que fait le clavier. À leur tour, les applications X détectent les événements d'activation et de libération des touches et les traduisent en symboles clés. xevest utile pour afficher des événements. Un émulateur de terminal fonctionnant sous X obtient la série d'événements qu'il (en utilisant les appels de bibliothèque X) peut être traduit en caractères. A tabest juste un autre personnage dans ce cas.

xmodmapLe rôle de ce processus dans ce processus serait une modification ad hoc de la configuration du clavier X.

Si vous utilisez xterm, la translationsressource offre beaucoup de possibilités de configuration. C’est une fonctionnalité de X Toolkit , qui vous permet d’associer diverses combinaisons de touches aux actions intégrées de xterm. Les raccourcis clavier par défaut sont listés dans le manuel . Vous pouvez remplacer ou ajouter à ces liaisons. Vous pouvez définir les informations à plusieurs endroits ( $HOME/.Xdefaultspar exemple, même si elles peuvent être encombrées facilement). Par exemple, je règle la XAPPLRESDIRvariable d'environnement pour qu'elle pointe vers mon répertoire utilisateur contenant les fichiers personnalisés par défaut de l'application. Dans un nommé XTerm, je pourrais mettre cela pour changer le résultat de ctrl/I:

*VT100*translations:    #override \n\ 
    Ctrl ~Shift<Key>I:string("??")

Étant donné que la tabclé a son propre symbole clé, elle n’est pas affectée par cette traduction.

Thomas Dickey
la source
La traduction de X keysym TAB vers Ci est effectuée par l’émulateur de terminal pour l’envoyer au shell. J'ai besoin de la touche TAB pour continuer à être envoyée à toutes les applications X lorsque j'appuie sur la touche de tabulation de mon clavier. Donc, je pense que la seule solution est de trouver un moyen de configurer un émulateur de terminal pour traduire les clés de tabulation en une séquence de caractères personnalisée (autre que Ci) afin que je puisse les assigner ultérieurement à ce que je veux avec .inputrc. Une idée comment faire ça? J'ai essayé de trouver un moyen dans la documentation xterm mais je ne trouve rien sur les traductions personnalisées.
Antoine Gallix