Console do Windows com manipulação de cores ANSI

34

Existe algum emulador de console para Windows que interpreta a coloração ANSI?

Usamos o rspec e uma parte da nossa equipe usa o Windows, e a sequência especial para colorir não é muito útil para eles;).

mrzasa
fonte

Respostas:

40

O ConEmu suporta ANSI X3.64 com extensão de cores Xterm 256. Eu sou o autor deste emulador de console.

As sequências ANSI são tratadas para todos os processos, executando nas guias do ConEmu.

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

ConEmu e ANSI X3.64 / Xterm 256 cores

Maximus
fonte
1
Isso é demais! Como jogador, eu amo o recurso de terremoto. O console parece estar bloqueado na parte superior da tela (mesmo com a opção bloqueada na parte superior desativada). Obrigado
Ced
como você executa o cmd com abas?
187 Mikey
@Mikey What? Leia a resposta primeiro.
Maximus
35

Nenhuma das respostas nesta página menciona um aspecto importante do novo suporte ao ANSI Terminal Control que foi adicionado ao host do console do Windows 10 na compilação 16257 (e posterior). Ou seja, é não habilitado por padrão. A menos que o software específico que você está usando habilite o processamento ANSI chamando a API SetConsoleMode com o ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)sinalizador, você não verá cores ou obterá o processamento ANSI para esse aplicativo.

ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
https://docs.microsoft.com/en-us/windows/console/setconsolemode

Ao escrever com WriteFile ou WriteConsole , os caracteres são analisados ​​para o 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 pelas APIs de console existentes. Para mais informações, consulte Sequências de terminais virtuais do console.

Suponho que a razão pela qual os exemplos mostrados nesta página funcionem é que, aparentemente, o echocomando (ou talvez a parte de processamento em lote de CMD.EXEou conhost) habilite o processamento ANSI chamando a API mencionada acima. Mas muitas outras ferramentas ou executáveis ​​que escrevem stdinou stdoutpodem não fazer isso; nesse caso, você não verá cores para esses processos.

Felizmente, o padrão global pode ser alterado de opt-in para opt-out . A chave do registro em HKEY_CURRENT_USER\Console\VirtualTerminalLeveldefine o comportamento padrão global para o processamento de seqüências de escape ANSI. Crie uma DWORDchave (se necessário) e defina seu valor para 1ativar globalmente (ou 0desativar`) o processamento ANSI por padrão.

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

Observe que essa configuração do registro controla um padrão , o que significa que afeta apenas aplicativos de console que não manipulam explicitamente o modo do console chamando SetConsoleMode(...). Daqui resulta que, embora o valor do registro possa ajudar a habilitar o ANSI para aplicativos inconscientes no modo do console , ele não terá efeito em nenhum aplicativo habilitado para o modo do console que (por algum motivo) possa desabilitar explicitamente o ANSI.

insira a descrição da imagem aqui

Glenn Slayden
fonte
21

A partir do Windows 10 TH2 (v1511), conhost.exe(e, por extensão cmd.exe) , suporta ANSI Escape Sequences, em cores específicas:

imagem da página do MSDN mencionada abaixo

A página do MSDN sobre seqüências de terminais virtuais do console explica quais sequências são suportadas e como habilitá-las:

Você pode usar GetConsoleMode e SetConsoleMode bandeiras para configurar esse comportamento. [...]

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

resolver
fonte
2
As sequências de suporte são descritos na msdn.microsoft.com/en-us/library/windows/desktop/...
dbenham
Você também pode alterar as cores padrão usando o Colortool . As novas instalações do Windows 10 terão cores ligeiramente modificadas que são mais fáceis de ler (especialmente azul no preto), mas as atualizações manterão as cores antigas e difíceis de ler.
10

Existe algum emulador de console para Windows que interpreta a coloração ANSI?

Windows anterior a 10 - sem suporte nativo para cores ANSI no console

Para a versão do Windows abaixo de 10, o console de comando do Windows não suporta a coloração de saída por padrão. Você pode instalar Cmder , ConEmu , ANSICON ou Mintty (usado por padrão no GitBash e Cygwin) para adicionar suporte a cores no console de comando do Windows.

Windows 10 - Cores da linha de comando

A partir do Windows 10, o console do Windows suporta sequências de escape ANSI e algumas cores por padrão.

Documentação MSDN

Demo

insira a descrição da imagem aqui

Comando em lote

O win10colors.cmdfoi escrito por Michele Locati :

@echo off
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.
echo [101;93m NORMAL FOREGROUND COLORS [0m
echo ^<ESC^>[30m [30mBlack[0m (black)
echo ^<ESC^>[31m [31mRed[0m
echo ^<ESC^>[32m [32mGreen[0m
echo ^<ESC^>[33m [33mYellow[0m
echo ^<ESC^>[34m [34mBlue[0m
echo ^<ESC^>[35m [35mMagenta[0m
echo ^<ESC^>[36m [36mCyan[0m
echo ^<ESC^>[37m [37mWhite[0m
echo.
echo [101;93m NORMAL BACKGROUND COLORS [0m
echo ^<ESC^>[40m [40mBlack[0m
echo ^<ESC^>[41m [41mRed[0m
echo ^<ESC^>[42m [42mGreen[0m
echo ^<ESC^>[43m [43mYellow[0m
echo ^<ESC^>[44m [44mBlue[0m
echo ^<ESC^>[45m [45mMagenta[0m
echo ^<ESC^>[46m [46mCyan[0m
echo ^<ESC^>[47m [47mWhite[0m (white)
echo.
echo [101;93m STRONG FOREGROUND COLORS [0m
echo ^<ESC^>[90m [90mWhite[0m
echo ^<ESC^>[91m [91mRed[0m
echo ^<ESC^>[92m [92mGreen[0m
echo ^<ESC^>[93m [93mYellow[0m
echo ^<ESC^>[94m [94mBlue[0m
echo ^<ESC^>[95m [95mMagenta[0m
echo ^<ESC^>[96m [96mCyan[0m
echo ^<ESC^>[97m [97mWhite[0m
echo.
echo [101;93m STRONG BACKGROUND COLORS [0m
echo ^<ESC^>[100m [100mBlack[0m
echo ^<ESC^>[101m [101mRed[0m
echo ^<ESC^>[102m [102mGreen[0m
echo ^<ESC^>[103m [103mYellow[0m
echo ^<ESC^>[104m [104mBlue[0m
echo ^<ESC^>[105m [105mMagenta[0m
echo ^<ESC^>[106m [106mCyan[0m
echo ^<ESC^>[107m [107mWhite[0m
echo.
echo [101;93m COMBINATIONS [0m
echo ^<ESC^>[31m                     [31mred foreground color[0m
echo ^<ESC^>[7m                      [7minverse foreground ^<-^> background[0m
echo ^<ESC^>[7;31m                   [7;31minverse red foreground color[0m
echo ^<ESC^>[7m and nested ^<ESC^>[31m [7mbefore [31mnested[0m
echo ^<ESC^>[31m and nested ^<ESC^>[7m [31mbefore [7mnested[0m
Jens A. Koch
fonte
Na versão 1607 (Compilação 14393.693 do SO), a cor no Windows 10 estava desativada.
geff_chang
2
Por que eu deveria acreditar nisso? Fatos, por favor. a) Não há nada no changelog: support.microsoft.com/en-us/help/4009938 b) Funciona para mim: imgur.com/a/MNPNm
Jens A. Koch
1
Não tenho certeza da versão exata do Win10, mas ela é mencionada aqui: github.com/symfony/symfony/issues/19520 No laptop da minha empresa - Ver 1511 (Compilação 10586.753 do SO) - não precisava. No meu PC doméstico, tive que usar o ansicon, porque as cores não estavam ativadas por padrão.
geff_chang
4
Eles acabaram de introduzir um sinalizador, que controla a saída colorida e é falso por padrão. Veja wpdev.uservoice.com/forums/… ) --- O Symfony está usando PHP.exe no Windows, onde a bandeira estava desativada, então eles tiveram que esperar por um patch, que chegou aqui: github.com/php/php- src / pull / 2103 . Situação resolvida. --- Para cmd.exe, o sinalizador sempre é verdadeiro. É por isso que você tem suporte de cores no console.
Jens A. Koch
1
esses códigos funcionariam em um script de shell no linux também? ou isso é feito de uma maneira diferente?
217 Mikey