为什么 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
到那里。
有关详细信息,请参阅这些链接:
- Terminfo smkx and Application Cursor Keys vs Application keypad
- http://invisible-island.net/xterm/xterm.faq.html#xterm_arrows
据我所知 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
到那里。
有关详细信息,请参阅这些链接:
- Terminfo smkx and Application Cursor Keys vs Application keypad
- http://invisible-island.net/xterm/xterm.faq.html#xterm_arrows