diff --git a/src/mu-util.c b/src/mu-util.c index 6081bb04..882bf97a 100644 --- a/src/mu-util.c +++ b/src/mu-util.c @@ -145,6 +145,43 @@ mu_util_cache_dir (void) } +void +mu_util_color_print (MuColor col, const char *str) +{ + const char *pfx; + const char *reset = "\x1b[0m"; + + static int is_tty = -1; + + if (!str) + return; + + if (is_tty == -1) + is_tty = isatty(fileno(stdout)) ? 1 : 0; + + switch (col) { + case MU_COLOR_RED : pfx = "\x1b[31m"; break; + case MU_COLOR_GREEN : pfx = "\x1b[32m"; break; + case MU_COLOR_YELLOW : pfx = "\x1b[33m"; break; + case MU_COLOR_BLUE : pfx = "\x1b[34m"; break; + case MU_COLOR_MAGENTA : pfx = "\x1b[35m"; break; + case MU_COLOR_CYAN : pfx = "\x1b[36m"; break; + + default: + g_critical ("invalid color %u", (unsigned)col); + return; + } + + if (is_tty) + fputs (pfx, stdout); + + fputs (str, stdout); + + if (is_tty) + fputs (reset, stdout); +} + + gboolean mu_util_init_system (void) { diff --git a/src/mu-util.h b/src/mu-util.h index 8ce7fd74..b7633eb8 100644 --- a/src/mu-util.h +++ b/src/mu-util.h @@ -105,6 +105,27 @@ gboolean mu_util_check_dir (const gchar* path, gboolean readable, const char* mu_util_cache_dir (void) G_GNUC_CONST; +enum _MuColor { + MU_COLOR_RED = 0, + MU_COLOR_GREEN, + MU_COLOR_YELLOW, + MU_COLOR_BLUE, + MU_COLOR_MAGENTA, + MU_COLOR_CYAN +}; +typedef enum _MuColor MuColor; + + +/** + * print string to stdout in a certain color if the output is to a + * sufficiently capable tty; otherwise, just print the string. Color + * will *only* be printed if stdout actually is a tty. + * + * @param col a MuColor + * @param str a string, or NULL + */ +void mu_util_color_print (MuColor col, const char *str); + /** * create a writeable file and return its file descriptor (which * you'll need to close(2) when done with it.)