Added bitrate_format options to wireless configuration block
Patch status: needinfo
Patch by Enrico Carlesso
To apply this patch, use:
curl http://cr.i3wm.org/patch/673/raw.patch | git am
b/i3status.c
16 |
@@ -146,6 +146,40 @@ static int parse_min_width(cfg_t *context, cfg_opt_t *option, const char *value, |
17 |
} |
18 |
|
19 |
/* |
20 |
+ * Format bitrate with provided formatter. |
21 |
+ * |
22 |
+ * Basically, a clone of iw_print_bitrate, but accepting a format instead of forcing "%g %cb/s" |
23 |
+ * see http://sourcecodebrowser.com/wireless-tools/28/iwlib_8c.html#ad1674f1115db41e1f3405f915c772783 |
24 |
+ * |
25 |
+ */ |
26 |
+void i3_iw_print_bitrate(char *buffer, int buflen, int bitrate, const char *bitrate_format) |
27 |
+{ |
28 |
+ double rate = bitrate; |
29 |
+ char scale; |
30 |
+ int divisor; |
31 |
+ |
32 |
+ if(rate >= GIGA) |
33 |
+ { |
34 |
+ scale = 'G'; |
35 |
+ divisor = GIGA; |
36 |
+ } |
37 |
+ else |
38 |
+ { |
39 |
+ if(rate >= MEGA) |
40 |
+ { |
41 |
+ scale = 'M'; |
42 |
+ divisor = MEGA; |
43 |
+ } |
44 |
+ else |
45 |
+ { |
46 |
+ scale = 'k'; |
47 |
+ divisor = KILO; |
48 |
+ } |
49 |
+ } |
50 |
+ snprintf(buffer, buflen, bitrate_format, rate / divisor, scale); |
51 |
+} |
52 |
+ |
53 |
+/* |
54 |
* Validates a color in "#RRGGBB" format |
55 |
* |
56 |
*/ |
57 |
@@ -292,6 +326,7 @@ int main(int argc, char *argv[]) { |
58 |
cfg_opt_t wireless_opts[] = { |
59 |
CFG_STR("format_up", "W: (%quality at %essid, %bitrate) %ip", CFGF_NONE), |
60 |
CFG_STR("format_down", "W: down", CFGF_NONE), |
61 |
+ CFG_STR("bitrate_format", "%g %c/s", CFGF_NONE), |
62 |
CFG_CUSTOM_ALIGN_OPT, |
63 |
CFG_CUSTOM_COLOR_OPTS, |
64 |
CFG_CUSTOM_MIN_WIDTH_OPT, |
65 |
@@ -576,7 +611,7 @@ int main(int argc, char *argv[]) { |
66 |
|
67 |
CASE_SEC_TITLE("wireless") { |
68 |
SEC_OPEN_MAP("wireless"); |
69 |
- print_wireless_info(json_gen, buffer, title, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down")); |
70 |
+ print_wireless_info(json_gen, buffer, title, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"), cfg_getstr(sec, "bitrate_format")); |
71 |
SEC_CLOSE_MAP; |
72 |
} |
73 |
|
b/include/i3status.h
78 |
@@ -142,6 +142,10 @@ enum { O_DZEN2, O_XMOBAR, O_I3BAR, O_TERM, O_NONE } output_format; |
79 |
} \ |
80 |
} while (0) |
81 |
|
82 |
+#define KILO 1e3 |
83 |
+#define MEGA 1e6 |
84 |
+#define GIGA 1e9 |
85 |
+ |
86 |
|
87 |
typedef enum { CS_DISCHARGING, CS_CHARGING, CS_FULL } charging_status_t; |
88 |
|
89 |
@@ -170,13 +174,14 @@ char *auto_detect_format(); |
90 |
/* src/print_time.c */ |
91 |
void set_timezone(const char *tz); |
92 |
|
93 |
+void i3_iw_print_bitrate(char *buffer, int buflen, int bitrate, const char *bitrate_format); |
94 |
void print_ipv6_info(yajl_gen json_gen, char *buffer, const char *format_up, const char *format_down); |
95 |
void print_disk_info(yajl_gen json_gen, char *buffer, const char *path, const char *format, const char *prefix_type, const char *threshold_type, const double low_threshold); |
96 |
void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, const char *format_down, const char *status_chr, const char *status_bat, const char *status_full, int low_threshold, char *threshold_type, bool last_full_capacity, bool integer_battery_capacity, bool hide_seconds); |
97 |
void print_time(yajl_gen json_gen, char *buffer, const char *format, const char *tz, time_t t); |
98 |
void print_ddate(yajl_gen json_gen, char *buffer, const char *format, time_t t); |
99 |
const char *get_ip_addr(); |
100 |
-void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down); |
101 |
+void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down, const char *bitrate_format); |
102 |
void print_run_watch(yajl_gen json_gen, char *buffer, const char *title, const char *pidfile, const char *format); |
103 |
void print_path_exists(yajl_gen json_gen, char *buffer, const char *title, const char *path, const char *format); |
104 |
void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const char *path, const char *format, int); |
b/man/i3status.man
109 |
@@ -63,6 +63,7 @@ order += "tztime berlin" |
110 |
wireless wlan0 { |
111 |
format_up = "W: (%quality at %essid, %bitrate) %ip" |
112 |
format_down = "W: down" |
113 |
+ bitrate_format = "%g %cb/s" |
114 |
} |
115 |
|
116 |
ethernet eth0 { |
117 |
@@ -272,12 +273,14 @@ something is active, like for example a VPN tunnel managed by NetworkManager. |
118 |
|
119 |
Gets the link quality and ESSID of the given wireless network interface. You |
120 |
can specify different format strings for the network being connected or not |
121 |
-connected. |
122 |
+connected. You can also provide a printf-like format string for bitrate. |
123 |
|
124 |
*Example order*: +wireless wlan0+ |
125 |
|
126 |
*Example format*: +W: (%quality at %essid, %bitrate) %ip+ |
127 |
|
128 |
+*Example bitrate format*: +%g %cb/s+ |
129 |
+ |
130 |
=== Ethernet |
131 |
|
132 |
Gets the IP address and (if possible) the link speed of the given ethernet |
b/src/print_wireless_info.c
137 |
@@ -320,7 +320,7 @@ static int get_wireless_info(const char *interface, wireless_info_t *info) { |
138 |
return 0; |
139 |
} |
140 |
|
141 |
-void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down) { |
142 |
+void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down, const char *bitrate_format) { |
143 |
const char *walk; |
144 |
char *outwalk = buffer; |
145 |
wireless_info_t info; |
146 |
@@ -404,7 +404,7 @@ void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, |
147 |
if (BEGINS_WITH(walk+1, "bitrate")) { |
148 |
char br_buffer[128]; |
149 |
|
150 |
- iw_print_bitrate(br_buffer, sizeof(br_buffer), info.bitrate); |
151 |
+ i3_iw_print_bitrate(br_buffer, sizeof(br_buffer), info.bitrate, bitrate_format); |
152 |
|
153 |
outwalk += sprintf(outwalk, "%s", br_buffer); |
154 |
walk += strlen("bitrate"); |