在terminfo(5)中cursor_up(cuu1)和key_up(kcuu1)之间的区别是什么?

时间:2018-02-12 08:36:06

标签: unix terminal ncurses terminfo tput

在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] #

2 个答案:

答案 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将它们分开。