diff --git a/monitor/display.c b/monitor/display.c
index 4e5693b..d61a79a 100644
--- a/monitor/display.c
+++ b/monitor/display.c
static pid_t pager_pid = 0;
int default_pager_num_columns = FALLBACK_TERMINAL_WIDTH;
+enum monitor_color setting_monitor_color = COLOR_AUTO;
+
+void set_monitor_color(enum monitor_color color)
+{
+ setting_monitor_color = color;
+}
bool use_color(void)
{
static int cached_use_color = -1;
- if (__builtin_expect(!!(cached_use_color < 0), 0))
+ if (setting_monitor_color == COLOR_ALWAYS)
+ cached_use_color = 1;
+ else if (setting_monitor_color == COLOR_NEVER)
+ cached_use_color = 0;
+ else if (__builtin_expect(!!(cached_use_color < 0), 0))
cached_use_color = isatty(STDOUT_FILENO) > 0 || pager_pid > 0;
return cached_use_color;
diff --git a/monitor/display.h b/monitor/display.h
index cba39ec..be57398 100644
--- a/monitor/display.h
+++ b/monitor/display.h
bool use_color(void);
+enum monitor_color { COLOR_AUTO, COLOR_ALWAYS, COLOR_NEVER };
+void set_monitor_color(enum monitor_color);
+
#define COLOR_OFF "\x1B[0m"
#define COLOR_BLACK "\x1B[0;30m"
#define COLOR_RED "\x1B[0;31m"
diff --git a/monitor/main.c b/monitor/main.c
index 969c881..3ec3a5f 100644
--- a/monitor/main.c
+++ b/monitor/main.c
"\t-R --rtt [<address>],[<area>],[<name>]\n"
"\t RTT control block parameters\n"
"\t-C, --columns [width] Output width if not a terminal\n"
+ "\t-c, --color [mode] Output color: auto/always/never\n"
"\t-h, --help Show help options\n");
}
{ "jlink", required_argument, NULL, 'J' },
{ "rtt", required_argument, NULL, 'R' },
{ "columns", required_argument, NULL, 'C' },
+ { "color", required_argument, NULL, 'c' },
{ "todo", no_argument, NULL, '#' },
{ "version", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
struct sockaddr_un addr;
opt = getopt_long(argc, argv,
- "r:w:a:s:p:i:d:B:V:MNtTSAE:PJ:R:C:vh",
+ "r:w:a:s:p:i:d:B:V:MNtTSAE:PJ:R:C:c:vh",
main_options, NULL);
if (opt < 0)
break;
case 'C':
set_default_pager_num_columns(atoi(optarg));
break;
+ case 'c':
+ if (strcmp("always", optarg) == 0)
+ set_monitor_color(COLOR_ALWAYS);
+ else if (strcmp("never", optarg) == 0)
+ set_monitor_color(COLOR_NEVER);
+ else if (strcmp("auto", optarg) == 0)
+ set_monitor_color(COLOR_AUTO);
+ else {
+ fprintf(stderr, "Color option must be one of "
+ "auto/always/never\n");
+ return EXIT_FAILURE;
+ }
+ break;
case '#':
packet_todo();
lmp_todo();