quelle est la séquence d’échappement du terminal pour ctrl + flèche (gauche, droite, …) dans TERM = linux

Je construis une fenêtre de terminal dans un navigateur (sth. Comme ajaxterm) et je ne sais pas quelle séquence d’échappement envoyer au tunnel ssh (ouverte via paramiko.SSHClient().invoke_shell(term='linux') ).

J’ai trouvé un enregistreur de clés et l’ai essayé dans un terminal avec $ TERM == ‘linux’, mais il renvoie la même séquence pour ctrl+left et left (27,91,68).

Si j’essaie le keylogger dans un autre terminal (avec $ TERM == ‘xterm’), j’obtiens les codes (27,91,49,59,53,68). Mais ces codes ne bougent pas pour générer la sortie attendue du canal SSH (ce qui déplacerait le curseur d’un mot à gauche sur un shell Linux normal). C’est vrai même si je lance paramiko avec terme = ‘xterm’.

Toute idée de la séquence que je devrais utiliser? Ou pourquoi la séquence ci-dessus ne fonctionne pas?

MISE À JOUR : Je serais heureux d’utiliser un autre type de terminal (pas “linux”), mais malheureusement pyte ne fonctionne qu’avec les terminaux VTxxx (je pense que “linux” est un terminal de type vt220 – de toute façon, ça marche) correctement.

Les terminaux étaient des périphériques matériels composés d’un clavier et d’un périphérique de sortie (initialement une imprimante papier, puis un moniteur CRT). Un grand ordinateur pourrait avoir plusieurs terminaux distants connectés. Chaque terminal aurait un protocole pour communiquer efficacement avec l’ordinateur. Pour les terminaux à tube cathodique, cela inclut des “séquences de contrôle” spéciales pour changer la position du curseur, effacer des parties de la ligne / écran en cours, passer à un autre mode plein écran. ..

Un émulateur de terminal est une application émulant l’un de ces anciens terminaux. Il permet de faire des fonctions telles que le positionnement du curseur, la définition des couleurs de premier plan et d’arrière-plan, … Les émulateurs de terminaux tentent d’émuler un protocole de terminal spécifique, mais chacun possède ses propres bizarreries et écarts.

Les systèmes Unix ont des bases de données décrivant les terminaux et les émulateurs de terminaux, de sorte que les applications sont extraites du terminal particulier (ou de l’émulateur de terminal) utilisé. Une firebase database plus ancienne est termcap(5) , tandis que terminfo(5) est une firebase database plus récente. Ces bases de données permettent aux applications d’interroger les capacités du terminal utilisé. Les capacités peuvent être booléennes, des capacités numériques ou même des capacités de chaîne, par exemple: si un type de terminal spécifique a / supporte une clé F12, il aura la capacité “key_f12” (nom long terminfo), “kf12” (nom court terminfo), “F2” (nom du terme) décrivant la chaîne produite par cette clé. Essayez avec: tput kf12 | od -tx1 tput kf12 | od -tx1 .

Etant donné que la programmation directe avec des capacités peut être lourde, les applications utilisent généralement une bibliothèque de niveau supérieur, telle que curses / ncurses, slang, etc.

Il existe une variable d’environnement spéciale appelée TERM qui indique aux applications quel type de terminal elles parlent. Cette variable doit être définie sur le type de terminal exact si elle existe dans la firebase database, pour de meilleurs résultats. Cela indique à l’application quelles sont les déviations précises du protocole et du protocole que le terminal comprend. La modification de la variable TERM ne modifie pas le type de terminal, elle modifie simplement le type de terminal auquel l’application pense être en train de parler.

Tout ce qui est dit, Ctrl+arrow est un comportement de xterm (dépendant d’une option de configuration) qui n’est pas du tout reflété dans les bases de données terminfo / termcap, de sorte que la plupart des applications ne le sauront pas. Dans les deux cas, votre émulateur de terminal (dans votre cas, pyte ) le prend en charge ou ce n’est pas le cas.

En supposant que votre application principale est bash ou une autre application qui utilise la bibliothèque readline , vous pouvez vous contenter d’utiliser le backward-word clé readline (Meta-b / Alt-b / ESC b par défaut, configurable dans inputrc ).

Une vérification rapide avec od -c révèle que gnome-termainal génère ces valeurs:

La flèche gauche génère ESC[D

Le tableau de contrôle-gauche produit ESC[1;5D

Les raccourcis clavier Ctrl + ont été introduits par xterm, et les goûts de Gnome Terminal et KDE Konsole essaient d’être compatibles avec xterm. Les terminaux actuels VT100 et VT220 ne possédaient pas de codes clés distincts pour de telles combinaisons. Pour autant que je sache, la console Linux se veut compatible avec le VT100, avec quelques ajouts, tandis que xterm émule le VT220, avec de nombreux ajouts.