你曾经使用过 cli 工具,比如vim
orhtop
吗?所有这些都将在终端内最大化并且没有回滚,但是当您退出时,它们会消失,您可以看到您之前输入的内容。
例子:
(没有回滚的最大化 vim)
(回到 shell 中,回滚和 vim 不见了)
我怎样才能在我自己的应用程序中做到这一点,最好是红宝石?
你曾经使用过 cli 工具,比如vim
orhtop
吗?所有这些都将在终端内最大化并且没有回滚,但是当您退出时,它们会消失,您可以看到您之前输入的内容。
例子:
(没有回滚的最大化 vim)
(回到 shell 中,回滚和 vim 不见了)
我怎样才能在我自己的应用程序中做到这一点,最好是红宝石?
这是大多数终端通过XTerm 控制序列规范支持的模式。
可以使用这些规范激活的特定屏幕切换模式称为备用屏幕缓冲区。
当您向终端发送正确的 XTerm 控制序列时,终端将切换到备用屏幕缓冲区。一旦任何程序退出,它通常会发送命令切换回原始屏幕缓冲区。这样您就可以获得应用程序恢复原始终端显示的效果。
激活备用缓冲区的顺序是CSI ? 47 h
。CSI 代表 Control Sequence Initiator,通常是ESC + [
. 因此,通过向ESC [ ? 47 h
终端发送(不带空格),它将切换到备用缓冲区。
您可以通过cat
在 shell 中运行命令、按 ESC 并键入 [?47h 并按 Enter 来测试它。您应该看到屏幕清晰(或切换到另一个缓冲区)。
切换回正常屏幕缓冲区的顺序是CSI ? 47 l
,您可以以与运行cat
命令并键入键ESC [ ? 47 l
并按 Enter 键相同的方式进行测试。
然而,在编写基于终端屏幕的复杂应用程序时,大多数人倾向于使用像curses或ncurses这样的库,它会为您处理所有终端处理的东西。例如,请参阅这些:
学习 Ruby 诅咒
http://www.ruby-doc.org/stdlib-2.0.0/libdoc/curses/rdoc/Curses.html
我怀疑像 htop 这样的程序也可能使用 curses 或 ncurses。