terminfo(5)中的cursor_up (cuu1) 和 key_up (kcuu1) 有什么区别?

问题描述 投票:0回答:2

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
unix terminal ncurses terminfo tput
2个回答
5
投票

在 terminfo 描述中,以

k
开头的名称表示 keys,而其他名称则用于非键功能。对于大多数按键,按键和现有转义序列之间没有明显的关系,但光标键是例外。

是否相同取决于终端描述。对于

TERM=linux
,它们恰好是相同的,但是可以为 Linux 控制台编写终端描述,而它们不是

区别在于终端是初始化进入应用模式还是留在(默认/开机)正常模式。在应用程序模式下,光标键将发送 Escape

O
作为前缀,而不是 Escape
[

ncurses 终端数据库中超过一半 (54%) 的终端描述使用 应用程序模式,这意味着

cuu1
通常与
kcuu1
不同。

还有另一个需要注意的怪癖:对于其他光标移动,例如

cud1
,终端描述可能会显示
\n
,而光标向下键不会发送该字符(请参阅
iTerm
例如)。

进一步阅读:


1
投票

cursor_up
是主机发送到终端的控制序列,用于将光标向上移动一行。

key_up
是按下向上键时终端向主机发送的控制序列。

在基于 VT100 的终端(包括所有正常的现代终端仿真器)中,这些序列是相同的。然而,一些较旧的终端硬件可能在这两个角色中使用了不同的序列,因此 terminfo 将它们分开。

© www.soinside.com 2019 - 2024. All rights reserved.