return full_path;
}
+/*
+ * Validates a color in "#RRGGBB" format
+ *
+ */
+static int valid_color(const char *value)
+{
+ if (strlen(value) != 7) return 0;
+ if (value[0] != '#') return 0;
+ for (int i = 1; i < 7; ++i) {
+ if (value[i] >= '0' && value[i] <= '9') continue;
+ if (value[i] >= 'a' && value[i] <= 'f') continue;
+ if (value[i] >= 'A' && value[i] <= 'F') continue;
+ return 0;
+ }
+ return 1;
+}
+
int main(int argc, char *argv[]) {
unsigned int j;
cfg_opt_t general_opts[] = {
CFG_STR("output_format", "dzen2", CFGF_NONE),
CFG_BOOL("colors", 1, CFGF_NONE),
+ CFG_STR("color_good", "#00FF00", CFGF_NONE),
+ CFG_STR("color_degraded", "#FFFF00", CFGF_NONE),
+ CFG_STR("color_bad", "#FF0000", CFGF_NONE),
+ CFG_STR("color_separator", "#333333", CFGF_NONE),
CFG_INT("interval", 1, CFGF_NONE),
CFG_END()
};
output_format = O_NONE;
else die("Unknown output format: \"%s\"\n", output_str);
+ if (!valid_color(cfg_getstr(cfg_general, "color_good"))
+ || !valid_color(cfg_getstr(cfg_general, "color_degraded"))
+ || !valid_color(cfg_getstr(cfg_general, "color_bad"))
+ || !valid_color(cfg_getstr(cfg_general, "color_separator")))
+ die("Bad color format");
+
if ((general_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
die("Could not create socket\n");
return colorbuf;
}
if (output_format == O_DZEN2)
- (void)snprintf(colorbuf, sizeof(colorbuf), "^fg(%s)", colorstr);
+ (void)snprintf(colorbuf, sizeof(colorbuf), "^fg(%s)", cfg_getstr(cfg_general, colorstr));
else if (output_format == O_XMOBAR)
- (void)snprintf(colorbuf, sizeof(colorbuf), "<fc=%s>", colorstr);
+ (void)snprintf(colorbuf, sizeof(colorbuf), "<fc=%s>", cfg_getstr(cfg_general, colorstr));
return colorbuf;
}
void print_seperator() {
if (output_format == O_DZEN2)
- printf("^fg(#333333)^p(5;-2)^ro(2)^p()^fg()^p(5)");
+ printf("^fg(%s)^p(5;-2)^ro(2)^p()^fg()^p(5)", cfg_getstr(cfg_general, "color_separator"));
else if (output_format == O_XMOBAR)
- printf("<fc=#333333> | </fc>");
+ printf("<fc=%s> | </fc>", cfg_getstr(cfg_general, "color_separator"));
else if (output_format == O_NONE)
printf(" | ");
}
const char *ip_address = get_ip_addr(interface);
if (ip_address == NULL) {
- printf("%s", color("#FF0000"));
+ printf("%s", color("color_bad"));
printf("%s", format_down);
(void)printf("%s", endcolor());
return;
} else {
- printf("%s", color("#00FF00"));
+ printf("%s", color("color_good"));
}
for (walk = format_up; *walk != '\0'; walk++) {
bool running = process_runs(pidfile);
const char *walk;
- printf("%s", (running ? color("#00FF00") : color("#FF0000")));
+ printf("%s", (running ? color("color_good") : color("color_bad")));
for (walk = format; *walk != '\0'; walk++) {
if (*walk != '%') {
if (get_wireless_info(interface, &info)) {
walk = format_up;
if (info.flags & WIRELESS_INFO_FLAG_HAS_QUALITY)
- printf("%s", info.quality < info.quality_average ? color("#FFFF00") : color("#00FF00"));
+ printf("%s", info.quality < info.quality_average ? color("color_degraded") : color("color_good"));
}
else {
walk = format_down;
- printf("%s", color("#FF0000"));
+ printf("%s", color("color_bad"));
}
for (; *walk != '\0'; walk++) {