Como imitar o terminal ANSI em C#?

Tenho uma aplicação em Mono que cria uma janela de massa, liga-se ao PTY e comunica com o mundo através dele.

graças ao Putty tenho um terminal completo, posso enviar códigos especiais (como Ctrl+C, Ctrl+Z) para a minha aplicação.

Eu gostaria de voltar ao meu terminal, no qual começo a aplicação. Eu gostaria de pegar o maior número possível de combinações de chaves. Assim, poderia usar o meu aplicativo via ssh, sem janelas aparecendo.

A minha ideia é recuperar o meu terminal actual de /dev/, ignorar (ou manipular) todos os sinais possíveis, pesquisar nas teclas pressionadas e encaminhar para a minha aplicação. Isto pode ser feito em C com P / Invoce.

Isto é possível, mas doloroso e demorado para codificar.

Será que já está feito? Conhece alguma biblioteca? A melhor opção seria registrar-se para um callback ou dois, mas qualquer solução que o tornasse mais fácil seria ótimo.

TL; DR

Preciso de uma biblioteca que me dê interface do tipo:

event Action<byte> CharReceived;
void WriteChar(byte val);
E permitiu-me receber códigos terminais ANSI como sequência de bytes.

a alternativa seria uma biblioteca para traduzir ConsoleKeyInfo para byte[], de acordo com as regras do terminal ANSI.

Author: Piotr Zierhoffer, 2013-01-11

2 answers

Achei o seguinte link do projecto muito útil. Você pode baixar o projeto, em seguida, olhar para o primeiro comentário no site do codeproject para ver como estendê-lo para o Suporte SerialPort (que é o que eu precisava).

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

O projeto é realmente um invólucro fino em torno do projeto Poderosa, mas a menos que você fale Japonês, este invólucro fino é útil. O projecto Poderosa apoia Relatórios seriais já, mas não foi trazido à superfície por "Columbus-MCSD".
 1
Author: Mark Lakata, 2013-01-25 22:45:50
Na verdade, observando a falta de bom suporte para este tipo de cenário (e tendo mudado um pouco as nossas exigências), desenvolvemos o nosso próprio emulador de terminal, Termsharp:

Https://github.com/antmicro/termsharp

É baseado em janelas (rodando em XWT), mas pode ser usado como uma biblioteca, decodificando sequências VT100.

Apesar de responder à minha própria pergunta com um produto da empresa para a qual trabalho, foi criado muito tempo depois do post original, por isso, espero que seja aceitável.
 0
Author: Piotr Zierhoffer, 2017-03-10 08:56:20