diff -r 1269bd127551 -r 5d4653de9a1c main.c --- a/main.c Fri Jul 14 10:34:07 2006 +0200 +++ b/main.c Fri Jul 14 11:57:33 2006 +0200 @@ -3,10 +3,12 @@ * See LICENSE file for license details. */ +#include #include #include #include #include +#include #include #include @@ -19,7 +21,6 @@ char *tags[TLast] = { [Tscratch] = "scratch", [Tdev] = "dev", - [Tirc] = "irc", [Twww] = "www", [Twork] = "work", }; @@ -185,13 +186,13 @@ int main(int argc, char *argv[]) { - int i; + int i, n; + fd_set rd; XSetWindowAttributes wa; unsigned int mask; Window w; XEvent ev; - /* command line args */ for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) { switch (argv[i][1]) { case 'v': @@ -278,10 +279,31 @@ scan_wins(); draw_bar(); + /* main event loop, reads status text from stdin as well */ while(running) { - XNextEvent(dpy, &ev); - if(handler[ev.type]) - (handler[ev.type])(&ev); /* call handler */ + FD_ZERO(&rd); + FD_SET(0, &rd); + FD_SET(ConnectionNumber(dpy), &rd); + + i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0); + if(i == -1 && errno == EINTR) + continue; + if(i < 0) + error("select failed\n"); + else if(i > 0) { + if(FD_ISSET(ConnectionNumber(dpy), &rd) && XPending(dpy) > 0) { + XNextEvent(dpy, &ev); + if(handler[ev.type]) + (handler[ev.type])(&ev); /* call handler */ + } + if(FD_ISSET(0, &rd)) { + i = n = 0; + while((i = getchar()) != '\n' && n < sizeof(stext) - 1) + stext[n++] = i; + stext[n] = 0; + draw_bar(); + } + } } cleanup();