Como posso passar as teclas de função para o htop em um tty?

9

Estou tentando usar htopno tty1. No entanto, algumas das teclas de função não parecem funcionar normalmente. F1e F2não faça nada, e F3parece acionar a instalação (que normalmente deve ser acionada por F2). Além disso, F4e F5não funciona. Além disso, quando tento pressionar Escpara sair dessas telas, preciso pressioná-lo duas vezes.

Em um terminal normal ( terminator), as teclas de função funcionam bem. No entanto, eu tenho que pressionar Escduas vezes aqui também, então talvez seja um arenque vermelho.

Como posso usar essas teclas de função em tty1?

EDITAR

Em tty1, se eu pressionar Ctrl+ ventão F1para F5, etc., recebo a seguinte saída:

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

Em terminator, eu recebo

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

As teclas de função acima disso são equivalentes (por exemplo, ^[[17~para F6).

EDIT 2

Em resposta ao comentário de Stéphane Chazelas .

  • $TERMé o mesmo em tty1 e no meu terminal de trabalho "normal". É xterm-256color.
  • Não estou usando screen ou tmux.
  • Estou usando a htop1.0.3, embora minha primeira edição pareça apontar para um problema a montante htop.

"Corresponde ao infocmp -L1 | grep key_fque essas chaves enviam para você?

Não sei ao certo o que você quer dizer com "corresponder ao que essas chaves enviam para você", mas executei esse comando no meu terminal normal e no tty1, e a saída foi idêntica, como abaixo.

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
fonte
1
Em tty1, na janela de comandos, pressione Ctrl+Ventão F1, e ver o que é inserido. Repita o procedimento para F2, F3, F4e F5, em seguida, fazer o mesmo em terminator. Diga-nos o que vê.
Gilles 'SO- stop be evil'
@Gilles A questão foi editada.
Sparhawk
Qual é o valor de $TERMlá? Você está usando screen ou tmux? Qual versão do htop? Corresponde ao infocmp -L1 | grep key_fque essas chaves enviam para você?
Stéphane Chazelas
@ StéphaneChazelas Eu editei a pergunta.
Sparhawk
2
Deve ser TERM = linux, o console virtual linux não tem quase nada a ver com o xterm. O getty deve definir $ TERM para você, não o deve sobrescrever.
Stéphane Chazelas

Respostas:

4

Definindo:

export TERM=xterm-256color

você está dizendo htop(e todos os outros aplicativos de terminal visual que usam o banco de dados termcap ou terminfo) que seu terminal é um xterm de 256 cores e não um console virtual do Linux.

htopirá consultar o banco de dados terminfo para saber qual sequência de caracteres é enviada F1, F2... mas obterá essas para xterm.

xtermenvia sequências diferentes do console virtual do Linux para as chaves que você pode verificar consultando o banco de dados terminfo manualmente, infocmppor exemplo:

$ 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,

Portanto htop, não reconhecerá \E[[Acomo um F1, ele espera \EOPpor isso.

Aqui, você não deseja atribuir valores a $TERMin ~/.bashrc. $TERMdeve ser definido pelos próprios emuladores de terminal ( xterm, terminator) e pelos gettyconsoles virtuais do Linux (devem linuxexistir).

Se você não estiver satisfeito com o valor que um emulador de terminal específico escolhe $TERM, essa é a configuração desses emuladores de terminal que você deve atualizar.

Stéphane Chazelas
fonte
No mac, basta abrir as preferências do Terminal e alterar de "ansi" para xterm-256color.
Xeoncross
Obrigado pela explicação detalhada. No meu caso, Kitty (fork do PuTTY) estava se pondo $TERMpara xterm-256color, mas foi criada para uso ESC[n~teclas de função. Alterei as teclas de função para usar XTerm R6nas configurações e está tudo funcionando agora.
Alan