Terminal

如何在 tty 中將功能鍵傳遞給 htop?

  • March 23, 2016

我正在嘗試htop在 tty1 中使用。但是,某些功能鍵似乎無法正常工作。F1什麼也不F2做,F3似乎觸發了設置(通常應該由 觸發F2)。此外,F4F5沒有工作。此外,當我嘗試按Esc以退出這些螢幕時,我必須按兩次。

在普通終端 ( terminator) 中,功能鍵可以正常工作。但是,我也必須在這裡按Esc兩次,所以也許這是一個紅鯡魚。

如何在 tty1 中使用這些功能鍵?

編輯

在 tty1 中,如果我按Ctrl+v然後F1F5等等。我得到以下輸出:

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

terminator,我得到

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

上面的功能鍵是等效的(例如^[[17~for F6)。

編輯 2

回應 Stéphane Chazelas 的評論

  • $TERM在 tty1 中與在我的“正常”工作終端中相同。它是xterm-256color
  • 我沒有使用螢幕或 tmux。
  • 我使用的是htop1.0.3,儘管我的第一次編輯似乎指出它是htop.

infocmp -L1 | grep key_f和那些鑰匙發給你的一樣嗎?

我不確定您所說的“匹配那些密鑰為您發送的內容”是什麼意思,但我在我的普通終端和 tty1 中都執行了這個命令,並且輸出是相同的,如下所示。

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

通過設置:

export TERM=xterm-256color

您是在告訴htop(以及使用 termcap 或 terminfo 數據庫的所有其他可視終端應用程序)您的終端是 256 色 xterm 而不是 Linux 虛擬控制台。

htop將查詢 terminfo 數據庫以了解發送的字元序列F1F2……但會得到那些xterm

xterm為那些您可以通過手動查詢 terminfo 數據庫來驗證的鍵發送與 Linux 虛擬控制台不同的序列infocmp,例如:

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

所以htop不會被辨識\E[[AF1,它會期望\EOP它。

在這裡,您不想將值分配給$TERMin ~/.bashrc$TERM應該由終端仿真器(xterm, terminator)自己設置,getty對於 Linux 虛擬控制台(應該在linux那裡)。

如果您對特定終端仿真器選擇的值不滿意,那麼$TERM您應該更新該終端仿真器的配置。

引用自:https://unix.stackexchange.com/questions/198711