Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Lieutenant McFarley en 9 Marzo 2022, 12:33 pm



Título: Usar códigos escape ANSI en C es standard?
Publicado por: Lieutenant McFarley en 9 Marzo 2022, 12:33 pm
Por ejemplo esto:
Código
  1. printf ("\033[14;38H");
  2. printf ("\033[J\n");
se considera standard en C? Portable no es porque en Windows no da resultado, en Linux si.


Título: Re: Usar códigos escape ANSI en C es standard?
Publicado por: MAFUS en 9 Marzo 2022, 13:29 pm
Son códigos del estándar POSIX, no es estándar de C.


Título: Re: Usar códigos escape ANSI en C es standard?
Publicado por: MinusFour en 9 Marzo 2022, 22:19 pm
Son códigos del estándar POSIX, no es estándar de C.

Eh, no estoy tan seguro que sea parte de POSIX. De todas formas, los códigos de escape en sí, son una especificación para terminales (son un estándar en sí). Así que realmente depende de la terminal que estes usando.

CMD creo que si soporta esos caracteres de escape pero es una configuración que necesita ser habilitada para versiones anteriores a Windows 10 build 1909.

Una prueba (estoy usando bash con WSL pero debe ser lo mismo):

(https://i.imgur.com/OT2ymky.png)

No tengo un compilador a la mano (para win) pero debería ser lo mismo.

Para ciertas versiones anteriores:

Citar
Enabling ANSI colors in older versions of Windows
To use ANSI colours in the Windows terminal requires setting VirtualTerminalLevel.

VirtualTerminalLevel = 1 is now set by default for the terminal and in ConPTY.
In Windows versions 1511 through to 1903 this had to be enabled in the registry at:

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

Fuente: https://ss64.com/nt/syntax-ansi.html

Claro que podrías utilizar otra terminal (que no sea CMD) y que soporte el estandar.

Por si alguien duda con lo de bash investigue un poco más de como hacerlo con echo:

(https://i.imgur.com/7jbR0X2.png)