]> git.sur5r.net Git - i3/i3status/commitdiff
bugfix: colorize output even without discharge rate (thanks f8l)
authorSimon Elsbrock <simon@iodev.org>
Tue, 16 Oct 2012 20:45:19 +0000 (22:45 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 16 Oct 2012 20:49:22 +0000 (22:49 +0200)
On some systems, the discharge rate may be missing, although the battery
is still working. This leads to an edge case on Linux systems in which
the output may not be colorized although a threshold was defined.

This commit fixes the behavior by colorizing output if threshold_type is
set to "percentage". Since we cannot calculate remaining time without
discharge rate, output is still uncolorized in case of threshold_type
set to "time".

src/print_battery_info.c

index 68785403c953322a31825456020c6b21ec9c34cd..ae113487a61f693544d82764758e62babf769b9f 100644 (file)
@@ -157,6 +157,8 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                                 && seconds_remaining < 60 * low_threshold) {
                                 START_COLOR("color_bad");
                                 colorful_output = true;
+                        } else {
+                            colorful_output = false;
                         }
                 }
 
@@ -172,9 +174,17 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
 
                 (void)snprintf(consumptionbuf, sizeof(consumptionbuf), "%1.2fW",
                         ((float)present_rate / 1000.0 / 1000.0));
-
-                if (colorful_output)
-                    END_COLOR;
+        } else {
+                /* On some systems, present_rate may not exist. Still, make sure
+                 * we colorize the output if threshold_type is set to percentage
+                 * (since we don't have any information on remaining time). */
+                if (status == CS_DISCHARGING && low_threshold > 0) {
+                        if (strncmp(threshold_type, "percentage", strlen(threshold_type)) == 0
+                                && percentage_remaining < low_threshold) {
+                                START_COLOR("color_bad");
+                                colorful_output = true;
+                        }
+                }
         }
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
         int state;
@@ -323,5 +333,8 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                 }
         }
 
+        if (colorful_output)
+                END_COLOR;
+
         OUTPUT_FULL_TEXT(buffer);
 }