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/setconsolemodeAo 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 echo
comando (ou talvez oprocessamento em loteparte de CMD.EXE
ou conhost
) ativa o processamento ANSI chamando a API que acabamos de mencionar. Mas muitas outras ferramentas ou executáveis que gravam stdin
ou stdout
podem 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\VirtualTerminalLevel
define o comportamento padrão global para processar sequências de escape ANSI. Crie uma DWORD
chave (se necessário) e defina seu valor para 1
habilitar globalmente (ou 0
desabilitar) 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.
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.
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:
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