commit 7bb679d15c57fb3a03966df1cee2034567ef2eda
parent 0d8b603f99f369720f4510065964b57de5e8cf58
Author: nibo <nibo@relim.de>
Date: Sun, 20 Oct 2024 11:14:43 +0200
Remove colors when stderr is not tty
Diffstat:
2 files changed, 39 insertions(+), 14 deletions(-)
diff --git a/chordpro.c b/chordpro.c
@@ -3,6 +3,7 @@
#include <stdbool.h>
#include <stdint.h>
#include <stdarg.h>
+#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
@@ -271,40 +272,59 @@ cho_debug_chord_print(struct ChoChord *chord)
#endif /* DEBUG */
+#if COLOR == 1
static void
cho_log(enum LogLevel level, const char *msg, ...)
{
va_list va;
va_start(va, msg);
-#if COLOR == 1
const char *log_level;
const char *color;
switch (level) {
case LOG_INFO:
log_level = "INFO";
- color = "37";
+ color = COLOR_BOLD_WHITE;
break;
case LOG_WARN:
log_level = "WARN";
- color = "33";
+ color = COLOR_BOLD_ORANGE;
break;
case LOG_ERR:
log_level = " ERR";
- color = "31";
+ color = COLOR_BOLD_RED;
break;
}
- if (g_chordpro_filepath) {
- fprintf(stderr, "\033[1m%s:%ld:\033[0m \033[1;%sm%s\033[0m: ",
- g_chordpro_filepath, g_line_number, color, log_level);
- vfprintf(stderr, msg, va);
- fprintf(stderr, "\n");
+ if (isatty(2)) {
+ if (g_chordpro_filepath) {
+ fprintf(stderr, COLOR_BOLD_WHITE"%s:%ld:"COLOR_RESET" %s%s"COLOR_RESET": ",
+ g_chordpro_filepath, g_line_number, color, log_level);
+ vfprintf(stderr, msg, va);
+ fprintf(stderr, "\n");
+ } else {
+ fprintf(stderr, "line "COLOR_BOLD_WHITE"%ld:"COLOR_RESET" %s%s"COLOR_RESET": ",
+ g_line_number, color, log_level);
+ vfprintf(stderr, msg, va);
+ fprintf(stderr, "\n");
+ }
} else {
- fprintf(stderr, "line \033[1m%ld:\033[0m \033[1;%sm%s\033[0m: ",
- g_line_number, color, log_level);
- vfprintf(stderr, msg, va);
- fprintf(stderr, "\n");
+ if (g_chordpro_filepath) {
+ fprintf(stderr, "%s:%ld: %s: ", g_chordpro_filepath, g_line_number,
+ log_level);
+ vfprintf(stderr, msg, va);
+ fprintf(stderr, "\n");
+ } else {
+ fprintf(stderr, "line %ld: %s: ", g_line_number, log_level);
+ vfprintf(stderr, msg, va);
+ fprintf(stderr, "\n");
+ }
}
+}
#else
+static void
+cho_log(enum LogLevel level, const char *msg, ...)
+{
+ va_list va;
+ va_start(va, msg);
const char *log_level;
switch (level) {
case LOG_INFO:
@@ -327,8 +347,8 @@ cho_log(enum LogLevel level, const char *msg, ...)
vfprintf(stderr, msg, va);
fprintf(stderr, "\n");
}
-#endif
}
+#endif /* COLOR */
static inline bool
is_whitespace(char c)
diff --git a/chordpro.h b/chordpro.h
@@ -12,6 +12,11 @@
#define URL_MAX_LEN 2000
#define FONT_NAME_MAX 100
+#define COLOR_BOLD_RED "\033[1;31m"
+#define COLOR_BOLD_ORANGE "\033[1;33m"
+#define COLOR_BOLD_WHITE "\033[1;37m"
+#define COLOR_RESET "\033[0m"
+
enum EnvironmentDirective {
START_OF_CHORUS, SOC, END_OF_CHORUS, EOC, CHORUS,
START_OF_VERSE, SOV, END_OF_VERSE, EOV,