x3r*_*3ro 7 ruby vim terminal command-line-interface
你是否曾经使用类似CLI工具vim
或htop
?所有这些都将在终端内最大化并且没有回滚但是当你退出时,它们会消失,你可以看到你之前输入的内容.
例:
回滚终端窗口http://i44.tinypic.com/2pyw3rt.png (带滚动的终端窗口)
最大化的vim没有回滚http://i44.tinypic.com/i2osjk.png (最大化的vim没有回滚)
回到shell中,回滚和vim消失了http://i41.tinypic.com/2hdqs1i.png (回到shell中,回滚和vim消失了)
如何在我自己的应用程序中执行此操作,最好是ruby?
Cas*_*per 12
这是大多数终端通过XTerm控制序列规范支持的模式.
可以使用这些规范激活的特定屏幕切换模式称为备用屏幕缓冲区.
当您将正确的XTerm控制序列发送到终端时,终端将切换到备用屏幕缓冲区.一旦任何程序退出,它通常会发送命令切换回原始屏幕缓冲区.这样您就可以获得恢复原始终端显示的应用程序的效果.
激活备用缓冲区的顺序是CSI ? 47 h
.CSI代表控制序列启动器,它通常是ESC + [
.因此,通过向ESC [ ? 47 h
终端发送(没有空格),它将切换到备用缓冲区.
您可以通过cat
在shell中运行命令来测试它,按ESC并键入[?47h并按Enter键.您应该看到屏幕清除(或切换到另一个缓冲区).
切换回普通屏幕缓冲区的顺序是CSI ? 47 l
,您可以像运行cat
命令和键入键ESC [ ? 47 l
并按Enter 一样测试它.
然而,当编写基于复杂终端屏幕的应用程序时,大多数人倾向于使用像curses或ncurses这样的库,它将为您处理所有终端处理的东西.请参阅以下示例:
学习Ruby Curses
http://www.ruby-doc.org/stdlib-2.0.0/libdoc/curses/rdoc/Curses.html
我怀疑像htop这样的程序也可能使用curses或ncurses.
归档时间: |
|
查看次数: |
953 次 |
最近记录: |