From fa4e9cdfb3147fbcfb9e42067a49652d0a0d7456 Mon Sep 17 00:00:00 2001 From: Piotr Domagalski Date: Tue, 28 Aug 2012 22:07:33 +0200 Subject: [PATCH] Eat unnecessary space from the battery format str. 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 | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/print_battery_info.c b/src/print_battery_info.c index 202d9bb..4fbf411 100644 --- a/src/print_battery_info.c +++ b/src/print_battery_info.c @@ -1,4 +1,5 @@ // vim:ts=8:expandtab +#include #include #include #include @@ -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); } } -- 2.39.5