Jak mogę przekazać klawisze funkcyjne do htopa w tty?

9

Próbuję użyć htopw tty1. Jednak niektóre klawisze funkcyjne nie działają normalnie. F1i F2nie rób nic, i F3wydaje się, że wyzwala konfigurację (która normalnie powinna zostać uruchomiona F2). Ponadto F4i F5nie działają. Ponadto, gdy próbuję nacisnąć przycisk, Escaby wyjść z tych ekranów, muszę go nacisnąć dwukrotnie.

W normalnym terminalu ( terminator) klawisze funkcyjne działają dobrze. Muszę jednak nacisnąć Escdwa razy tutaj, więc może to czerwony śledź.

Jak korzystać z tych klawiszy funkcyjnych w tty1?

EDYTOWAĆ

W tty1, jeśli naciśniesz Ctrl+, va następnie F1na F5itd., Otrzymam następujące dane wyjściowe:

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

W terminatorotrzymuję

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

Powyższe klawisze funkcyjne są równoważne (np. ^[[17~Dla F6).

EDYCJA 2

W odpowiedzi na komentarz Stéphane Chazelas .

  • $TERMjest taki sam w tty1 jak w moim „normalnym”, działającym terminalu. Jest xterm-256color.
  • Nie używam screena ani tmuxa.
  • Korzystam z wersji htop1.0.3, chociaż moja pierwsza edycja wydaje się wskazywać, że jest to problem wcześniejszy htop.

„Czy infocmp -L1 | grep key_fpasuje do tego, co te klucze wysyłają dla ciebie?

Nie jestem pewien, co masz na myśli przez „dopasuj, co te klucze wysyłają dla ciebie”, ale uruchomiłem to polecenie zarówno w moim normalnym terminalu, jak i w tty1, a wynik był identyczny, jak poniżej.

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~,
Krogulec
źródło
1
Na tty1, po znaku zachęty powłoki, naciśnij Ctrl+Vnastępnie F1i zobacz, co zostanie wstawione. Powtórzyć dla F2, F3, F4i F5, a następnie zrobić to samo w terminator. Powiedz nam, co widzisz.
Gilles 'SO - przestań być zły'
@Gilles Pytanie zostało edytowane.
Sparhawk
Jaka jest tam wartość $TERM? Używasz screena lub tmuxa? Jaka wersja htopa? Czy infocmp -L1 | grep key_fpasuje do tego, co te klucze wysyłają dla ciebie?
Stéphane Chazelas,
@ StéphaneChazelas Zredagowałem pytanie.
Sparhawk,
2
Powinno to być TERM = linux, wirtualna konsola linux nie ma prawie nic wspólnego z xterm. getty powinien ustawić dla ciebie $ TERM, nie powinieneś go nadpisywać.
Stéphane Chazelas,

Odpowiedzi:

4

Przez ustawienie:

export TERM=xterm-256color

mówisz htop(i każdej innej wizualnej aplikacji terminala, która korzysta z termcap lub bazy danych terminfo), że twój terminal jest 256-kolorowy xterm, a nie wirtualna konsola Linux.

htopwyśle ​​zapytanie do bazy danych terminfo, aby dowiedzieć się, na którą sekwencję znaków jest wysyłany F1, F2... ale dostanie je xterm.

xtermwysyła inne sekwencje niż wirtualna konsola Linux dla tych kluczy, które można zweryfikować, ręcznie sprawdzając bazę danych terminfo, infocmpna przykład:

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

Więc htopnie rozpozna \E[[Ajako F1, będzie się tego spodziewać \EOP.

Tutaj nie chcesz przypisać wartości $TERMw ~/.bashrc. $TERMpowinny być ustawione przez same emulatory terminali ( xterm, terminator) oraz przez gettykonsole wirtualne Linux (powinny linuxtam być ).

Jeśli nie jesteś zadowolony z wartości wybieranej przez dany emulator terminala $TERM, to właśnie konfigurację tego emulatora terminala powinieneś zaktualizować.

Stéphane Chazelas
źródło
Na komputerze Mac wystarczy otworzyć preferencje terminala i zmienić z „ansi” na xterm-256color.
Xeoncross
Dziękuję za szczegółowe wyjaśnienie. W moim przypadku, Kitty (widelec kit) chyliło $TERMsię xterm-256color, ale został skonfigurowany do korzystania z ESC[n~klawiszy funkcyjnych. Zmieniłem klawisze funkcyjne, aby używać ich XTerm R6w ustawieniach i wszystko działa teraz.
Alan