¿Cómo hacer que la consola win32 reconozca secuencias de escape ANSI/VT100 en `c`?

Resuelto Witiko asked hace 11 años • 14 respuestas

Estoy creando una versión ligera de la biblioteca ncurses. Hasta ahora, funciona bastante bien con terminales compatibles con VT100, pero la consola win32 no reconoce el \033código como el comienzo de una secuencia de escape:

# include <stdio.h>
# include "term.h"

int main(void) {
  puts(BOLD COLOR(FG, RED) "Bold text" NOT_BOLD " is cool!" CLEAR);
  return 0;
}

Captura de pantalla

¿Qué se debe hacer en el C codenivel para que se cargue el controlador ANSI.SYS y se reconozcan las secuencias de escape ANSI/VT100?

Witiko avatar May 26 '13 07:05 Witiko
Aceptado

[ACTUALIZACIÓN] Para la última versión de Windows 10, lea la útil contribución de @brainslugs83, justo debajo en los comentarios de esta respuesta.

Mientras que para versiones anteriores Windows 10 Anniversary Update:

ANSI.SYS tiene la restricción de que sólo puede ejecutarse en el contexto del subsistema MS-DOS en Windows 95-Vista.

Microsoft KB101875 explica cómo habilitar ANSI.SYS en una ventana de comandos, pero no se aplica a Windows NT . Según el artículo: a todos nos encantan los colores , las versiones modernas de Windows no tienen este bonito soporte ANSI.

En cambio, Microsoft creó muchas funciones, pero esto está lejos de su necesidad de operar la secuencia de escape ANSI/VT100.

Para obtener una explicación más detallada, consulte el artículo de Wikipedia :

ANSI.SYS también funciona en sistemas derivados de NT para programas heredados de 16 bits que se ejecutan bajo NTVDM.

La consola Win32 no admite de forma nativa secuencias de escape ANSI. Sin embargo , software como Ansicon puede actuar como un contenedor alrededor de la consola Win32 estándar y agregar soporte para secuencias de escape ANSI.

Entonces creo que ANSICON de Jason Hood es su solución. Está escrito en C , admite versiones de Windows de 32 y 64 bits y la fuente está disponible .

También encontré otra pregunta o publicación similar que finalmente fue respondida para usar ANSICON:

  • ¿Cómo cargar códigos de escape ANSI u obtener una lista de archivos en color en el cmd shell de WinXP?
  • cómo utilizar ansi.sys en Windows 7
  • ¿Cómo puedo hacer que cmd.exe muestre secuencias de escape de color ANSI?
  • color ansi en conchas de windows
  • habilitar colores ansi en el símbolo del sistema de Windows
Franco Rondini avatar May 28 '2013 18:05 Franco Rondini

A partir de Windows 10 TH2 (v1511), conhost.exeadmite cmd.exesecuencias de escape ANSI y VT100 listas para usar (aunque deben estar habilitadas ).

Vea mi respuesta en superusuario para más detalles.

rolve avatar Mar 08 '2016 10:03 rolve

Basado en @BrainSlugs83, puedes activarlo en la versión actual de Windows 10 mediante el registro, con esta línea de comando:

REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
Daniel De León avatar May 15 '2019 13:05 Daniel De León