Console do Windows com manipulação de cores ANSI

25

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

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

    
por mrzasa 16.04.2012 / 16:27

4 respostas

36

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

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

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

    
por 26.06.2012 / 20:21
22

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

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

You can use GetConsoleMode and SetConsoleMode flags to configure this behavior. [...]

The behavior of the following sequences is based on the VT100 and derived terminal emulator technologies, most specifically the xterm terminal emulator. More information about terminal sequences can be found at http://vt100.net and at http://invisible-island.net/xterm/ctlseqs/ctlseqs.html.

    
por 08.03.2016 / 11:25
19

Nenhuma das respostas nesta página menciona um aspecto importante do novo suporte para ANSI Terminal Control que foi adicionado ao host do console Windows 10 na compilação 16257 (e mais tarde). Ou seja, é n̲o̲t̲ e̲n̲a̲b̲l̲e̲d̲ por padrão. A menos que o software específico que você está usando ative o processamento ANSI chamando o SetConsoleMode com o sinalizador ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400) , 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

When writing with WriteFile or WriteConsole, characters are parsed for VT100 and similar control character sequences that control cursor movement, color/font mode, and other operations that can also be performed via the existing Console APIs. For more information, see Console Virtual Terminal Sequences.

Suponho que o motivo pelo qual os exemplos mostrados nesta página funcionem é que, aparentemente, o comando echo (ou talvez a parte de processamento em lote de CMD.EXE ou conhost ) ativa Processamento ANSI chamando a API mencionada anteriormente. Mas muitas outras ferramentas ou executáveis que gravam em stdin ou stdout podem não fazer isso, e 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 de registro em HKEY_CURRENT_USER\Console\VirtualTerminalLevel define o comportamento padrão global para processar seqüências de escape ANSI. Crie uma chave DWORD (se necessário) e defina seu valor como 1 para habilitar globalmente (ou 0 para desabilitar ') 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 ele afeta somente aplicativos de console que não manipulam explicitamente o modo de console chamando SetConsoleMode(...) . Segue-se que, enquanto o valor do registro pode ajudar ativar ANSI para aplicativos console-modo-esquecido , ele não terá efeito em nenhum modo de console-savvy aplicativo que (por algum motivo) pode explicitamente desativar ANSI.

    
por 04.03.2018 / 06:41
10

Is there any console emulator for Windows that interprets ANSI coloring?

Windows antes de 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 coloração de saída por padrão. Você pode instalar o Cmder , ConEmu , ANSICON ou Mintty (usado por padrão no GitBash e no Cygwin) para adicionar suporte de coloração ao seu console de comando do Windows.

Windows 10 - Cores da linha de comando

A partir do Windows 10, o console do Windows suporta ANSI Escape Sequences e algumas cores por padrão.

Documentação da MSDN

Demo

Comandoemlote

O win10colors.cmd foi 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
    
por 27.07.2016 / 17:13