commit 6f643150831f5a2c3c98e3d41c47d1ea43cb40fa Author: Alexander Weidinger Date: Sat Nov 11 15:16:34 2017 +0100 Initial version of dwmst. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..499faa1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +dwmst diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..459a8b3 --- /dev/null +++ b/Makefile @@ -0,0 +1,5 @@ +all: + gcc -o dwmst -lX11 dwmst.c + +clean: + rm -f dwmst diff --git a/dwmst.c b/dwmst.c new file mode 100644 index 0000000..b2264b9 --- /dev/null +++ b/dwmst.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include + +#define INTERVAL 10 + +int main(void) { + Display *display = XOpenDisplay(NULL); + if (display == NULL) { + fprintf(stderr, "dwmst: cannot open display.\n"); + } + + /* time */ + char tbuffer[128] = { 0 }; + time_t currentTime; + struct tm *timeinfo; + + /* battery */ + char bbuffer[6] = { 0 }; + FILE *f; + + /* status */ + char status[256] = { 0 }; + + for (;;sleep(INTERVAL)) { + /* get current time */ + time(¤tTime); + timeinfo = localtime(¤tTime); + + strftime(tbuffer, sizeof(tbuffer), "%a %b %d %H:%M", timeinfo); + + /* battery status */ + f = fopen("/sys/class/power_supply/BAT0/capacity", "r"); + if (f == NULL) { + fprintf(stderr, "dwmst: cannot access battery.\n"); + } else { + fgets(bbuffer, 4, f); + strtok(bbuffer, "\n"); /* remove trailing white space */ + strcat(bbuffer, "%"); + } + fclose(f); + + f = fopen("/sys/class/power_supply/BAT0/status", "r"); + if (f == NULL) { + fprintf(stderr, "dwmst: cannot access battery.\n"); + } else { + switch(getc(f)) { + case 'D': /* Discharging */ + strcat(bbuffer, "-"); + break; + case 'C': /* Charging */ + strcat(bbuffer, "+"); + break; + case 'F': /* Full */ + strcat(bbuffer, "="); + } + } + fclose(f); + + /* build status */ + sprintf(status, "%s | %s", tbuffer, bbuffer); + + /* store root window name */ + XStoreName(display, DefaultRootWindow(display), status); + XSync(display, False); + } +}