我有一个我在Mac OS X终端上显示的ASCII游戏板,需要经常更新。是否有方便的方法来擦除或覆盖终端中先前打印的内容?或者我是否需要每次都清除屏幕并重新打印电路板? (寻找使用Java或Scala的解决方案)
答案 0 :(得分:1)
OS X终端程序模拟颜色xterm(环境变量TERM
显示默认值xterm-color
),其本身被定义为模拟基本上使用/定义的DEC VT102/220 ANSI escape codes。
如果您只想清除整个显示,则需要输出与CUP
(光标更新)后跟ED
(删除显示)对应的转义序列。在VT102上,您特别想使用:
<ESC>[H<ESC>[J
其中<ESC>
是转义字符(ASCII 27)。
要使用备用屏幕缓冲区(如vim
或emacs
中所示),您需要发送用于启动备用屏幕缓冲区的代码开始:
<ESC>[?1049h
然后在完成后更改回正常的屏幕缓冲区:
<ESC>[?1049l
使用备用屏幕缓冲区时,您将无法回滚,并且不会影响回滚或正常屏幕内容。恢复正常屏幕缓冲区后,您将返回原始终端上下文,包括所有现有屏幕内容并向后滚动。