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