Witiko
Estoy construyendo 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 \033
có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;
}
¿Qué hay que hacer en el C code
nivel, para que se cargue el controlador ANSI.SYS y se reconozcan las secuencias de escape ANSI/VT100?
franco rondini
[UPDATE] Para el último Windows 10, lea la útil contribución de @brainslugs83, justo debajo de los comentarios de esta respuesta.
Mientras que para las versiones anteriores Windows 10 Anniversary Update
:
ANSI.SYS tiene la restricción de que solo 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: todos amamos los coloreslas versiones modernas de Windows no tienen este agradable soporte ANSI.
En cambio, Microsoft creó muchas funciones, pero esto está lejos de su necesidad de operar la secuencia de escape ANSI/VT100.
Para 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 secuencias de escape ANSI de forma nativa. Software como Ansicon sin embargo, puede actuar como un envoltorio alrededor de la consola Win32 estándar y agregar soporte para secuencias de escape ANSI.
Por eso pienso ANSICON por Jason Hood es su solución. esta escrito en Cadmite versiones de Windows de 32 y 64 bits y la fuente esta disponible.
También encontré otra pregunta o publicación similar que finalmente se respondió para usar ANSICON:
- ¿Cómo cargar códigos de escape ANSI u obtener una lista de archivos de colores en WinXP cmd shell?
- como usar 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
- habilite los colores ansi en el símbolo del sistema de Windows
-
Una vez hice un truco para que ANSI funcionara en Windows XP sin herramientas de terceros. groups.google.com/forum/#!topic/alt.msdos.batch.nt/YZnoq80Mcds
– est
20 de octubre de 2015 a las 1:31
-
Cómo cambian los tiempos 😉 En Windows 10 Anniversary Update y más allá, Windows Console se actualizó con un soporte bastante sólido para secuencias ANSI/VT, y en Creators Update, también se actualizó para admitir colores RGB de 24 bits: blogs.msdn.microsoft.com/commandline/2016/09/22/…
– Rich Turner
12 de julio de 2017 a las 0:29
-
@Simon gracias, eliminé el enlace porque no funciona por cierto hay un versión archivada de kb/101875 aquí
– Franco Rondini
6 de marzo de 2018 a las 19:03
-
FYI, en la última versión de Windows 10, puede habilitar ANSI en conhost a través del siguiente reghack: en
HKCU\Console
crear unDWORD
llamadoVirtualTerminalLevel
y configúralo en0x1
; luego reinicie cmd.exe. — Puedes probarlo con el siguiente powershell"?[1;31mele ?[32mct ?[33mroni ?[35mX ?[36mtar ?[m".Replace('?', [char]27);
.– BrainSlugs83
27 oct 2018 a las 21:18
-
Gracias @brainslugs83 – Respuesta actualizada para citar tu comentario
– Franco Rondini
30 oct 2018 a las 17:57
papel
A partir de Windows 10 TH2 (v1511), conhost.exe
y cmd.exe
Admite secuencias de escape ANSI y VT100 listas para usar (aunque tienen que estar habilitados).
Ver mi respuesta en superusuario para más detalles.
-
Las compilaciones 105xx fueron las únicas compilaciones que tenían secuencias VT100 habilitadas de manera predeterminada. En compilaciones anteriores y posteriores, está deshabilitado de forma predeterminada porque se habilitó por error. Ver aquí para la explicación wpdev.uservoice.com/forums/…
– Anatol Belsky
12 de agosto de 2016 a las 0:03
-
FYI, en la última versión de Windows 10, puede habilitar ANSI en conhost a través del siguiente reghack: en
HKCU\Console
crear unDWORD
llamadoVirtualTerminalLevel
y configúralo en0x1
; luego reinicie cmd.exe. — Puedes probarlo con el siguiente powershell"?[1;31mele ?[32mct ?[33mroni ?[35mX ?[36mtar ?[m".Replace('?', [char]27);
.– BrainSlugs83
27 oct 2018 a las 21:18
Basado en @BrainSlugs83, puede activar la versión actual de Windows 10 a través del registro, con esta línea de comando:
REG ADD HKCU\CONSOLE /f /v VirtualTerminalLevel /t REG_DWORD /d 1
-
¿Es compatible con todas las versiones de Windows 10? ¿O disponible a partir de una actualización específica?
– Youssef13
15 de diciembre de 2019 a las 7:02
-
en la primera versión de Windows 10 no es compatible, pero en las actuales funciona bien.
–Daniel De León
15 de diciembre de 2019 a las 22:19
-
Quiero saber la versión específica que admite esto.
– Youssef13
16 de diciembre de 2019 a las 7:42
-
@Youssef13 Según superusuario.com/a/1300251/702169la primera versión compatible es la compilación 16257.
– InQβ
22 de julio de 2021 a las 1:59
Lector invitado
Para Python 2.7, el siguiente script me funciona bien con Windows 10 (v1607)
importar o imprimir '\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"
Result should be:
[35mcolor-test[39m test end
color-test test end
Starting from Windows 10, you can use ENABLE_VIRTUAL_TERMINAL_PROCESSING
to enable ANSI escape sequences:
https://msdn.microsoft.com/en-us/library/windows/desktop/mt638032(v=vs.85).aspx
Joakim
If ANSICON is not acceptable since it requires you to install something on the system, a more lightweight solution that parses and translates the ANSI codes into the relevant Win32 API console functions such as SetConsoleTextAttribute.
Xantium
For coloring the cmd you need Windows.h
and use SetConsoleTextAttribute()
more details can be found in http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047%28v=vs.85%29.aspx
-
That’s quite an unwieldy solution, not to mention the fact that this only allows for the coloring of a text – not the rest of ANSI.SYS codes. users.cybercity.dk/~bse26236/batutil/help/ANSI~S_S.HTM
– WitikoMay 26, 2013 at 2:05
hay
colorama
módulo para Python: “En Windows, Colorama elimina estos caracteres ANSI de la salida estándar y los convierte en llamadas win32 equivalentes para texto en color. En otras plataformas, Colorama no hace nada”.– jfs
18 de septiembre de 2017 a las 8:25
Tenga en cuenta que las reglas del juego han cambiado drásticamente a partir de las versiones recientes de Windows 10.
– Andreas Rejbrand
26 de julio de 2018 a las 13:37
FYI, en la última versión de Windows 10, puede habilitar ANSI en conhost a través del siguiente reghack: en
HKCU\Console
crear unDWORD
llamadoVirtualTerminalLevel
y configúralo en0x1
; luego reinicie cmd.exe. — Puedes probarlo con el siguiente powershell"?[1;31mele ?[32mct ?[33mroni ?[35mX ?[36mtar ?[m".Replace('?', [char]27);
.– BrainSlugs83
27/10/2018 a las 21:17
actualización learn.microsoft.com/en-us/windows/console/… aquí cómo podría habilitarse sin editar el registro y posiblemente romper otras aplicaciones
– Bogdan Mart
8 de marzo de 2019 a las 18:13
ANSI.SYS es algo que no veo desde los días de WIN98.
– Luis Felipe
30 de noviembre de 2022 a las 15:57