diff -up dwm-5.0.1/config.mk dwm-5.0.1-clock/config.mk --- config.mk 2008-06-19 11:11:38.000000000 +0300 +++ config.mk 2008-07-10 17:57:48.000000000 +0300 @@ -16,7 +16,7 @@ XINERAMAFLAGS = -DXINERAMA # includes and libs INCS = -I. -I/usr/include -I${X11INC} -LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 ${XINERAMALIBS} +LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 ${XINERAMALIBS} -lpthread # flags CPPFLAGS = -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} diff -up dwm-5.0.1/dwm.c dwm-5.0.1-clock/dwm.c --- dwm.c 2008-06-19 11:11:38.000000000 +0300 +++ dwm.c 2008-07-10 17:58:27.000000000 +0300 @@ -239,6 +239,7 @@ static Layout *lt = NULL; static Window root, barwin; /* configuration, allows nested code to access above variables */ #include "config.h" +#include "clock.c" /* compile-time check if all tags fit into an uint bit array. */ struct NumTags { char limitexceeded[sizeof(uint) * 8 < LENGTH(tags) ? -1 : 1]; }; @@ -1370,6 +1371,7 @@ setup(void) { XDefineCursor(dpy, barwin, cursor[CurNormal]); XMapRaised(dpy, barwin); strcpy(stext, "dwm-"VERSION); + clock_init(); drawbar(); /* EWMH support per view */ --- /dev/null 2008-06-29 22:46:41.000000000 +0300 +++ clock.c 2008-07-10 17:59:51.000000000 +0300 @@ -0,0 +1,40 @@ +#include +#include +#include + +#define SHOWSECONDS + +#ifdef SHOWSECONDS +# define TIMEFMT "%d %b %T" +# define SLEEPDELAY 1000000 +#else +# define TIMEFMT "%d %b %R" +# define SLEEPDELAY 60000000 +#endif + +void * +clock_run(void * arg) +{ + time_t t; + struct tm ctm; + char buf[256]; + + while(1) + { + t = time(NULL); + localtime_r(&t, &ctm); + strftime(buf, 256, TIMEFMT, &ctm); + strcpy(stext, buf); + usleep(SLEEPDELAY); + drawbar(); + } + return NULL; +} + +void +clock_init(void) +{ + pthread_t thread; + pthread_create(&thread, NULL, clock_run, NULL); + pthread_setschedprio(thread, 100); +} +