【发布时间】:2017-02-10 17:16:19
【问题描述】:
我见过终端应用程序,例如 vim,在使用时会填满整个屏幕,然后在退出时完全消失,即它们不会简单地打印到当前终端“空间”:
我想知道如何在 C# 中实现这一点。
【问题讨论】:
我见过终端应用程序,例如 vim,在使用时会填满整个屏幕,然后在退出时完全消失,即它们不会简单地打印到当前终端“空间”:
我想知道如何在 C# 中实现这一点。
【问题讨论】:
程序使用终端的alternate screen功能(最初是xterm,但其他的)。
vim 正在使用终端描述,其中包括用于开始和结束使用光标寻址的转义序列。主要(对于 xterm 和模仿者)切换到/从备用屏幕,保存/恢复正常屏幕中的光标位置。并非所有终端描述都使用该功能。
xterm 常见问题解答Why doesn't the screen clear when running vi? 中提供了该功能的历史。最初是(以 terminfo 格式)
smcup=\E7\E[?47h, rmcup=\E[2J\E[?47l\E8,
(其中\E 是ASCII 转义字符\033),modern version 是
smcup=\E7\E[?1049h, rmcup=\E[?1049l
参考MSDN,这可能适用于\E7\E[?47h:
System.Console.Write("\u001b7\u001b[?47h")
\E 变为 \u001b。同样,对于 \E[2J\E[?47l\E8,你可以写成
System.Console.Write("\u001b[2J\u001b[?47l\u001b8")
进一步阅读:
【讨论】:
System.Console.Write("\E7\E[?47h")时得到“错误CS1009:无法识别的转义序列'\E'”
System.Console.Write("\0337\033[?47h")