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

Linux xterm/vt102序列填充终端窗口,然后按键退出,清除屏幕上的任何内容?,linux,terminal,xterm,vt100,Linux,Terminal,Xterm,Vt100,我正试图了解VT102序列以及像ncurses这样的库是如何工作的 举个例子,当我打开Emacs时,它将填充终端窗口。当我点击C-x C-C时,程序退出,我的终端窗口看起来与我启动emacs之前完全一样(即,光标上方的行显示了我的zsh历史记录中的emacs命令,而不是emacs所呈现的任何内容) 作为一种“hello world”,我编写了一个小ruby脚本,打开/dev/tty,然后编写\x1B[48;597m\n(空行,带背景色)我的终端有多少行。然后程序休眠5秒钟,让我高兴地盯着一个亮橙

我正试图了解VT102序列以及像ncurses这样的库是如何工作的

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

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

两个问题:

  • 用背景色写空行是用颜色填充终端窗口的正确方法吗
  • 如何通过向/dev/tty发送一些VT102序列来完全清除屏幕
  • 我可以发送
    \x1B[2J
    ,但这与我执行
    清除
    命令时的操作相同,实际操作只是将所有内容向上移动到终端窗口,直到我的光标位于空白窗口的顶部,而不是在程序没有向屏幕写入大量空行的情况下将光标放在任何位置

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

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

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

    *:大多数现代终端都有

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

    使用ED。参见上文


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

    真棒,新关键字,谢谢:)
    [?1049h
    [?1049l
    除了退出后光标正好位于屏幕顶部之外,几乎要做正确的事情。我将阅读您提到的这些扩展。模式?1049应该在您设置/重置光标时保存和恢复光标--确保您没有意外地做任何在之前/之后将光标定位的事情。请参阅查看更多控制序列的列表,以及原始的DEC文档。原来我只是半睡半醒,输入了一个“1”而不是一个“l”;)非常感谢,我现在实际上已经开始了,并且知道我在寻找什么!