summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPiotr Domagalski <piotr@domagalski.com>2012-08-28 22:07:33 +0200
committerMichael Stapelberg <michael@stapelberg.de>2012-08-31 12:08:24 +0200
commitfa4e9cdfb3147fbcfb9e42067a49652d0a0d7456 (patch)
treebeacee945f35d28e166f4a6b8f858930230ca218 /src
parent68f438ec9eefbca5d735a1a7897d52e0e8e6f1c7 (diff)
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.
Diffstat (limited to 'src')
-rw-r--r--src/print_battery_info.c14
1 files changed, 14 insertions, 0 deletions
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 <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);
}
}