Lier les touches Ci et TAB à différentes commands dans les applications du terminal via .inputrc

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 est hérité du passé, mais de nos jours, hormis les émulateurs de terminal, toutes les applications X font la différence entre une presse Ci et une presse TAB.

Existe-t-il un moyen d'exécuter une command de terminal ("complète" par exemple) lorsque j'appuie sur la touche TAB et exécute une autre command 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 d'autres moyens que leur binding d'origine et d'appliquer mes propres commands à ces précieux keybindings)

Et d'ailleurs, si vous pouviez expliquer un peu le process d'une pression de touche à une interprétation de coquille qui m'aiderait à comprendre. Pour l'instant, j'ai compris que les events keyboard sont traduits par Xmodmap, puis par .inputrc et que le résultat est interprété par le shell ou quelque chose comme ça.

J'utilise actuellement Guake, et parfois gnome-terminal, comme émulateurs de terminal.

Après avoir suivi le lien proposé dans un commentaire, il apparaît que l'émulateur de terminal est l'élément de la string qui transforme TAB keysym du server X en Ci, et l'envoie au shell bash car il ne comprend pas TAB, ENTER et frères et sœurs. Donc, la configuration de readline ne fonctionnera pas comme elle vient après l'émulateur de terminal et avant le shell bash. La question pourrait alors être précisée comme suit: Comment configurer mon émulateur de terminal pour qu'il traduise TAB et Ci, ENTER et Cm, etc., en différentes paires de séquences de caractères? Peut-être que TAB et ENTER envoient une nouvelle séquence d'échappement personnalisée, qui pourrait être mappée dans .inputrc plus tard aux commands d'origine, et enfin être en mesure d'utiliser Ci et Cm à d'autres fins. Ou laissez TAB et ENTER et faites en sorte que Ci et Cm envoient des séquences d'échappement à la place.

L'émulateur de terminal traduit les events comme "la touche Tab a été pressée" en séquences de caractères que l'application s'exécutant dans le terminal (bash, dans votre cas) lit. Voir Comment fonctionnent les inputs keyboard et la sortie de text? pour une présentation plus détaillée de ce sujet.

Pour des raisons historiques, quelques touches envoient un caractère identique à Ctrl avec un autre caractère: Tab = Ctrl + I , Retour = Ctrl + M , Esc = Ctrl + [ . C'est parce que les terminaux physiques historiques ont fait cela, donc les applications qui s'exécutent dans les terminaux l'attendent, alors les terminaux le font.

Guake et Gnome-terminal utilisent tous deux la bibliothèque VTE , qui ne permet pas de mapper les accords de key aux séquences de caractères à configurer. Vous avez le même problème que bash – mauvais raccourcis keyboard avec contrôle + alt + espace

Xterm a des raccourcis keyboard entièrement configurables. Vous pouvez faire en sorte que la touche de tabulation envoie un caractère de tabulation (c'est le caractère par défaut), ou faites-le envoyer la string hello , ou ce que vous choisissez. Xterm est configuré via des ressources X Par exemple, pour que Tab envoie la séquence d'échappement \e[t quand elle est pressée et \e]t lorsqu'elle est relâchée, mettez-la dans vos ~/.Xresources :

 XTerm.vt100.translations: #override \ <Key>Tab: ssortingng("\033[t") \n\ <KeyRelease>Tab: ssortingng("\033]t") \n\ 

Ou peut-être que vous quitterez Tab en envoyant le caractère de tabulation et faites Ctrl + I envoyer quelque chose d'autre:

 XTerm.vt100.translations: #override \ Ctrl~Meta~Shift<Key>I: ssortingng("\033[a5i") \n\ Ctrl~Meta Shift<Key>I: ssortingng("\033[a6i") \n\ 

Vous pouvez ensuite lier \e[a5i à ce que vous voulez dans bash et d'autres applications de terminal avec des raccourcis keyboard configurables.

Notez que, par convention, les séquences d'échappement multi-caractères commencent par le caractère d'échappement (souvent représenté par \e ou \033 ou \x1b dans les langages de programmation et les files de configuration); certaines applications peuvent avoir des problèmes avec les séquences d'échappement commençant par d'autres caractères et bien sûr, vous ne pouvez pas avoir un caractère qui est à la fois une séquence d'échappement et une key à part entière, à less que vous acceptiez un timeout d'attente applications telles que vi où Esc est lié à certaines fonctionnalités). Si vous définissez vos propres séquences de touches, veillez à ne pas entrer en conflit avec celles envoyées par les touches de fonction et de slider, qui sont plus ou less standardisées de facto .