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

ldioqlga  于 2023-02-15  发布在  Unix
关注(0)|答案(2)|浏览(138)

terminfo(5)中:
| 变量字符串|大写字母名称|TCap代码|说明|
| - ------|- ------|- ------|- ------|
| 光标向上|库乌1|向上|向上一行|
| 向上键|克库乌1|库|向上箭头键|
我尝试使用tput,它们产生相同的输出:

$ tput cuu1  | hd -C
00000000  1b 5b 41                                      |.[A|
00000003
$ tput kcuu1 | hd -C
00000000  1b 5b 41                                      |.[A|
00000003
kzmpq1sx

kzmpq1sx1#

在terminfo描述中,以**k开头的名称表示 * 键 *,而其他名称用于非键功能。对于大多数键,键和现有转义序列之间没有明显的关系,但光标键是例外。
它们是否相同取决于终端描述。对于TERM=linux,它们碰巧是相同的,但是可以为Linux控制台编写一个终端描述,在那里它们是
而不是**。
区别在于终端是 * 初始化 * 为 * 应用模式 * 还是保留在(默认/上电)* 正常模式 。在应用模式下,光标键将发送 * Escape**O作为前缀,而不是 * Escape*[
ncurses终端数据库中超过一半(54%)的终端描述使用 * application mode ,这意味着cuu1通常与kcuu1不同。
还有一个怪癖需要注意:对于诸如cud1的其它光标移动,终端描述可以说
*\n
,而用于光标向下的键将不发送该字符(例如,参见iTerm)。
进一步阅读:

  • 我的光标键不起作用
7qhs6swi

7qhs6swi2#

cursor_up是主机发送给终端的将光标上移一行的控制序列。
key_up是当按下向上箭头键时终端发送给主机的控制序列。
在基于VT100的终端(包括所有现代终端仿真器)中,这些序列是相同的。然而,一些较老的终端硬件可能在这两个角色中使用不同的序列,因此terminfo将它们分开。

相关问题