Comment passer des touches de fonction à htop dans un tty?

9

J'essaie d'utiliser htopdans tty1. Cependant, certaines touches de fonction ne semblent pas fonctionner normalement. F1et F2ne rien faire, et F3semble déclencher la configuration (qui devrait normalement être déclenchée par F2). De plus, F4et F5ne fonctionnent pas. De plus, lorsque j'essaie d'appuyer sur Escpour sortir de ces écrans, je dois appuyer deux fois dessus.

Dans un terminal normal ( terminator), les touches de fonction fonctionnent correctement. Cependant, je dois appuyer Escdeux fois ici aussi, alors c'est peut-être un hareng rouge.

Comment puis-je utiliser ces touches de fonction dans tty1?

ÉDITER

En tty1, si j'appuie sur Ctrl+ vpuis F1sur F5, etc. j'obtiens la sortie suivante:

^[[[A
^[[[B
^[[[C
^[[[D
^[[[E

En terminator, je reçois

^[OP
^[OQ
^[OR
^[OS
^[[15~

Les touches de fonction ci-dessus sont équivalentes (par exemple ^[[17~pour F6).

EDIT 2

En réponse à Stéphane Chazelas commentaire .

  • $TERMest le même dans tty1 que dans mon terminal de travail "normal". Ça l'est xterm-256color.
  • Je n'utilise ni écran ni tmux.
  • J'utilise htop1.0.3, bien que ma première modification semble indiquer qu'il s'agit d'un problème en amont de htop.

"Correspond infocmp -L1 | grep key_fà ce que ces clés vous envoient?

Je ne sais pas ce que vous entendez par "correspondre à ce que ces clés vous envoient", mais j'ai exécuté cette commande à la fois sur mon terminal normal et sur tty1, et la sortie était identique, comme ci-dessous.

key_f1=\EOP,
key_f10=\E[21~,
key_f11=\E[23~,
key_f12=\E[24~,
key_f13=\E[1;2P,
key_f14=\E[1;2Q,
key_f15=\E[1;2R,
key_f16=\E[1;2S,
key_f17=\E[15;2~,
key_f18=\E[17;2~,
key_f19=\E[18;2~,
key_f2=\EOQ,
key_f20=\E[19;2~,
key_f21=\E[20;2~,
key_f22=\E[21;2~,
key_f23=\E[23;2~,
key_f24=\E[24;2~,
key_f25=\E[1;5P,
key_f26=\E[1;5Q,
key_f27=\E[1;5R,
key_f28=\E[1;5S,
key_f29=\E[15;5~,
key_f3=\EOR,
key_f30=\E[17;5~,
key_f31=\E[18;5~,
key_f32=\E[19;5~,
key_f33=\E[20;5~,
key_f34=\E[21;5~,
key_f35=\E[23;5~,
key_f36=\E[24;5~,
key_f37=\E[1;6P,
key_f38=\E[1;6Q,
key_f39=\E[1;6R,
key_f4=\EOS,
key_f40=\E[1;6S,
key_f41=\E[15;6~,
key_f42=\E[17;6~,
key_f43=\E[18;6~,
key_f44=\E[19;6~,
key_f45=\E[20;6~,
key_f46=\E[21;6~,
key_f47=\E[23;6~,
key_f48=\E[24;6~,
key_f49=\E[1;3P,
key_f5=\E[15~,
key_f50=\E[1;3Q,
key_f51=\E[1;3R,
key_f52=\E[1;3S,
key_f53=\E[15;3~,
key_f54=\E[17;3~,
key_f55=\E[18;3~,
key_f56=\E[19;3~,
key_f57=\E[20;3~,
key_f58=\E[21;3~,
key_f59=\E[23;3~,
key_f6=\E[17~,
key_f60=\E[24;3~,
key_f61=\E[1;4P,
key_f62=\E[1;4Q,
key_f63=\E[1;4R,
key_f7=\E[18~,
key_f8=\E[19~,
key_f9=\E[20~,
Sparhawk
la source
1
Sur tty1, à l'invite du shell, appuyez sur Ctrl+Vpuis F1, et voyez ce qui est inséré. Répétez l' opération pour F2, F3, F4et F5, puis faire la même chose dans Terminator. Dites-nous ce que vous voyez.
Gilles 'SO- arrête d'être méchant'
@Gilles La question a été modifiée.
Sparhawk
Quelle est la valeur de $TERMlà-dedans? Utilisez-vous un écran ou tmux? Quelle version de htop? Correspond infocmp -L1 | grep key_fà ce que ces clés vous envoient?
Stéphane Chazelas
@ StéphaneChazelas J'ai édité la question.
Sparhawk
2
Cela devrait être TERM = linux, la console virtuelle linux n'a presque rien à voir avec xterm. getty devrait définir $ TERM pour vous, vous ne devez pas le remplacer.
Stéphane Chazelas

Réponses:

4

En définissant:

export TERM=xterm-256color

vous dites htop(et toutes les autres applications de terminal visuel qui utilisent la base de données termcap ou terminfo) que votre terminal est un xterm 256 couleurs et non une console virtuelle Linux.

htopinterrogera la base de données terminfo pour savoir sur quelle séquence de caractères est envoyée F1, F2... mais les obtiendra xterm.

xtermenvoie des séquences différentes de la console virtuelle Linux pour ces clés que vous pouvez vérifier en interrogeant la base de données terminfo à la main avec infocmppar exemple:

$ infocmp -L1 xterm-256color | grep 'key_f[1-5]='
        key_f1=\EOP,
        key_f2=\EOQ,
        key_f3=\EOR,
        key_f4=\EOS,
        key_f5=\E[15~,
$ infocmp -L1 linux | grep 'key_f[1-5]='
        key_f1=\E[[A,
        key_f2=\E[[B,
        key_f3=\E[[C,
        key_f4=\E[[D,
        key_f5=\E[[E,

Alors htopne reconnaîtra pas \E[[Acomme un F1, il s'attendra \EOPà cela.

Ici, vous ne voulez pas affecter de valeurs à $TERMin ~/.bashrc. $TERMdevrait être défini par les émulateurs de terminaux ( xterm, terminator) eux-mêmes, et par gettypour les consoles virtuelles Linux (devrait être linuxlà).

Si vous n'êtes pas satisfait de la valeur choisie par un émulateur de terminal particulier $TERM, c'est la configuration de ces émulateurs de terminal que vous devez mettre à jour.

Stéphane Chazelas
la source
Sur mac, ouvrez simplement les préférences du terminal et passez de "ansi" à xterm-256color.
Xeoncross
Merci pour l'explication détaillée. Dans mon cas, KiTTY (fork de PuTTY) était réglé $TERMsur xterm-256color, mais a été configuré pour utiliser ESC[n~les touches de fonction. J'ai changé les touches de fonction à utiliser XTerm R6dans les paramètres et tout fonctionne maintenant.
Alan