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