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.
1
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