2

我试图围绕 VT102 序列以及诸如 ncurses 之类的库如何工作。

举个例子,当我打开 Emacs 时,它会填满终端窗口。当我点击C-x C-c时,程序退出并且我的终端窗口看起来与我启动 emacs 之前完全一样(即光标上方的行显示了emacs我的 zsh 历史记录中的命令,而不是任何 emacs 呈现的命令)。

作为一种“hello world”,我编写了一个打开的小红宝石脚本/dev/tty,然后为终端中的行数写入\x1B[48;597m\n(空白行,带有背景色)。然后程序休眠 5 秒钟,让我高兴地盯着一个明亮的橙色屏幕片刻。然后它退出,在我的 zsh 提示符下留下我,上面有 53 行亮橙色。

两个问题:

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

我可以发送\x1B[2J,但这与执行命令时的作用相同clear,实际上只是将所有内容移到终端窗口上,直到我的光标位于空白窗口的最顶部,而不是将光标留在任何地方如果我的程序没有在屏幕上写入大量空白行,那自然会是这样。

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

4

1 回答 1

3

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

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

*:大多数现代终端都可以

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

使用 ED。看上面。

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

于 2012-05-08T18:00:46.497 回答