【问题标题】:Terminal animation - is clearing screen right approach?终端动画 - 清除屏幕是正确的方法吗?
【发布时间】:2014-05-26 07:00:10
【问题描述】:

我在 Mac OS X 终端中显示了一个 ASCII 游戏板,它需要经常更新。有没有一种方便的方法可以擦除或覆盖终端中以前打印的内容?还是每次都需要清屏重印板子? (寻找使用 Java 或 Scala 的解决方案)

【问题讨论】:

  • Java 没有像样的“清屏”功能。我会选择一个非终端用户界面,您可以在其中完全控制
  • 比起创建 GUI,我更喜欢使用终端。有没有一种方便的方法可以让我的应用程序在自己的视图中打开,比如 Vim 或 Emacs,这样当用户退出程序时,他会返回到原始命令行?如果我能做到这一点,那么重复屏幕清除就可以了。
  • 这个问题回答了如何在 Java 中完全控制文本终端:stackoverflow.com/questions/1321308/…。

标签: java macos scala terminal


【解决方案1】:

OS X 终端程序模拟颜色 xterm(环境变量 TERM 显示默认值 xterm-color),它本身被定义为模拟 DEC VT102/220,它基本上使用/定义 ANSI escape codes。

如果您只想清除整个显示,则需要输出对应于CUP(光标更新)和ED(擦除显示)的转义序列。在 VT102 上,您特别想使用:

<ESC>[H<ESC>[J

其中&lt;ESC&gt; 是转义字符(ASCII 27)。

要使用备用屏幕缓冲区(正如您在vim 或emacs 中指出的那样),您需要在启动时发送用于启动备用屏幕缓冲区的代码: p>

<ESC>[?1049h

然后在完成后切换回正常的屏幕缓冲区:

<ESC>[?1049l

使用备用屏幕缓冲区时,您不会向后滚动,也不会影响向后滚动或正常屏幕内容。恢复正常屏幕缓冲区后,您将返回到原始终端上下文,包括所有现有屏幕内容并向后滚动。

【讨论】:

    猜你喜欢
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2011-01-29
    • 1970-01-01
    • 2013-07-11
    • 2019-10-29
    • 2016-01-31
    相关资源
    最近更新 更多