Unix 什么';在终端(5)中,光标向上(cuu1)和键向上(kcuu1)的区别是什么?
在第(5)款中:Unix 什么';在终端(5)中,光标向上(cuu1)和键向上(kcuu1)的区别是什么?,unix,terminal,ncurses,terminfo,tput,Unix,Terminal,Ncurses,Terminfo,Tput,在第(5)款中: 变量字符串Capname TCapCode说明 --------------------------------------------------------------- 光标向上cuu1向上一行 向上键kcuu1 ku向上箭头键 我尝试了tput,它们产生了相同的输出: [步骤102]#tput cuu1 | hd-C 00000000 1b 5b 41 |[A]| 00000003 [步骤103]#t输出kcuu1 | hd-C 00000000 1b 5b 41 |
变量字符串Capname TCapCode说明
---------------------------------------------------------------
光标向上cuu1向上一行
向上键kcuu1 ku向上箭头键
我尝试了tput,它们产生了相同的输出:
[步骤102]#tput cuu1 | hd-C
00000000 1b 5b 41 |[A]|
00000003
[步骤103]#t输出kcuu1 | hd-C
00000000 1b 5b 41 |[A]|
00000003
[步骤104]#
光标向上
是主机发送到终端的控制序列,用于将光标向上移动一行
键\u up
是按下向上箭头键时终端发送到主机的控制序列
在基于VT100的终端中(包括所有sane现代终端模拟器),这些序列是相同的。但是,一些较旧的终端硬件可能在这两个角色中使用了不同的序列,因此terminfo将它们分开。
cursor\u up
是主机发送给终端的控制序列,用于将光标上移一行
键\u up
是按下向上箭头键时终端发送到主机的控制序列
在基于VT100的终端中(包括所有sane现代终端模拟器),这些序列是相同的。但是,一些旧的终端硬件可能在这两个角色中使用了不同的序列,因此terminfo将它们分开。在terminfo描述中,以
k开头的名称表示密钥,而其他名称用于非密钥功能。对于大多数密钥,没有现成的应用程序键和现有转义序列之间没有关系,但光标键是例外
它们是否相同取决于终端描述。对于TERM=linux
,它们恰好是相同的,但是可以为它们不是的linux控制台编写终端描述
区别在于终端是初始化到应用模式还是保持在(默认/通电)正常模式。在应用模式下,光标键将发送EscapeO
作为前缀,而不是Escape[
ncurses中超过一半(54%)的终端描述使用应用程序模式,这意味着cuu1
与kcuu1
有很大的不同
还有另一个需要注意的怪癖:对于其他光标移动,例如cud1
,终端描述可能会说\n
,而光标向下键不会发送该字符(参见示例)
进一步阅读:
在terminfo描述中,以k开头的名称表示键,而其他名称用于非键功能。对于大多数键,键与现有转义序列之间没有明显的关系,但光标键是例外
它们是否相同取决于终端描述。对于TERM=linux
,它们恰好是相同的,但是可以为它们不是的linux控制台编写终端描述
区别在于终端是初始化到应用模式还是保持在(默认/通电)正常模式。在应用模式下,光标键将发送EscapeO
作为前缀,而不是Escape[
ncurses中超过一半(54%)的终端描述使用应用程序模式,这意味着cuu1
与kcuu1
有很大的不同
还有另一个需要注意的怪癖:对于其他光标移动,例如cud1
,终端描述可能会说\n
,而光标向下键不会发送该字符(参见示例)
进一步阅读:
谢谢。刚刚尝试了TERM=xterm
,找到了cuu1=\E[A
,kcuu1=\EOA
。对于TERM=screen
:cuu1=\EM
,kcuu1=\EOA
。谢谢。刚刚尝试了TERM=xterm
,找到了cuu1=\E>[A
,kcuu1=\EOA
。对于TERM=screen
:cuu1=\EM
,kcuu1=\EOA
。在xterm
中(不是旧硬件终端),光标向上
和键向上
是不同的。在xterm
中(不是旧硬件终端),光标向上
和键向上
不同。