Consola de Windows con manejo de colores ANSI

34

¿Hay algún emulador de consola para Windows que interprete el color ANSI?

Usamos rspec y una parte de nuestro equipo usa Windows y la cadena especial para colorear no es muy útil para ellos;).

mrzasa
fuente

Respuestas:

40

ConEmu admite ANSI X3.64 con extensión de color Xterm 256. Soy el autor de este emulador de consola.

Las secuencias Ansi se manejan para todos los procesos, ejecutándose en pestañas ConEmu.

AFAIK, ConEmu admite más códigos que Ansicon.

ConEmu y ANSI X3.64 / Xterm 256 colores

Maximus
fuente
1
Esto es genial! Como jugador, me encanta la función de terremoto. Sin embargo, la consola parece estar bloqueada en la parte superior de la pantalla (incluso con la opción bloqueada en la parte superior deshabilitada). Gracias
Ced
¿Cómo ejecutas cmd con pestañas?
Mikey
@ Mikey ¿Qué? Lee la respuesta primero.
Maximus
35

Ninguna de las respuestas en esta página menciona un aspecto importante del nuevo soporte para ANSI Terminal Control que se agregó al host de la consola de Windows 10 en la compilación 16257 (y posterior). A saber, es n̲o̲t̲ e̲n̲a̲b̲l̲e̲d̲ por defecto. A menos que el software específico que está utilizando habilite el procesamiento ANSI llamando a la API SetConsoleMode con el ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0400)indicador, no verá colores ni obtendrá el procesamiento ANSI para esa aplicación.

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

Al escribir con WriteFile o WriteConsole , los caracteres se analizan para VT100 y secuencias de caracteres de control similares que controlan el movimiento del cursor, el modo de color / fuente y otras operaciones que también se pueden realizar a través de las API de consola existentes. Para obtener más información, consulte Secuencias de terminal virtual de consola.

Supongo que la razón por la que los ejemplos que se muestran en esta página funcionan es que, aparentemente, el echocomando (o quizás la parte de procesamiento por lotes de CMD.EXEo conhost) habilita el procesamiento ANSI llamando a la API que acabamos de mencionar. Pero muchas otras herramientas o ejecutables que escriben stdino stdoutno pueden hacer esto, en cuyo caso no verá color para esos procesos.

Afortunadamente, el valor predeterminado global se puede cambiar de habilitar a inhabilitar . La clave de registro en HKEY_CURRENT_USER\Console\VirtualTerminalLevelestablece el comportamiento predeterminado global para procesar secuencias de escape ANSI. Cree una DWORDclave (si es necesario) y establezca su valor en 1habilitar globalmente (o 0inhabilitar) el procesamiento ANSI de forma predeterminada.

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

Tenga en cuenta que esta configuración de registro controla un valor predeterminado , lo que significa que solo afecta a las aplicaciones de consola que no manipulan explícitamente el modo de consola llamando SetConsoleMode(...). De ello se deduce que, si bien el valor del registro puede ayudar a habilitar ANSI para aplicaciones ajenas al modo de consola , no tendrá ningún efecto en ninguna aplicación inteligente con modo de consola que (por alguna razón) puede deshabilitar explícitamente ANSI.

ingrese la descripción de la imagen aquí

Glenn Slayden
fuente
21

A partir de Windows 10 TH2 (v1511), conhost.exe(y, por extensión cmd.exe) , admite secuencias de escape ANSI, en colores particulares:

imagen de la página de MSDN mencionada a continuación

La página de MSDN sobre Secuencias de terminal virtual de consola explica qué secuencias son compatibles y cómo habilitarlas:

Puede usar los indicadores GetConsoleMode y SetConsoleMode para configurar este comportamiento. [...]

El comportamiento de las siguientes secuencias se basa en el VT100 y las tecnologías de emulador de terminal derivadas, más específicamente el emulador de terminal xterm. Se puede encontrar más información sobre las secuencias terminales en http://vt100.net y en http://invisible-island.net/xterm/ctlseqs/ctlseqs.html .

rolve
fuente
2
Las secuencias compatibles se describen en msdn.microsoft.com/en-us/library/windows/desktop/…
dbenham
También puede cambiar los colores predeterminados con Colortool . Las nuevas instalaciones de Windows 10 obtendrán colores ligeramente modificados que son más fáciles de leer (especialmente azul sobre negro), pero las actualizaciones mantendrán los colores antiguos y difíciles de leer.
10

¿Hay algún emulador de consola para Windows que interprete el color ANSI?

Windows antes de 10: no hay soporte nativo para colores ANSI en la consola

Para la versión de Windows inferior a 10, la consola de comandos de Windows no admite el color de salida de forma predeterminada. Puede instalar Cmder , ConEmu , ANSICON o Mintty (usado por defecto en GitBash y Cygwin) para agregar soporte de color a su consola de comandos de Windows.

Windows 10 - Colores de línea de comando

A partir de Windows 10, la consola de Windows admite secuencias de escape ANSI y algunos colores de forma predeterminada.

Documentación de MSDN

Manifestación

ingrese la descripción de la imagen aquí

Comando por lotes

El win10colors.cmdfue 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
fuente
A partir de la versión 1607 (compilación del SO 14393.693), el color en Windows 10 se ha deshabilitado.
geff_chang
2
¿Por qué debería creer eso? Hechos por favor. a) No hay nada en el registro de cambios: support.microsoft.com/en-us/help/4009938 b) Funciona para mí: imgur.com/a/MNPNm
Jens A. Koch
1
No estoy seguro de qué versión exacta de Win10, pero se menciona aquí: github.com/symfony/symfony/issues/19520 En la computadora portátil de mi empresa - Ver 1511 (OS Build 10586.753) - No lo necesitaba. En la PC de mi casa, tuve que usar ansicon, porque los colores no estaban activados por defecto.
geff_chang
44
Acaban de introducir una bandera, que controla la salida de color y es falsa de forma predeterminada. Consulte wpdev.uservoice.com/forums/… ) --- Symfony está utilizando PHP.exe en Windows, donde la bandera estaba apagada, por lo que tuvieron que esperar un parche, que aterrizó aquí: github.com/php/php- src / pull / 2103 . Situación resuelta. --- Para cmd.exe la bandera es verdadera siempre. Es por eso que tiene soporte de color en la consola.
Jens A. Koch
1
¿funcionarían también estos códigos en un script de shell en Linux? ¿o se hace de otra manera?
Mikey