gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 06:57:54 26 4
gpt4 key购买 nike

您是否使用过 vimhtop 等命令行工具?所有这些都会在终端内最大化并且没有回滚,但是当你退出时,它们会消失,你可以看到你之前输入的内容。

例子:

terminal window with scrollback(带回滚功能的终端窗口)

maximized vim without scrollback

(没有回滚的最大化 vim)

back in shell with scrollback and vim gone

(返回 shell,回滚和 vim 消失)

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

最佳答案

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

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

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

激活备用缓冲区的顺序是 CSI ? 47 小时。 CSI 是 Control Sequence Initiator 的缩写,通常是 ESC + [。所以通过发送 ESC [ ? 47 h(无空格)到终端,它将切换到备用缓冲区。

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

切换回正常屏幕缓冲区的顺序是 CSI ? 47 l,您可以通过运行 cat 命令并键入键 ESC [ ? 47 l 并按回车键。

然而,在编写复杂的基于终端屏幕的应用程序时,大多数人倾向于使用像 cursesncurses 这样的库,它们会处理所有终端处理的事情你。例如,查看这些:

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

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

关于ruby - 使用 ruby​​(或其他语言)的全屏终端应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18811129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com