ANSI转义序列:保存和恢复行位置

时间:2011-09-19 01:45:15

标签: terminal command-line-interface ansi-colors

我正在编写一个非常简单的小型控制台应用程序,我正在使用一些ANSI escape sequences来获得更好的输出。

我想要做的就是这样。有一个带有名称的标题,然后在下面,程序运行时会打印几行。打印每一行时,我想用进度表更新标题行。例如:

My header row                 [ 0/5 ]
-------------------------------------

然后经过一些处理

My header row                 [ 1/5 ]
-------------------------------------
here is some output

...

My header row                 [ 2/5 ]
-------------------------------------
here is some output
the output could
be over several
lines

我尝试使用保存游标位置代码( ESC + [s),然后使用 ESC + [u恢复该位置,但是只能恢复,而不是行。

对于某些背景,这是一个Node.JS程序。我简要地看了一下node-ncurses,然而这个任务看起来有点过分(?)

1 个答案:

答案 0 :(得分:4)

当您在屏幕的最后一行打印并且必须向下滚动时,会出现此问题。文本滚动不会更新保存的光标位置。您需要检测到某些滚动发生(我不知道如何)并采取相应的操作,如发送序列在Esc [u序列之后向上移动光标以便转到原始位置。

再见.-