在 terminfo(5):
变量字符串 | 帽名 | TCap代码 | 描述 |
---|---|---|---|
光标向上 | cuu1 | 向上 | 向上一行 |
向上键 | kcuu1 | 库 | 向上箭头键 |
我尝试使用
tput
,它们产生相同的输出:
$ tput cuu1 | hexdump -C
00000000 1b 5b 41 |.[A|
00000003
$ tput kcuu1 | hexdump -C
00000000 1b 5b 41 |.[A|
00000003
在 terminfo 描述中,以
k
开头的名称表示 keys,而其他名称则用于非键功能。对于大多数按键,按键和现有转义序列之间没有明显的关系,但光标键是例外。
是否相同取决于终端描述。对于
TERM=linux
,它们恰好是相同的,但是可以为 Linux 控制台编写终端描述,而它们不是。
区别在于终端是初始化进入应用模式还是留在(默认/开机)正常模式。在应用程序模式下,光标键将发送 Escape
O
作为前缀,而不是 Escape[
。
ncurses 终端数据库中超过一半 (54%) 的终端描述使用 应用程序模式,这意味着
cuu1
通常与 kcuu1
不同。
还有另一个需要注意的怪癖:对于其他光标移动,例如
cud1
,终端描述可能会显示 \n
,而光标向下键不会发送该字符(请参阅 iTerm
例如)。
进一步阅读:
cursor_up
是主机发送到终端的控制序列,用于将光标向上移动一行。
key_up
是按下向上键时终端向主机发送的控制序列。
在基于 VT100 的终端(包括所有正常的现代终端仿真器)中,这些序列是相同的。然而,一些较旧的终端硬件可能在这两个角色中使用了不同的序列,因此 terminfo 将它们分开。