X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=i3status.c;h=6491e1c6015371115de7382941fdd96d2820cd89;hb=6996f0a4a34e0744f09dbce39a2164c6fcee875e;hp=3733cf09cca400d6e17f1b1b84a0aa468c1594a5;hpb=1de12e7b20e7ce38e2777218f1d922b3255599e1;p=i3%2Fi3status diff --git a/i3status.c b/i3status.c index 3733cf0..6491e1c 100644 --- a/i3status.c +++ b/i3status.c @@ -56,6 +56,8 @@ static bool exit_upon_signal = false; cfg_t *cfg, *cfg_general, *cfg_section; +void **cur_instance; + /* * Set the exit_upon_signal flag, because one cannot do anything in a safe * manner in a signal handler (e.g. fprintf, which we really want to do for @@ -104,8 +106,8 @@ static int parse_align(cfg_t *context, cfg_opt_t *option, const char *value, voi die("Invalid alignment attribute found in section %s, line %d: \"%s\"\n" "Valid attributes are: left, center, right\n", context->name, context->line, value); - char **cresult = result; - *cresult = sstrdup(value); + const char **cresult = result; + *cresult = value; return 0; } @@ -319,6 +321,9 @@ int main(int argc, char *argv[]) { cfg_opt_t battery_opts[] = { CFG_STR("format", "%status %percentage %remaining", CFGF_NONE), CFG_STR("format_down", "No battery", CFGF_NONE), + CFG_STR("status_chr", "CHR", CFGF_NONE), + CFG_STR("status_bat", "BAT", CFGF_NONE), + CFG_STR("status_full", "FULL", CFGF_NONE), CFG_STR("path", "/sys/class/power_supply/BAT%d/uevent", CFGF_NONE), CFG_INT("low_threshold", 30, CFGF_NONE), CFG_STR("threshold_type", "time", CFGF_NONE), @@ -381,8 +386,12 @@ int main(int argc, char *argv[]) { cfg_opt_t disk_opts[] = { CFG_STR("format", "%free", CFGF_NONE), + CFG_STR("format_not_mounted", NULL, CFGF_NONE), CFG_STR("prefix_type", "binary", CFGF_NONE), + CFG_STR("threshold_type", "percentage_avail", CFGF_NONE), + CFG_FLOAT("low_threshold", 0, CFGF_NONE), CFG_CUSTOM_ALIGN_OPT, + CFG_CUSTOM_COLOR_OPTS, CFG_CUSTOM_MIN_WIDTH_OPT, CFG_END() }; @@ -416,7 +425,6 @@ int main(int argc, char *argv[]) { CFG_SEC("ddate", ddate_opts, CFGF_NONE), CFG_SEC("load", load_opts, CFGF_NONE), CFG_SEC("cpu_usage", usage_opts, CFGF_NONE), - CFG_CUSTOM_COLOR_OPTS, CFG_END() }; @@ -545,6 +553,8 @@ int main(int argc, char *argv[]) { * (!), not individual plugins, seem very unlikely. */ char buffer[4096]; + void **per_instance = calloc(cfg_size(cfg, "order"), sizeof(*per_instance)); + while (1) { if (exit_upon_signal) { fprintf(stderr, "Exiting due to signal.\n"); @@ -558,6 +568,7 @@ int main(int argc, char *argv[]) { /* Restore the cursor-position, clear line */ printf("\033[u\033[K"); for (j = 0; j < cfg_size(cfg, "order"); j++) { + cur_instance = per_instance + j; if (j > 0) print_separator(separator); @@ -571,19 +582,29 @@ int main(int argc, char *argv[]) { CASE_SEC_TITLE("wireless") { SEC_OPEN_MAP("wireless"); - print_wireless_info(json_gen, buffer, title, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down")); + const char *interface = NULL; + if (strcasecmp(title, "_first_") == 0) + interface = first_eth_interface(NET_TYPE_WIRELESS); + if (interface == NULL) + interface = title; + print_wireless_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down")); SEC_CLOSE_MAP; } CASE_SEC_TITLE("ethernet") { SEC_OPEN_MAP("ethernet"); - print_eth_info(json_gen, buffer, title, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down")); + const char *interface = NULL; + if (strcasecmp(title, "_first_") == 0) + interface = first_eth_interface(NET_TYPE_ETHERNET); + if (interface == NULL) + interface = title; + print_eth_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down")); SEC_CLOSE_MAP; } CASE_SEC_TITLE("battery") { SEC_OPEN_MAP("battery"); - print_battery_info(json_gen, buffer, atoi(title), cfg_getstr(sec, "path"), cfg_getstr(sec, "format"), cfg_getstr(sec, "format_down"), cfg_getint(sec, "low_threshold"), cfg_getstr(sec, "threshold_type"), cfg_getbool(sec, "last_full_capacity"), cfg_getbool(sec, "integer_battery_capacity"), cfg_getbool(sec, "hide_seconds")); + print_battery_info(json_gen, buffer, atoi(title), cfg_getstr(sec, "path"), cfg_getstr(sec, "format"), cfg_getstr(sec, "format_down"), cfg_getstr(sec, "status_chr"), cfg_getstr(sec, "status_bat"), cfg_getstr(sec, "status_full"), cfg_getint(sec, "low_threshold"), cfg_getstr(sec, "threshold_type"), cfg_getbool(sec, "last_full_capacity"), cfg_getbool(sec, "integer_battery_capacity"), cfg_getbool(sec, "hide_seconds")); SEC_CLOSE_MAP; } @@ -601,7 +622,7 @@ int main(int argc, char *argv[]) { CASE_SEC_TITLE("disk") { SEC_OPEN_MAP("disk_info"); - print_disk_info(json_gen, buffer, title, cfg_getstr(sec, "format"), cfg_getstr(sec, "prefix_type")); + print_disk_info(json_gen, buffer, title, cfg_getstr(sec, "format"), cfg_getstr(sec, "format_not_mounted"), cfg_getstr(sec, "prefix_type"), cfg_getstr(sec, "threshold_type"), cfg_getfloat(sec, "low_threshold")); SEC_CLOSE_MAP; }