stdlib y salida coloreada en C

Estoy haciendo una aplicación simple que requiere salida de color. ¿Cómo puedo hacer que mi salida se coloree como emacs y bash do?

No me importa Windows, ya que mi aplicación es solo para sistemas UNIX.

Todos los emuladores de terminal modernos usan códigos de escape ANSI para mostrar colores y otras cosas.
No te molestes con las bibliotecas, el código es realmente simple.

Más información está aquí .

Ejemplo en C:

#include  #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" #define ANSI_COLOR_YELLOW "\x1b[33m" #define ANSI_COLOR_BLUE "\x1b[34m" #define ANSI_COLOR_MAGENTA "\x1b[35m" #define ANSI_COLOR_CYAN "\x1b[36m" #define ANSI_COLOR_RESET "\x1b[0m" int main (int argc, char const *argv[]) { printf(ANSI_COLOR_RED "This text is RED!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_GREEN "This text is GREEN!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_YELLOW "This text is YELLOW!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_BLUE "This text is BLUE!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_MAGENTA "This text is MAGENTA!" ANSI_COLOR_RESET "\n"); printf(ANSI_COLOR_CYAN "This text is CYAN!" ANSI_COLOR_RESET "\n"); return 0; } 

Tratar con las secuencias de color puede ser complicado y los diferentes sistemas pueden usar diferentes Indicadores de Secuencia de Color.

Sugeriría que intentes usar ncurses . Además del color, ncurses puede hacer muchas otras cosas ordenadas con la interfaz de usuario de la consola.

Puede generar códigos de control de color especiales para obtener una salida de terminal coloreada, aquí hay un buen recurso sobre cómo imprimir colores .

Por ejemplo:

 printf("\033[22;34mHello, world!\033[0m"); // shows a blue hello world 

EDITAR: Mi original utilizaba códigos de colores de solicitud, lo cual no funciona 🙁 Este sí (lo probé).

Puede asignar un color a cada funcionalidad para que sea más útil.

 #define Color_Red "\33[0:31m\\]" // Color Start #define Color_end "\33[0m\\]" // To flush out prev settings #define LOG_RED(X) printf("%s %s %s",Color_Red,X,Color_end) foo() { LOG_RED("This is in Red Color"); } 

De la misma manera, puedes seleccionar códigos de colores diferentes y hacer esto más genérico.

Si usa el mismo color para todo el progtwig, puede definir la printf() .

  #include #define ah_red "\e[31m" #define printf(X) printf(ah_red "%s",X); #int main() { printf("Bangladesh"); printf("\n"); return 0; } 

Porque no puedes imprimir un personaje con formato de cuerda. También puede pensar en agregar un formato con algo como esto

 #define PRINTC(c,f,s) printf ("\033[%dm" f "\033[0m", 30 + c, s) 

f es el formato como en printf

 PRINTC (4, "%s\n", "bar") 

imprimirá blue bar

 PRINTC (1, "%d", 'a') 

imprimirá red 97

 #include  #define BLUE(string) "\x1b[34m" string "\x1b[0m" #define RED(string) "\x1b[31m" string "\x1b[0m" int main(void) { printf("this is " RED("red") "!\n"); // a somewhat more complex ... printf("this is " BLUE("%s") "!\n","blue"); return 0; } 

leyendo Wikipedia :

  • \ x1b [0m restablece todos los atributos
  • \ x1b [31m establece el color de primer plano en rojo
  • \ x1b [44m establecería el fondo en azul.
  • ambos: \ x1b [31; 44m
  • ambos pero invertidos: \ x1b [31; 44; 7m
  • recuerde reiniciar después \ x1b [0m