为什么 terminfo[kcuu1] = '\EOA'?

Why is terminfo[kcuu1] = '\EOA'?

据我所知 terminfo(5),kcuu1 应该是终端在按下向上箭头时发送的序列。我从来没有见过 ^[[A 以外的任何东西(现在谈论 cat,搞砸了终端设置等)。所以,鉴于我使用的终端(rxvt、gnome-terminal、iTerm)都默认为 TERM=xterm,为什么 kcuu1 不是 \E[A?

我看到 cuu1 \E[A,但是(再次来自手册页),这是我应该发送到终端以移动光标的字符串,不是终端发送给我的字符串。

顺便说一句,这是 OS X.

Arrow 和其他特殊键(terminfo 将它们称为"keypad")根据终端是否在"application mode" 中发送不同的代码。想要使用各种 k* 键的应用程序应该首先输出 smkx(最后输出 rmkx 以恢复旧行为)。

您可以在 vi(或类似的终端应用程序)中尝试 Ctrl+V Up 以查看 Up 确实发送 \EOA 到那里。

有关详细信息,请参阅这些链接: