Consola Windows con manejo de colores ANSI

Consola Windows con manejo de colores ANSI

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

Nosotros usamos rspec y una parte de nuestro equipo usa Windows y la cadena especial para colorear no les resulta muy útil ;).

Respuesta1

Ninguna de las respuestas en esta página menciona un aspecto importante del nuevo soporte paraControl de terminales ANSIque se añadió a laventanas 10host de consola en la compilación 16257 (y posteriores). Es decir, esno disponiblepor defecto. A menos que el software específico que estás usandopermiteProcesamiento ANSI llamando alEstablecer modo de consolaAPI con la ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0004)bandera, no verá colores ni obtendrá procesamiento ANSI para esa aplicación.

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

Al escribir conEscribir archivooConsola de escritura, 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 funcionan los ejemplos mostrados en esta página es que, aparentemente el echocomando (o quizás elprocesamiento por lotesparte 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á el color de esos procesos.

Afortunadamente, el valor predeterminado global se puede cambiar desdeoptar enaoptar por no. 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 para 1habilitar (o 0deshabilitar) globalmente el procesamiento ANSI de forma predeterminada.

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

Tenga en cuenta que esta configuración del registro controla unapor defecto, lo que significa que solo afecta a las aplicaciones de consola que no manipulan explícitamente el modo de consola llamando a SetConsoleMode(...). De ello se deduce que, si bien el valor del registro puede ayudarpermitirANSI paramodo consola-ajenoaplicaciones, no tendrá ningún efecto en ningunaexperto en modo consolaaplicación que (por alguna razón) puede explícitamentedesactivarANSI.

ingrese la descripción de la imagen aquí

Respuesta2

ConEmuadmite 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 y se ejecutan en pestañas de ConEmu.

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

ConEmu y ANSI X3.64 / Xterm 256 colores

Respuesta3

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

Imagen de la página de MSDN mencionada a continuación.

ElPágina de MSDN sobre secuencias de terminales virtuales de consolaexplica qué secuencias son compatibles y cómo habilitarlas:

Puedes usarObtener modo de consolayEstablecer modo de consolabanderas para configurar este comportamiento. [...]

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

Respuesta4

Actualmente, los colores de la consola CMD no están habilitados de forma predeterminada en Win10, por lo tanto, para habilitarlo, agregue esto a su 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

información relacionada