Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terminal ANSI转义序列保存/恢复光标位置支持_Terminal_Ansi Escape - Fatal编程技术网

Terminal ANSI转义序列保存/恢复光标位置支持

Terminal ANSI转义序列保存/恢复光标位置支持,terminal,ansi-escape,Terminal,Ansi Escape,是否有任何已知的终端支持光标键向上、向下、向前和向后的ANSI转义序列: CSI n A Cursor Up CSI n B Cursor Down CSI n C Cursor Forward CSI n D Cursor Back 但是不支持保存光标位置和恢复光标位置转义序列吗 CSI s Save Cursor Position CSI u Restore Cursor Position 真正的VT100(或VT220)无法识别这

是否有任何已知的终端支持光标键向上、向下、向前和向后的ANSI转义序列:

CSI n A     Cursor Up
CSI n B     Cursor Down
CSI n C     Cursor Forward
CSI n D     Cursor Back
但是不支持保存光标位置和恢复光标位置转义序列吗

CSI s       Save Cursor Position
CSI u       Restore Cursor Position
真正的VT100(或VT220)无法识别这些保存/恢复光标位置的控制序列。他们使用(如xterm列表中所述)

这些是terminfo中的
sc
rc
功能;您可能会看到使用

infocmp vt100
infocmp vt220

CSI s
CSI u
的来源可能来自
ansi.sys
(请参见终端数据库条目),尽管始终可以使用较旧的来源。

使用
ESC 7
ESC 8
似乎更安全。iTerm 2可识别
CSI s
CSI u
序列,但macOS上的Terminal.app无法识别。同样,在录制时无法识别它们。如果在
ESC 7
ESC 8
之后打印了一些文本,该怎么办?一些字符似乎使终端误以为
7
实际上是一个与命令P完全不同的参数(例如,如果发送
\033[7Hello
,它实际上会将光标移动到第7列并在那里打印
ello
,因为初始的
H
是“移动光标”命令。
7
之后是否有终止转义序列的方法,以便后面的文本不会被解释为命令?
ESC 7
ESC[7
不同,因为后者(前两个字符)是标准化的,而前者依赖于终端。第二个之后的任何控制字符都将终止序列(至少在符合标准的终端上)。有趣的是,我不知道其中有两个!:o而且确实
ESC 7
对我有效。尽管另一个(标准化的一个,正如你所说的)同样有效。是否有任何控制字符可以在不干扰输出的情况下终止序列?(某种“不做任何事情”的转义序列)
infocmp vt100
infocmp vt220