【问题标题】:ANSI escape sequences: save and restore a row positionANSI 转义序列:保存和恢复行位置
【发布时间】:2011-11-19 21:53:30
【问题描述】:

我正在编写一个非常简单的小控制台应用程序,并且正在使用一些 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,但是对于这项任务来说似乎有点矫枉过正(?)

【问题讨论】:

  • 您是否尝试过手动移动光标而不是使用存储/恢复?
  • @lordscarlet 我现在不记得了。我猜大概?我认为问题可能是我不知道要向上移动多少行,因为输出可能会跨越多行。
  • 我建议始终使用 ncurses 或任何适合您上下文的相应库。这不是矫枉过正,这是正确的。 :-) 更重要的是,它将为您省去一堆麻烦,试图弄清楚以什么顺序使用什么代码来达到预期的效果。而且它是便携式的。除非无法避免,否则切勿对终端控制序列进行硬编码——最好通过 ncurses 使用 terminfo。

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


【解决方案1】:

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

再见。-

【讨论】:

    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2012-01-12
    相关资源
    最近更新 更多