]> git.sur5r.net Git - i3/i3status/commitdiff
Eat unnecessary space from the battery format str.
authorPiotr Domagalski <piotr@domagalski.com>
Tue, 28 Aug 2012 20:07:33 +0000 (22:07 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 31 Aug 2012 10:08:24 +0000 (12:08 +0200)
If the battery is not discharging it may be not possible to give information on
remaining time or consumption. The resulting strings (%remaining, %consumption,
%emptytime) are empty then. But because they are in the format string, the
output string contains unnecessary spaces in this case.

This commit makes i3status strip these spaces.

src/print_battery_info.c

index 202d9bb43c20bf3b5ee47d29e9a635d9a4b6db61..4fbf4116b61821f1407ec17ac05ec32a660cd67d 100644 (file)
@@ -1,4 +1,5 @@
 // vim:ts=8:expandtab
+#include <ctype.h>
 #include <time.h>
 #include <string.h>
 #include <stdlib.h>
@@ -266,6 +267,16 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                       (charging ? "(CHR)" : apm_info.minutes_left));
 #endif
 
+#define EAT_SPACE_FROM_OUTPUT_IF_EMPTY(_buf) \
+        do { \
+                if (strlen(_buf) == 0) { \
+                        if (outwalk > buffer && isspace(outwalk[-1])) \
+                                outwalk--; \
+                        else if (isspace(*(walk+1))) \
+                                walk++; \
+                } \
+        } while (0)
+
         for (walk = format; *walk != '\0'; walk++) {
                 if (*walk != '%') {
                         *(outwalk++) = *walk;
@@ -281,12 +292,15 @@ void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char
                 } else if (strncmp(walk+1, "remaining", strlen("remaining")) == 0) {
                         outwalk += sprintf(outwalk, "%s", remainingbuf);
                         walk += strlen("remaining");
+                        EAT_SPACE_FROM_OUTPUT_IF_EMPTY(remainingbuf);
                 } else if (strncmp(walk+1, "emptytime", strlen("emptytime")) == 0) {
                         outwalk += sprintf(outwalk, "%s", emptytimebuf);
                         walk += strlen("emptytime");
+                        EAT_SPACE_FROM_OUTPUT_IF_EMPTY(emptytimebuf);
                 } else if (strncmp(walk+1, "consumption", strlen("consumption")) == 0) {
                         outwalk += sprintf(outwalk, "%s", consumptionbuf);
                         walk += strlen("consumption");
+                        EAT_SPACE_FROM_OUTPUT_IF_EMPTY(consumptionbuf);
                 }
         }