From cedca7b8b843413217b399ea1323c727994237ce Mon Sep 17 00:00:00 2001 From: clsr Date: Thu, 9 Aug 2018 18:18:44 +0200 Subject: Add exact sleep --- config.def.mk | 14 +++++++++++--- dwmclock.c | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/config.def.mk b/config.def.mk index 1860aaf..4265c82 100644 --- a/config.def.mk +++ b/config.def.mk @@ -6,20 +6,26 @@ CFLAGS+=-DBATTERY # set this to the correct path for your current system CFLAGS+=-DENERGY_FULL=\"/sys/class/power_supply/BAT0/energy_full\" CFLAGS+=-DENERGY_NOW=\"/sys/class/power_supply/BAT0/energy_now\" -CFLAGS+=-DSTATUS=\"/sys/class/power_supply/BAT0/status\" +CFLAGS+=-DSTATUS=\"/sys/class/power_supply/ADP1/online\" + # the string to match when the battery is charging; comment out to disable charging detection -CFLAGS+=-DCHARGING=\"Charging\\n\" +CFLAGS+=-DCHARGING=\"1\\n\" # possible alternative on some systems #CFLAGS+=-DENERGY_FULL=\"/sys/class/power_supply/BAT0/charge_full\" #CFLAGS+=-DENERGY_NOW=\"/sys/class/power_supply/BAT0/charge_now\" +#CFLAGS+=-DSTATUS=\"/sys/class/power_supply/BAT0/status\" +#CFLAGS+=-DCHARGING=\"Charging\\n\" # every how many seconds to refresh the battery charge display -CFLAGS+=-DBAT_REFRESH_SECONDS=60 +CFLAGS+=-DBAT_REFRESH_SECONDS=10 # this is here for legacy reasons, ignore it CFLAGS+=-DMUL=1 +# sleep to the start of the next second instead of for 1s +CFLAGS+=-DEXACT_SLEEP + # make settings @@ -33,3 +39,5 @@ LDFLAGS+=$(shell pkg-config --libs x11) # default paths DESTDIR?=/ PREFIX?=/usr/local +#DESTDIR?=~ +#PREFIX?=/local diff --git a/dwmclock.c b/dwmclock.c index e7fd938..b409555 100644 --- a/dwmclock.c +++ b/dwmclock.c @@ -62,6 +62,9 @@ void handler(int sig) int main(void) { +#ifdef EXACT_SLEEP + struct timespec ts; +#endif /* EXACT_SLEEP */ struct tm *tm; time_t now; #ifdef BATTERY @@ -128,13 +131,25 @@ int main(void) perc[7] = ' '; #endif /* BATTERY */ +#ifdef EXACT_SLEEP + clock_gettime(CLOCK_REALTIME, &ts); + now = ts.tv_sec; +#else now = time(NULL); +#endif /* EXACT_SLEEP */ tm = localtime(&now); strftime(clock, 9, "%H:%M:%S", tm); XStoreName(disp, root, name); XFlush(disp); + +#ifdef EXACT_SLEEP + ts.tv_sec = 0; + ts.tv_nsec = 1000000000 - ts.tv_nsec; + nanosleep(&ts, NULL); +#else sleep(1); +#endif /* EXACT_SLEEP */ } XCloseDisplay(disp); -- cgit