secuencias escape concepto colores color codigo caracteres windows terminal console-application ncurses ansi-escape

windows - concepto - secuencias de escape ansi colores



¿Cómo hacer que la consola win32 reconozca las secuencias de escape ANSI/VT100? (9)

Estoy construyendo una versión liviana de la biblioteca ncurses. Hasta ahora, funciona bastante bien con terminales compatibles con VT100, pero la consola win32 no reconoce el código /033 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; }

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




Ansi.sys (en la carpeta system32) es un "controlador MSDOS" proporcionado como parte de Windows XP, 2000 y versiones anteriores de NT. En 2000 y XP, está ubicado en la carpeta system32 (no recuerdo la estructura de las versiones anteriores de NT). Los programas que se ejecutan en el subsistema DOS y usan salida estándar pueden usar ANSI.SYS de la misma forma que podrían ejecutarse en MSDOS.

Para cargar ansi.sys, debe usar el comando device = o devicehigh = en config, tal como lo haría en MSDOS. En Windows NT 5 (2K y XP), cada copia del subsistema DOS puede tener un archivo de configuración separado en el pif / acceso directo (use el botón "avanzado"), y hay un archivo predeterminado llamado CONFIG.NT (también en la carpeta system32), que se usa si el pif / acceso directo no especifica un archivo de configuración especial.

Cuando ansi.sys se carga correctamente, mem / d informará que está cargado. En versiones anteriores de NT, puede y debe cargar un entorno DOS adecuado para cargar ansi.sys, y ansi art funcionará en el prompt. En Win 2K y XP, cargar ansi.sys no tendrá ningún efecto en su "solicitud de CMD" porque CMD no es un programa de DOS: es un programa de consola de Windows de 32 bits. Por alguna razón que no entiendo, en WinXP, incluso si carga una copia fija de command.com usando "command.com / p", el símbolo del sistema no se habilitará ansi: tal vez cuando lo haga de esa manera solo emula la carga de command.com?

En cualquier caso, cuando utiliza una versión real de DOS de command.com, ansi se habilita después de ser cargado: puede demostrar su uso con un poco de arte ansi como este:

command /c type ansiart.ans

(aquí hay un ejemplo: http://artscene.textfiles.com/ansi/artwork/beastie.ans )

CONFIG.NT (en la carpeta system32) contiene un ejemplo de la sintaxis para cargar controladores de dispositivo. Tendrá que ser un administrador para editar ese archivo predeterminado, o puede hacer una copia de él.

En Win 2K y XP, el "acceso directo" predeterminado para MSDOS es un archivo .PIF, no un archivo .LNK. Si crea un archivo .lnk en CMD, no podrá configurar archivos especiales de configuración y autoexec, sino que utilizará CONFIG.NT por defecto. Si desea utilizar un archivo de configuración especial para una sola aplicación de DOS, puede hacer una copia del "acceso directo de MSDOS", o puede hacer una copia de "_default.pif", que se encuentra en su carpeta de Windows.



Personalmente me gusta el clink . No solo procesa códigos ANSI, también agrega muchas otras características para que Windows Console se comporte como bash (historial, búsqueda de historial inverso, atajos de teclado, etc.):

  • La misma edición de línea como Bash (de la biblioteca Readline de GNU).
  • Persistencia histórica entre sesiones.
  • Finalización sensible al contexto;
    • Ejecutables (y alias).
    • Comandos de directorio.
    • Variables de entorno
    • Herramientas de terceros; Git, Mercurial, SVN, Go y P4.
  • Nuevos atajos de teclado;
    • Pegar desde el portapapeles ( Ctrl-V ).
    • Búsqueda de historial incremental ( Ctrl-R / Ctrl-S ).
    • Potente finalización ( TAB ).
    • Deshacer ( Ctrl-Z ).
    • "Cd .." automático ( Ctrl-PgUp ).
    • Expansión de variable de entorno ( Ctrl-Alt-E ).
    • (presione Alt-H para muchos más ...)
  • Scriptable completa con Lua.
  • Indicador de colores y secuencias de comandos.
  • Auto-respuesta del aviso " Terminar trabajo por lotes? ".

Quizás Ansicon puede ayudarte

Simplemente descargue y extraiga archivos, según su sistema operativo de Windows: 32 bits o 64 bits

Instalarlo con: ansicon -i



[ACTUALIZAR] Antes de la actualización de aniversario de Windows 10:

ANSI.SYS tiene una restricción de que solo se puede ejecutar en el contexto del subsistema de 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 gustan los colores , las versiones modernas de Windows no cuentan con este buen soporte ANSI.

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

Para una explicación más detallada, vea 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 secuencias de escape ANSI de forma nativa. Ansicon embargo, un software como Ansicon puede actuar como un envoltorio alrededor de la consola estándar de Win32 y agregar soporte para las secuencias de escape de ANSI.

Así que creo que ANSICON de Jason Hood es tu solución. Está escrito en C , admite versiones de Windows de 32 y 64 bits, y Ansicon .

También encontré alguna otra pregunta o publicación similar que finalmente se ha respondido para usar ANSICON:


Para Python 2.7, la siguiente secuencia de comandos funciona bien para Windows 10 (v1607)

import os print ''/033[35m''+''color-test''+''/033[39m''+" test end" os.system('''') #enable VT100 Escape Sequence for WINDOWS 10 Ver. 1607 print ''/033[35m''+''color-test''+''/033[39m''+" test end"

El resultado debería ser:

[35mcolor-test[39m test end color-test test end