dwm-meillo

diff main.c @ 59:5d4653de9a1c

implemented dwm reading status text from stdin
author Anselm R. Garbe <garbeam@wmii.de>
date Fri, 14 Jul 2006 11:57:33 +0200
parents 1269bd127551
children 24f9c674d03f
line diff
     1.1 --- a/main.c	Fri Jul 14 10:34:07 2006 +0200
     1.2 +++ b/main.c	Fri Jul 14 11:57:33 2006 +0200
     1.3 @@ -3,10 +3,12 @@
     1.4   * See LICENSE file for license details.
     1.5   */
     1.6  
     1.7 +#include <errno.h>
     1.8  #include <stdarg.h>
     1.9  #include <stdio.h>
    1.10  #include <stdlib.h>
    1.11  #include <string.h>
    1.12 +#include <unistd.h>
    1.13  
    1.14  #include <X11/cursorfont.h>
    1.15  #include <X11/Xatom.h>
    1.16 @@ -19,7 +21,6 @@
    1.17  char *tags[TLast] = {
    1.18  	[Tscratch] = "scratch",
    1.19  	[Tdev] = "dev",
    1.20 -	[Tirc] = "irc",
    1.21  	[Twww] = "www",
    1.22  	[Twork] = "work",
    1.23  };
    1.24 @@ -185,13 +186,13 @@
    1.25  int
    1.26  main(int argc, char *argv[])
    1.27  {
    1.28 -	int i;
    1.29 +	int i, n;
    1.30 +	fd_set rd;
    1.31  	XSetWindowAttributes wa;
    1.32  	unsigned int mask;
    1.33  	Window w;
    1.34  	XEvent ev;
    1.35  
    1.36 -	/* command line args */
    1.37  	for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
    1.38  		switch (argv[i][1]) {
    1.39  		case 'v':
    1.40 @@ -278,10 +279,31 @@
    1.41  	scan_wins();
    1.42  	draw_bar();
    1.43  
    1.44 +	/* main event loop, reads status text from stdin as well */
    1.45  	while(running) {
    1.46 -		XNextEvent(dpy, &ev);
    1.47 -		if(handler[ev.type])
    1.48 -			(handler[ev.type])(&ev); /* call handler */
    1.49 +		FD_ZERO(&rd);
    1.50 +		FD_SET(0, &rd);
    1.51 +		FD_SET(ConnectionNumber(dpy), &rd);
    1.52 +
    1.53 +		i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
    1.54 +		if(i == -1 && errno == EINTR)
    1.55 +			continue;
    1.56 +		if(i < 0)
    1.57 +			error("select failed\n");
    1.58 +		else if(i > 0) {
    1.59 +			if(FD_ISSET(ConnectionNumber(dpy), &rd) && XPending(dpy) > 0) {
    1.60 +				XNextEvent(dpy, &ev);
    1.61 +				if(handler[ev.type])
    1.62 +					(handler[ev.type])(&ev); /* call handler */
    1.63 +			}
    1.64 +			if(FD_ISSET(0, &rd)) {
    1.65 +				i = n = 0;
    1.66 +				while((i = getchar()) != '\n' && n < sizeof(stext) - 1)
    1.67 +					stext[n++] = i;
    1.68 +				stext[n] = 0;
    1.69 +				draw_bar();
    1.70 +			}
    1.71 +		}
    1.72  	}
    1.73  
    1.74  	cleanup();