ANSI终端 - 重写输出

时间:2014-03-18 10:42:16

标签: terminal tmux

我正在开发一种新工具,它可以在终端上重写多行,而不是使用ncurses。到目前为止它看起来效果很好 - 直到我发现问题我才知道在这里询问!

如果我的终端一次只能显示20行,那么我找不到删除最后30行的方法,因此无法修改最后10行。因此,在每次重绘我的状态栏时,它将产生10个输出行。如果我然后使用konsole的回滚它看起来像一团糟。

详细问题

当我在终端上运行./demo2(konsole,xterm之类)并且一切都适合可视区域(我的xserver上有一个相当大的屏幕和分辨率)一切正常,请参阅下面的截图。 / p>

然而,如果我缩小konsole,动态重写区域的部分(以--------------------开头)不再被删除,因为终端似乎无法为了某种未知的原因而达到它。

https://en.wikipedia.org/wiki/ANSI_terminal说:

CSI n A   CUU – Cursor Up Moves the cursor n (default 1) cells
CSI n B   CUD – Cursor Down
CSI n C   CUF – Cursor Forward
CSI n D   CUB – Cursor Back
     

如果光标已经位于屏幕边缘,则无效。

这正是我注意到的,无法使用这些功能。你知道我能做些什么来解决这个问题吗?

我尝试了各种其他终端转义序列,但都没有工作。我想要做的就是重写当前显示在终端上的缓冲区。

请注意:我知道ncurses但我希望在不使用它的情况下使用此功能。

理想情况下:DOM终端

编辑终端输出会很酷,就像DOM树一样。这样我就可以更新像status-widget这样的单个元素。然后,我可以拥有单个元素的ID并仅更新这些元素,而不会在之前或之后触及其他元素 - 理想情况下不会丢失用户的选择(使用鼠标进行)。也许TMUX是我想要的,但在看了之后我还没有看到如何让它发挥作用。

这将在终端上重新实现X-widget样式呈现!

欢迎提出建议! ; - )

请参阅我的项目[demo2.cpp]:

见截图:

0 个答案:

没有答案