Terminal ANSI终端-重写输出

Terminal ANSI终端-重写输出,terminal,tmux,Terminal,Tmux,我正在开发一个新工具,它可以在终端上重写多行,但不使用ncurses。到目前为止,它似乎工作得很好-直到我发现了我在这里要问的问题 我没有找到删除最后30行的方法,如果我的终端一次只能显示20行,那么最后10行无法修改。因此,每次重新绘制我的状态栏时,它都会再生成10行输出。如果我使用konsole的卷轴,它看起来就像一团乱 问题的细节 当我在终端(konsole、xterm等)上运行./demo2时,所有东西都可以放在可视区域内(我在xserver上获得了相当大的屏幕和分辨率),所有东西都按照

我正在开发一个新工具,它可以在终端上重写多行,但不使用ncurses。到目前为止,它似乎工作得很好-直到我发现了我在这里要问的问题

我没有找到删除最后30行的方法,如果我的终端一次只能显示20行,那么最后10行无法修改。因此,每次重新绘制我的状态栏时,它都会再生成10行输出。如果我使用konsole的卷轴,它看起来就像一团乱

问题的细节 当我在终端(konsole、xterm等)上运行./demo2时,所有东西都可以放在可视区域内(我在xserver上获得了相当大的屏幕和分辨率),所有东西都按照预期工作,请参见下面的屏幕截图

但是,如果我收缩konsole,动态重写区域的一部分(它以--------------------开头)将不再被删除,因为终端由于未知原因似乎无法到达它

说:

如果光标已位于屏幕边缘,则此操作无效

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

我尝试了其他各种终端逃逸序列,但都没有成功。我想做的就是重写终端上当前显示的内容的缓冲区

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

理想情况下:DOM终端 像编辑DOM树一样编辑终端输出会很酷。这样我就可以像状态小部件一样更新单个元素。然后,我可以为单个元素设置ID,并且只更新这些元素,而不必在之前或之后触摸其他元素——理想情况下不会丢失用户的选择(用鼠标进行)。也许TMUX是我想要的,但在看了之后,我不知道如何让它工作

这将在终端上重新实现X-widget风格的渲染

想法欢迎!;-)

请参阅我的项目[demo2.cpp],网址为:
请参见屏幕截图:


现在你知道人们为什么使用网络课程了!看来我想要的是不可能的,所以我会使用ncurses。无论如何,我认为我想做的是一个非常有趣的用例。太遗憾了,这不能做到。zsh似乎在做我想做的事情。当你这样做:ls-la你会得到一个自动完成列表,它不是全屏绘制的。但是,如果您滚动视图,并且输出发生变化(例如,当按下“左”或“右”键时,它会将视图重置为末尾)。也许每一次终端写入都会发生这种情况,而不仅仅是交互式用户输入。
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