在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
2条答案
按热度按时间kzmpq1sx1#
在terminfo描述中,以**
k
开头的名称表示 * 键 *,而其他名称用于非键功能。对于大多数键,键和现有转义序列之间没有明显的关系,但光标键是例外。它们是否相同取决于终端描述。对于
TERM=linux
,它们碰巧是相同的,但是可以为Linux控制台编写一个终端描述,在那里它们是而不是**。区别在于终端是 * 初始化 * 为 * 应用模式 * 还是保留在(默认/上电)* 正常模式 。在应用模式下,光标键将发送 * Escape**
O
作为前缀,而不是 * Escape*[
。ncurses终端数据库中超过一半(54%)的终端描述使用 * application mode ,这意味着
cuu1
通常与kcuu1
不同。还有一个怪癖需要注意:对于诸如
cud1
的其它光标移动,终端描述可以说*\n
,而用于光标向下的键将不发送该字符(例如,参见iTerm
)。进一步阅读:
7qhs6swi2#
cursor_up
是主机发送给终端的将光标上移一行的控制序列。key_up
是当按下向上箭头键时终端发送给主机的控制序列。在基于VT100的终端(包括所有现代终端仿真器)中,这些序列是相同的。然而,一些较老的终端硬件可能在这两个角色中使用不同的序列,因此terminfo将它们分开。