Console do Windows com manipulação de cores ANSI

Console do Windows com manipulação de cores ANSI

Existe algum emulador de console para Windows que interprete cores ANSI?

Usamos rspec e parte de nossa equipe usa Windows e a string especial para colorir não é muito útil para eles;).

Responder1

Nenhuma das respostas nesta página menciona um aspecto importante do novo suporte paraControle de terminal ANSIque foi adicionado aoJanelas 10host do console na compilação 16257 (e posterior). Ou seja, énão habilitadopor padrão. A menos que o software específico que você está usandohabilitaProcessamento ANSI chamando oSetConsoleModeAPI com o ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0004)sinalizador, você não verá cores nem obterá processamento ANSI para esse aplicativo.

ENABLE_VIRTUAL_TERMINAL_PROCESSING0x0004
https://docs.microsoft.com/windows/console/setconsolemode

Ao escrever comGravar arquivoouWriteConsole, os caracteres são analisados ​​para VT100 e sequências de caracteres de controle semelhantes que controlam o movimento do cursor, o modo de cor/fonte e outras operações que também podem ser executadas por meio das APIs do console existentes. Para obter mais informações, consulte Sequências de terminal virtual do console.

Suponho que a razão pela qual os exemplos mostrados nesta página funcionam é que, aparentemente, o echocomando (ou talvez oprocessamento em loteparte de CMD.EXEou conhost) ativa o processamento ANSI chamando a API que acabamos de mencionar. Mas muitas outras ferramentas ou executáveis ​​que gravam stdinou stdoutpodem não fazer isso; nesse caso, você não verá cores para esses processos.

Felizmente, o padrão global pode ser alterado deaceitarparaexcluir. A chave de registro at HKEY_CURRENT_USER\Console\VirtualTerminalLeveldefine o comportamento padrão global para processar sequências de escape ANSI. Crie uma DWORDchave (se necessário) e defina seu valor para 1habilitar globalmente (ou 0desabilitar) o processamento ANSI por padrão.

[HKEY_CURRENT_USER\Console]
"VirtualTerminalLevel"=dword:00000001

Observe que esta configuração do registro controla umpadrão, o que significa que afeta apenas aplicativos de console que não manipulam explicitamente o modo de console chamando SetConsoleMode(...). Segue-se que, embora o valor do registro possa ajudarhabilitarANSI paraconsole-mode-alheioaplicativos, isso não terá efeito em nenhumconhecedor do modo consoleaplicativo que (por algum motivo) pode explicitamentedesabilitarANSI.

insira a descrição da imagem aqui

Responder2

ConEmusuporta ANSI X3.64 com extensão de cores Xterm 256. Sou o autor deste emulador de console.

As sequências Ansi são tratadas para todos os processos, executados nas guias ConEmu.

AFAIK, ConEmu suporta mais códigos do que Ansicon.

Cores ConEmu e ANSI X3.64 / Xterm 256

Responder3

A partir do Windows 10 TH2 (v1511), conhost.exe(e, por extensão, cmd.exe) oferece suporte a sequências de escape ANSI, em cores específicas:

imagem da página MSDN mencionada abaixo

OPágina do MSDN sobre sequências de terminais virtuais do consoleexplica quais sequências são suportadas e como ativá-las:

Você pode usarGetConsoleModeeSetConsoleModesinalizadores para configurar esse comportamento. [...]

O comportamento das sequências a seguir é baseado no VT100 e nas tecnologias de emulador de terminal derivado, mais especificamente no emulador de terminal xterm. Mais informações sobre sequências terminais podem ser encontradas emhttp://vt100.nete emhttp://invisible-island.net/xterm/ctlseqs/ctlseqs.html.

Responder4

Atualmente, as cores do console CMD não estão habilitadas por padrão no Win10, portanto, para habilitá-lo, adicione isto ao seu código:

#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    DWORD dwMode = 0;
    GetConsoleMode(hOut, &dwMode);
    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    SetConsoleMode(hOut, dwMode);

    // References:
    //SetConsoleMode() and ENABLE_VIRTUAL_TERMINAL_PROCESSING?
    //https://stackoverflow.com/questions/38772468/setconsolemode-and-enable-virtual-terminal-processing

    // Windows console with ANSI colors handling
    // https://superuser.com/questions/413073/windows-console-with-ansi-colors-handling
#endif

informação relacionada