存储屏幕的终端转义序列?

问题描述 投票:0回答:1

我正在终端中工作,并使用转义序列绘制到屏幕上,作为基于字符的用户界面(CHUI)

我好像在其他CHUI程序中看到过会弹出一个窗口,关闭后又会显示底层文本。 我不清楚这是否是程序只是简单地重绘底层字符,或者终端是否正在帮助解决这个问题。

我的实际程序是一个调试器,它在终端顶部显示内容,同时让主程序继续逐行输出到屏幕底部。 我希望能够显示占据大部分显示屏的帮助菜单或屏幕,然后返回到之前的显示 - 完成主程序的输出。

我不能只是重画主程序的输出,因为那超出了我的控制范围。 所以我希望我可以告诉终端保存当前显示,然后绘制我的帮助屏幕,然后让终端恢复显示。

我问过chatGPT,我不断得到错误的答案,表明“esc[s”将保存当前屏幕。 但据我所知,这实际上只保存了光标位置,而不是屏幕。 而且人工智能给出的示例脚本实际上并不像他们建议的那样工作。 我已经在 Mac 上使用 iTerm 尝试过它们,在 Windows 上使用 PuTTY 尝试过它们。

我怀疑旧终端没有额外的内存等待被保存的终端页面填充。 但现代终端肯定必须具备这种能力。 但尽管我进行了搜索,但我似乎找不到它的文档。

tl;dr -- 什么转义序列将存储整个屏幕显示,以及什么序列稍后将恢复它?

terminal ansi-escape
1个回答
0
投票

嗯,自从我发布这个问题以来,我还没有得到任何答案。 但我自己想出了一些办法。

  • 没有办法保存屏幕并稍后恢复它。
  • 当程序似乎在这样做时(例如 vim、htop 等),它们实际上正在做的是切换到替代缓冲区。 完成后,它们返回到主缓冲区。 这样做会恢复屏幕之前的内容。

我在这里找到了对此的讨论。

语法为 ESC[?1049h 和 ESC[?1049l - 这里 'h' 激活备用缓冲区,'l' 返回正常模式。 其他类似的代码有 1047 和 1048。但显然它们更旧并且功能更少。

这段代码以 ESC[ 开头?显然表明这是一种私人设置模式,并且功能可能因不同终端而异。

© www.soinside.com 2019 - 2024. All rights reserved.