terminfo(5) 中的 cursor_up (cuu1) 和 key_up (kcuu1) 有什么区别?
What's the difference between cursor_up (cuu1) and key_up (kcuu1) in terminfo(5)?
在术语信息(5)中:
Variable String Capname TCapCode Description
---------------------------------------------------------------
cursor_up cuu1 up up one line
key_up kcuu1 ku up-arrow key
我尝试了 tput,它们产生了相同的输出:
[STEP 102] # tput cuu1 | hd -C
00000000 1b 5b 41 |.[A|
00000003
[STEP 103] # tput kcuu1 | hd -C
00000000 1b 5b 41 |.[A|
00000003
[STEP 104] #
cursor_up
是主机发送给终端的控制序列,使光标上移一行。
key_up
是终端在按下向上方向键时发送给主机的控制序列。
在基于 VT100 的终端(包括所有健全的现代终端仿真器)中,这些序列是相同的。然而,一些较旧的终端硬件可能在这两个角色中使用了不同的序列,因此 terminfo 将它们分开。
在术语信息描述中,以k
开头的名称表示键,而其他名称用于非键能力。对于大多数键,键与现有转义序列之间没有明显的关系,但光标键是个例外。
是否相同取决于终端描述。对于 TERM=linux
,它们恰好是相同的,但是可以为 Linux 控制台编写终端描述,其中它们是 not.
区别在于终端是初始化进入应用模式还是留在(default/power-up)正常模式。在应用程序模式下,光标键将发送 EscapeO
作为前缀而不是 Escape[
.
ncurses terminal database 中略多于一半 (54%) 的终端描述使用 应用程序模式 ,这意味着 cuu1
比与 kcuu1
.
没有区别
还有一个问题需要注意:对于其他光标移动,例如 cud1
,终端描述可能会说 \n
,而键因为光标向下不会发送该字符(例如参见 [=20=])。
延伸阅读:
在术语信息(5)中:
Variable String Capname TCapCode Description
---------------------------------------------------------------
cursor_up cuu1 up up one line
key_up kcuu1 ku up-arrow key
我尝试了 tput,它们产生了相同的输出:
[STEP 102] # tput cuu1 | hd -C
00000000 1b 5b 41 |.[A|
00000003
[STEP 103] # tput kcuu1 | hd -C
00000000 1b 5b 41 |.[A|
00000003
[STEP 104] #
cursor_up
是主机发送给终端的控制序列,使光标上移一行。
key_up
是终端在按下向上方向键时发送给主机的控制序列。
在基于 VT100 的终端(包括所有健全的现代终端仿真器)中,这些序列是相同的。然而,一些较旧的终端硬件可能在这两个角色中使用了不同的序列,因此 terminfo 将它们分开。
在术语信息描述中,以k
开头的名称表示键,而其他名称用于非键能力。对于大多数键,键与现有转义序列之间没有明显的关系,但光标键是个例外。
是否相同取决于终端描述。对于 TERM=linux
,它们恰好是相同的,但是可以为 Linux 控制台编写终端描述,其中它们是 not.
区别在于终端是初始化进入应用模式还是留在(default/power-up)正常模式。在应用程序模式下,光标键将发送 EscapeO
作为前缀而不是 Escape[
.
ncurses terminal database 中略多于一半 (54%) 的终端描述使用 应用程序模式 ,这意味着 cuu1
比与 kcuu1
.
还有一个问题需要注意:对于其他光标移动,例如 cud1
,终端描述可能会说 \n
,而键因为光标向下不会发送该字符(例如参见 [=20=])。
延伸阅读: