From 42e714729178679b425095bc1acb1b143ed4885c Mon Sep 17 00:00:00 2001 From: Felix Buehler Date: Mon, 10 Feb 2020 22:33:20 +0100 Subject: [PATCH] add wireless format-options --- i3status.c | 5 ++++- include/i3status.h | 2 +- man/i3status.man | 9 ++++++++- src/print_wireless_info.c | 12 ++++++------ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/i3status.c b/i3status.c index b02b71a..2108e04 100644 --- a/i3status.c +++ b/i3status.c @@ -338,7 +338,10 @@ int main(int argc, char *argv[]) { cfg_opt_t wireless_opts[] = { CFG_STR("format_up", "W: (%quality at %essid, %bitrate) %ip", CFGF_NONE), CFG_STR("format_down", "W: down", CFGF_NONE), + CFG_STR("format_bitrate", "%g %cb/s", CFGF_NONE), + CFG_STR("format_noise", "%3d%s", CFGF_NONE), CFG_STR("format_quality", "%3d%s", CFGF_NONE), + CFG_STR("format_signal", "%3d%s", CFGF_NONE), CFG_CUSTOM_ALIGN_OPT, CFG_CUSTOM_COLOR_OPTS, CFG_CUSTOM_MIN_WIDTH_OPT, @@ -732,7 +735,7 @@ int main(int argc, char *argv[]) { 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"), cfg_getstr(sec, "format_quality")); + print_wireless_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"), cfg_getstr(sec, "format_bitrate"), cfg_getstr(sec, "format_noise"), cfg_getstr(sec, "format_quality"), cfg_getstr(sec, "format_signal")); SEC_CLOSE_MAP; } diff --git a/include/i3status.h b/include/i3status.h index 2e314b1..81e05d9 100644 --- a/include/i3status.h +++ b/include/i3status.h @@ -218,7 +218,7 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char void print_time(yajl_gen json_gen, char *buffer, const char *title, const char *format, const char *tz, const char *locale, const char *format_time, bool hide_if_equals_localtime, time_t t); void print_ddate(yajl_gen json_gen, char *buffer, const char *format, time_t t); const char *get_ip_addr(const char *interface, int family); -void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down, const char *quality_min_lenght); +void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down, const char *format_bitrate, const char *format_noise, const char *format_quality, const char *format_signal); void print_run_watch(yajl_gen json_gen, char *buffer, const char *title, const char *pidfile, const char *format, const char *format_down); void print_path_exists(yajl_gen json_gen, char *buffer, const char *title, const char *path, const char *format, const char *format_down); void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const char *path, const char *format, const char *format_above_threshold, int); diff --git a/man/i3status.man b/man/i3status.man index a36c853..c2849c3 100644 --- a/man/i3status.man +++ b/man/i3status.man @@ -306,7 +306,8 @@ There also is an option "format_down". You can hide the output with Gets the link quality, frequency and ESSID of the given wireless network interface. You can specify different format strings for the network being connected or not connected. The quality is padded with leading zeroes by -default; to pad with something else use +format_quality+. +default; to pad with something else use +format_bitrate+, +format_noise+, ++format_quality+ or +format_signal+. The special interface name `_first_` will be replaced by the first wireless network interface found on the system (excluding devices starting with "lo"). @@ -317,8 +318,14 @@ network interface found on the system (excluding devices starting with "lo"). *Example format_down*: +W: down+ +*Example format_bitrate*: +"%g %cb/s"+ + +*Example format_noise*: +"%03d%s"+ + *Example format_quality*: +"%03d%s"+ +*Example format_signal*: +"%03d%s"+ + === Ethernet Gets the IP address and (if possible) the link speed of the given ethernet diff --git a/src/print_wireless_info.c b/src/print_wireless_info.c index c6df4cb..49421bb 100644 --- a/src/print_wireless_info.c +++ b/src/print_wireless_info.c @@ -97,7 +97,7 @@ typedef struct { #ifdef __linux__ // Like iw_print_bitrate, but without the dependency on libiw. -static void print_bitrate(char *buffer, int buflen, int bitrate) { +static void print_bitrate(char *buffer, int buflen, int bitrate, const char *format_bitrate) { const int kilo = 1e3; const int mega = 1e6; const int giga = 1e9; @@ -116,7 +116,7 @@ static void print_bitrate(char *buffer, int buflen, int bitrate) { scale = 'k'; divisor = kilo; } - snprintf(buffer, buflen, "%g %cb/s", rate / divisor, scale); + snprintf(buffer, buflen, format_bitrate, rate / divisor, scale); } // Based on NetworkManager/src/platform/wifi/wifi-utils-nl80211.c @@ -491,7 +491,7 @@ error1: * | 127.0.0.1 | no IP | IPv4 | ok | * | 127.0.0.1 | ::1/128 | IPv4 | ok | */ -void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down, const char *format_quality) { +void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down, const char *format_bitrate, const char *format_noise, const char *format_quality, const char *format_signal) { const char *walk; char *outwalk = buffer; wireless_info_t info; @@ -560,7 +560,7 @@ void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, } else if (BEGINS_WITH(walk + 1, "signal")) { if (info.flags & WIRELESS_INFO_FLAG_HAS_SIGNAL) { if (info.signal_level_max) - outwalk += sprintf(outwalk, "%3d%s", PERCENT_VALUE(info.signal_level, info.signal_level_max), pct_mark); + outwalk += sprintf(outwalk, format_signal, PERCENT_VALUE(info.signal_level, info.signal_level_max), pct_mark); else outwalk += sprintf(outwalk, "%d dBm", info.signal_level); } else { @@ -571,7 +571,7 @@ void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, } else if (BEGINS_WITH(walk + 1, "noise")) { if (info.flags & WIRELESS_INFO_FLAG_HAS_NOISE) { if (info.noise_level_max) - outwalk += sprintf(outwalk, "%3d%s", PERCENT_VALUE(info.noise_level, info.noise_level_max), pct_mark); + outwalk += sprintf(outwalk, format_noise, PERCENT_VALUE(info.noise_level, info.noise_level_max), pct_mark); else outwalk += sprintf(outwalk, "%d dBm", info.noise_level); } else { @@ -603,7 +603,7 @@ void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, else if (BEGINS_WITH(walk + 1, "bitrate")) { char br_buffer[128]; - print_bitrate(br_buffer, sizeof(br_buffer), info.bitrate); + print_bitrate(br_buffer, sizeof(br_buffer), info.bitrate, format_bitrate); outwalk += sprintf(outwalk, "%s", br_buffer); walk += strlen("bitrate");