【问题标题】:Terminal app that uses the entire terminal window使用整个终端窗口的终端应用程序
【发布时间】:2017-02-10 17:16:19
【问题描述】:

我见过终端应用程序,例如 vim,在使用时会填满整个屏幕,然后在退出时完全消失,即它们不会简单地打印到当前终端“空间”:

我想知道如何在 C# 中实现这一点。

【问题讨论】:

    标签: c# terminal console


    【解决方案1】:

    程序使用终端的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")
    

    进一步阅读:

    【讨论】:

    • 我如何在 C# 中使用备用屏幕?
    • 什么是转义序列?你没有提到它。
    • 我看到你已经编辑了你的答案以包含转义序列是什么,但我如何实际使用 C# 将它们“打印”到控制台?
    • 当我尝试System.Console.Write("\E7\E[?47h")时得到“错误CS1009:无法识别的转义序列'\E'”
    • 试试System.Console.Write("\0337\033[?47h")
    猜你喜欢
    • 1970-01-01
    • 2018-11-26
    • 2012-10-06
    • 2019-08-11
    • 1970-01-01
    • 2013-05-03
    • 2014-07-20
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多