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


9

我正在尝试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~F6)。

编辑2

回应StéphaneChazelas的评论

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

1
在tty1上,在shell提示符下,按Ctrl+Vthen F1,然后查看插入的内容。重复F2F3F4F5,然后做同样的终结者。告诉我们您所看到的。
吉尔斯(Gilles)'所以

@Gilles问题已被编辑。
Sparhawk

$TERM那里的价值是什么?您正在使用屏幕还是tmux?什么版本的htop?是否infocmp -L1 | grep key_f匹配什么这些密钥发送给你?
斯特凡Chazelas

@StéphaneChazelas我已经编辑了问题。
Sparhawk

2
应该是TERM = linux,Linux虚拟控制台与xterm几乎没有关系。getty应该为您设置$ TERM,您不应覆盖它。
斯特凡Chazelas

Answers:


4

通过设置:

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[[AF1,因此会期望\EOP如此。

在这里,您不想为$TERMin 分配值~/.bashrc$TERM应该由终端仿真器设置(xtermterminator)本身,并通过getty(应该是针对Linux虚拟控制台linux那里)。

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


在Mac上,只需打开“终端”偏好设置,然后从“ ansi”更改为xterm-256color
Xeoncross

感谢您的详细解释。就我而言,KiTTY(PuTTY的叉子)设置$TERMxterm-256color,但设置为使用ESC[n~功能键。我更改了功能键以XTerm R6在设置中使用,并且所有功能现在都可以使用。
艾伦(Alan)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.