xterm / vt102序列填充终端窗口,然后退出按键,清除屏幕上的内容?

时间:2012-05-08 13:25:17

标签: linux terminal xterm vt100

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

举一个例子,当我打开Emacs时,它会填充终端窗口。当我点击 Cx Cc 时,程序退出,我的终端窗口看起来与我启动emacs之前看起来完全一致(即光标上方的行显示emacs我的zsh历史记录中的命令,而不是emacs提供的任何命令。)

作为一种“hello world”,我写了一个小的ruby脚本打开/dev/tty,然后写\x1B[48;597m\n(空白行,带有背景颜色),因为那里有很多行在我的航站楼。程序然后睡了5秒钟,让我快乐地盯着明亮的橙色屏幕。然后它退出,让我在我的zsh提示下,在它上方有53行亮橙色。

两个问题:

  1. 用正确的方法写一个带背景颜色的空白行以用颜色填充终端窗口吗?
  2. 如何通过向/ dev / tty发送一些VT102序列来完全清除屏幕?
  3. 我能够发送\x1B[2J,但这与我执行clear命令的方式相同,实际只是将所有内容移到终端窗口,直到我的光标位于在一个空白窗口的顶部,而不是将光标留在任何地方,如果我的程序没有在屏幕上写入大量空白行的话。

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

1 个答案:

答案 0 :(得分:3)

  

使用背景颜色写空白线是否正确用颜色填充终端窗口?

没有。正确的方法(在支持BCE *的终端上)是设置背景颜色,然后使用ED序列擦除屏幕(例如,^[ [ 2 J)。

*:大多数现代终端

  

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

使用ED。见上文。

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