从读取terminfo(5)
可以看出,kcuu1应该是按下向上箭头时终端发送的序列。我从来没有见过除了^[[A
之外的任何东西(现在说到cat
,混乱的终端设置等)。那么,既然我使用的终端(rxvt、gnome-terminal、TERM)都默认为TERM=xterm,为什么kcuu1不是E[A
呢?
我看到cuu1 是 E[A
,但是(再次从手册页),这是我应该发送给终端移动光标的字符串,而不是终端发送给我的字符串。
箭头等特殊键(终端称其为"键盘")根据终端是否处于"应用模式"发送不同的代码。一个想要使用各种k*
键的应用程序应该首先输出smkx
(最后输出rmkx
以恢复旧的行为)。
您可以在vi(或类似的终端应用程序)中尝试Ctrl+VUp,查看Up确实将EOA
发送到那里。
查看以下链接了解更多详细信息:
- 终端smkx和应用程序光标键vs应用程序键盘
- http://invisible-island.net/xterm/xterm.faq.html xterm_arrows