【问题标题】:How to emulate ANSI terminal in C#?如何在 C# 中模拟 ANSI 终端?
【发布时间】:2013-01-11 16:40:13
【问题描述】:

我在 Mono 中有一个应用程序,它创建一个 putty 窗口,连接到它的 PTY 并通过它与世界通信。

感谢 Putty,我有一个完整的终端,我可以将特殊代码(如 Ctrl+C、Ctrl+Z)发送到我的应用程序。

我想回到我的终端,在其中启动应用程序。我想抓住尽可能多的组合键。这样我就可以通过 ssh 使用我的应用程序,而不会弹出任何窗口。

我的想法是从 /dev/ 检索我当前的终端,忽略(或处理)所有可能的信号,轮询按下的键并转发到我的应用程序。这可以在 C 中使用 P/Invoke 完成。

这是可能的,但编写代码很痛苦且耗时。

我想知道它是否已经完成了?你知道任何图书馆吗?最好的选择是注册一两个回调,但任何使它更容易的解决方案都会很棒。

TL;DR

我需要一个库来提供我的界面,例如:

event Action<byte> CharReceived;
void WriteChar(byte val);

并允许我以字节序列的形式接收 ANSI 终端代码。

替代方案是根据 ANSI 终端规则将 ConsoleKeyInfo 转换为 byte[] 的库。

【问题讨论】:

    标签: c# mono terminal pty


    【解决方案1】:

    我发现以下项目链接非常有帮助。您可以下载该项目,然后查看 codeproject 网站上的第一条评论,了解如何将其扩展到 SerialPort 支持(这是我需要的)。

    http://www.codeproject.com/Articles/20781/Terminal-Control-Library-C-VT100-ANSI-XTERM-SSH-Te

    该项目实际上是 Poderosa 项目的精简包装,但除非您会说日语,否则这个精简包装很有用。 Poderosa 项目已经支持 SerialPorts,但它并没有被“Columbus-MCSD”带到表面。

    【讨论】:

      【解决方案2】:

      实际上,观察到这种场景缺乏良好的支持(并且稍微改变了我们的要求),我们开发了自己的终端模拟器,Termsharp:

      https://github.com/antmicro/termsharp

      它是基于窗口的(在 XWT 上运行),但可以用作库,解码 VT100 序列。

      虽然我用我工作的公司的产品来回答我自己的问题,但它是在原始帖子之后很长时间创建的,所以我希望它是可以接受的。

      【讨论】:

        猜你喜欢
        • 2020-05-08
        • 2016-11-23
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 2021-03-03
        相关资源
        最近更新 更多