加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用ruby(或其他语言)的全屏终端应用程序

发布时间:2020-12-16 22:50:07 所属栏目:百科 来源:网络整理
导读:你有没有使用像 vim或htop这样的cli工具?所有这些都将在终端内最大化并且没有回滚但是当你退出时,它们会消失,你可以看到你之前输入的内容. 例: terminal window with scrollback http://i44.tinypic.com/2pyw3rt.png (带滚动的终端窗口) maximized vim wit
你有没有使用像 vim或htop这样的cli工具?所有这些都将在终端内最大化并且没有回滚但是当你退出时,它们会消失,你可以看到你之前输入的内容.

例:

terminal window with scrollback http://i44.tinypic.com/2pyw3rt.png
(带滚动的终端窗口)

maximized vim without scrollback http://i44.tinypic.com/i2osjk.png
(最大化的vim没有回滚)

back in shell with scrollback and vim gone http://i41.tinypic.com/2hdqs1i.png
(回到shell中,回滚和vim消失了)

如何在我自己的应用程序中执行此操作,最好是ruby?

解决方法

这是大多数终端通过 XTerm control sequence specifications支持的模式.

可以使用这些规格激活的特定屏幕切换模式称为alternate screen buffer.

当您将正确的XTerm控制序列发送到终端时,终端将切换到备用屏幕缓冲区.一旦任何程序退出,它通常会发送命令切换回原始屏幕缓冲区.这样您就可以获得恢复原始终端显示的应用程序的效果.

激活备用缓冲区的顺序是CSI? 47小时CSI代表控制序列启动器,它通常是ESC [.那么通过发送ESC [?到终端47小时(没有空格)它将切换到备用缓冲区.

您可以通过在shell中运行cat命令来测试它,按ESC并键入[?47h并按Enter键.您应该看到屏幕清除(或切换到另一个缓冲区).

切换回正常屏幕缓冲区的顺序是CSI? 47 l,你可以用同样的方式运行cat命令并键入ESC [? 47升并击中进入.

然而,当编写基于复杂终端屏幕的应用程序时,大多数人倾向于使用像curses或ncurses这样的库,它将为您处理所有终端处理的东西.请参阅以下示例:

Learning Ruby Curses
http://www.ruby-doc.org/stdlib-2.0.0/libdoc/curses/rdoc/Curses.html

我怀疑像htop这样的程序也可能使用curses或ncurses.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读