diff --git a/sway/commands.c b/sway/commands.c index 33a5e485..efa72f19 100644 --- a/sway/commands.c +++ b/sway/commands.c @@ -146,6 +146,22 @@ int cmd_set(struct sway_config *config, int argc, char **argv) { return 0; } +int cmd_log_colors(struct sway_config *config, int argc, char **argv) { + if (argc != 1) { + sway_log(L_ERROR, "Invalid log_colors command (expected 1 argument, got %d)", argc); + return 1; + } + + if (strcasecmp(argv[0], "no") != 0 && strcasecmp(argv[0], "yes") != 0) { + sway_log(L_ERROR, "Invalid log_colors command (expected `yes` or `no`, got '%s')", argv[0]); + return 1; + } + + sway_log_colors(!strcasecmp(argv[0], "yes")); + return 0; +} + + /* Keep alphabetized */ struct cmd_handler handlers[] = { { "bindsym", cmd_bindsym }, @@ -153,6 +169,7 @@ struct cmd_handler handlers[] = { { "exit", cmd_exit }, { "focus_follows_mouse", cmd_focus_follows_mouse }, { "layout", cmd_layout }, + { "log_colors", cmd_log_colors }, { "set", cmd_set }, }; diff --git a/sway/log.c b/sway/log.c index 6ac7026f..7a88b6d1 100644 --- a/sway/log.c +++ b/sway/log.c @@ -17,6 +17,10 @@ void init_log(int verbosity) { v = verbosity; } +void sway_log_colors(int mode) { + colored = (mode == 1) ? 1 : 0; +} + void sway_abort(char *format, ...) { fprintf(stderr, "ERROR: "); va_list args; @@ -33,11 +37,18 @@ void sway_log(int verbosity, char* format, ...) { if (c > sizeof(verbosity_colors) / sizeof(char *)) { c = sizeof(verbosity_colors) / sizeof(char *) - 1; } - fprintf(stderr, verbosity_colors[c]); + + if (colored) { + fprintf(stderr, verbosity_colors[c]); + } + va_list args; va_start(args, format); vfprintf(stderr, format, args); va_end(args); - fprintf(stderr, "\x1B[0m\n"); + + if (colored) { + fprintf(stderr, "\x1B[0m\n"); + } } } diff --git a/sway/log.h b/sway/log.h index 019012d3..03836513 100644 --- a/sway/log.h +++ b/sway/log.h @@ -9,6 +9,7 @@ typedef enum { } log_importance_t; void init_log(int verbosity); +void sway_log_colors(int mode); void sway_log(int verbosity, char* format, ...); void sway_abort(char* format, ...);