如何保存/恢复终端输出

boh*_*boh 6 terminal

一些程序如 vim/nano/nload 可以使用整个终端来显示其内容,并且在退出时恢复之前的终端输出。他们如何实施这个恢复过程?

Jde*_*eBP 6

他们如何实施这个恢复过程?

他们没有。实施不是他们的。

这就是所谓的交替屏幕缓冲区被切入和切出。它是在终端(或终端模拟器程序)本身中实现的。终端响应由此类 TUI 程序发出的控制序列。该TUI程序控制发生这种情况,但执行什么情况是完全在终端内。事实上,TUI 程序甚至没有相同的正在发生的事情模型。对他们来说,他们正在切换“光标寻址模式”。

并非所有终端和终端仿真程序甚至都有备用屏幕缓冲区。例如:内置于 Linux 和 BSD 内核中的终端仿真程序提供其内核虚拟终端通常不具备此功能。

在这样的终端上,没有控制序列。因此,终端类型的 termcap/terminfo 数据库记录将没有这样的控制序列;切换“光标寻址模式”会覆盖当前屏幕内容,无需保存和恢复。

vim、nano 和诸如此类的东西对此一无所知。他们没有做任何不同的事情。它们不是执行功能的东西。它们只是发出 termcap/terminfo 告诉它们将进入和退出“光标寻址模式”的控制序列。对于某些具有该机制的终端,“光标寻址模式”也意味着使用备用屏幕缓冲区。对于一些没有,它没有。

进一步阅读