xterm / vt102序列填充terminal窗口,然后退出按键,清除屏幕上的任何东西?

我试图围绕VT102序列,以及像ncurses这样的库如何工作。

举一个例子,当我打开Emacs时,它填充terminal窗口。 当我点击Cx Cc时 ,程序退出,我的terminal窗口看起来和我在启动emacs之前所看到的完全一样(即光标上方的行显示我zsh历史logging中的emacs命令,而不是emacs所呈现的任何东西)。

作为一种“hello world”,我写了一个打开/dev/tty的小ruby脚本,然后将\x1B[48;597m\n (空白行,背景颜色)写成尽可能多的行在我的terminal。 该程序然后睡5秒,让我快乐地盯着一个明亮的橙色屏幕瞬间。 然后退出,在我的zsh提示符下面留下53条明亮的橙色线。

两个问题:

  1. 使用背景颜色写入空行是用颜色填充terminal窗口的正确方法吗?
  2. 如何通过发送一些VT102序列到/ dev / tty来完全清除屏幕?

我可以发送\x1B[2J ,但是这和我执行clear命令时是一样的,实际上只是把所有的内容都移到了terminal窗口上,直到我的光标位于空白窗口的最顶端,如果我的程序没有在屏幕上写入空行的负载,那么将光标放在任何地方都是可以的。

PS:不知道在这里使用什么标签,任何人实际上可能订阅。

使用背景颜色写入空行是用颜色填充终端窗口的正确方法吗?

否。正确的方法是在背景颜色上设置背景颜色,然后使用ED序列(例如, ^[ [ 2 J ))擦除屏幕。

*:大多数现代终端做

如何通过发送一些VT102序列到/ dev / tty来完全清除屏幕?

使用ED。 往上看。

如果你真正想要做的是切换到备用屏幕(如emacs在你的例子中),备用屏幕是由私人模式1049控制。你可以切换到它使用^[ [ ? 1 0 4 9 h ^[ [ ? 1 0 4 9 h ,然后使用^[ [ ? 1 0 4 9 l ^[ [ ? 1 0 4 9 l 。 但是请注意,这是一个xterm扩展; 它不是完全标准的,并且不被任何DEC硬件终端(例如,VT102)支持。