如何在 tty 中将功能键传递给 htop?

如何在 tty 中将功能键传递给 htop?

我正在尝试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 的评论

  • $TERMtty1 中的与我的“正常”工作终端中的相同。这是xterm-256color
  • 我没有使用 screen 或 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~,

答案1

通过设置:

export TERM=xterm-256color

您告诉htop(以及使用 termcap 或 terminfo 数据库的所有其他可视终端应用程序)您的终端是 256 色 xterm,而不是 Linux 虚拟控制台。

htop将查询 terminfo 数据库以了解发送的字符序列F1F2...但将获取这些字符xterm

xterm对于这些键,发送的序列与 Linux 虚拟控制台不同,您可以通过手动查询 terminfo 数据库来验证这些键,例如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[[A为 a F1,它会期待\EOP这一点。

在这里,您不想为$TERMin赋值~/.bashrc。应由终端仿真器 ( 、) 本身以及Linux 虚拟控制台(应该在那里)$TERM设置。xtermterminatorgettylinux

如果您对特定终端模拟器选择的值不满意$TERM,则您应该更新该终端模拟器的配置。

相关内容