diff options
| author | Fernando Tarlá Cardoso Lemos | 2010-06-29 20:59:03 -0300 | 
|---|---|---|
| committer | Michael Stapelberg | 2010-07-04 21:52:43 +0200 | 
| commit | 38337511e9b5896006f276c111265c985b2af70d (patch) | |
| tree | 0edd30656e1a336129a70f05b03ba6ba3b5c8968 | |
| parent | Don't leak skfd on errors. Don't spam stderr if the iface isn't present. (diff) | |
Support customized colors.
| -rw-r--r-- | i3status.c | 27 | ||||
| -rw-r--r-- | src/output.c | 8 | ||||
| -rw-r--r-- | src/print_eth_info.c | 4 | ||||
| -rw-r--r-- | src/print_run_watch.c | 2 | ||||
| -rw-r--r-- | src/print_wireless_info.c | 4 | 
5 files changed, 36 insertions, 9 deletions
| @@ -65,12 +65,33 @@ static char *file_exists(char *path) {          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()          }; @@ -194,6 +215,12 @@ int main(int argc, char *argv[]) {                  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"); diff --git a/src/output.c b/src/output.c index 3d6666e..c0c1480 100644 --- a/src/output.c +++ b/src/output.c @@ -21,9 +21,9 @@ char *color(const char *colorstr) {                  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;  } @@ -40,9 +40,9 @@ char *endcolor() {  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(" | ");  } diff --git a/src/print_eth_info.c b/src/print_eth_info.c index 9ad9b92..28ba6c1 100644 --- a/src/print_eth_info.c +++ b/src/print_eth_info.c @@ -79,12 +79,12 @@ void print_eth_info(const char *interface, const char *format_up, const char *fo          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++) { diff --git a/src/print_run_watch.c b/src/print_run_watch.c index 807e322..455130e 100644 --- a/src/print_run_watch.c +++ b/src/print_run_watch.c @@ -6,7 +6,7 @@ void print_run_watch(const char *title, const char *pidfile, const char *format)  	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 != '%') { diff --git a/src/print_wireless_info.c b/src/print_wireless_info.c index 22a9c31..60eb906 100644 --- a/src/print_wireless_info.c +++ b/src/print_wireless_info.c @@ -143,11 +143,11 @@ void print_wireless_info(const char *interface, const char *format_up, const cha          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++) { | 
