diff options
| -rw-r--r-- | main.c | 27 | 
1 files changed, 17 insertions, 10 deletions
| @@ -108,6 +108,13 @@ drawmenu(void) {  	XFlush(dpy);  } +static void +grabkeyboard(void) { +	while(XGrabKeyboard(dpy, root, True, GrabModeAsync, +			 GrabModeAsync, CurrentTime) != GrabSuccess) +		usleep(1000); +} +  static unsigned long  initcolor(const char *colstr) {  	Colormap cmap = DefaultColormap(dpy, screen); @@ -418,12 +425,6 @@ main(int argc, char *argv[]) {  	XModifierKeymap *modmap;  	XSetWindowAttributes wa; -	if(argc == 2 && !strncmp("-v", argv[1], 3)) -		eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n"); -	else if(isatty(STDIN_FILENO)) { -		fputs("error: dmenu can't run in an interactive shell\n", stdout); -		usage(); -	}  	/* command line args */  	for(i = 1; i < argc; i++)  		if(!strncmp(argv[i], "-b", 3)) { @@ -447,6 +448,8 @@ main(int argc, char *argv[]) {  		else if(!strncmp(argv[i], "-sf", 4)) {  			if(++i < argc) selfg = argv[i];  		} +		else if(!strncmp(argv[i], "-v", 3)) +			eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n");  		else  			usage();  	setlocale(LC_CTYPE, ""); @@ -455,10 +458,14 @@ main(int argc, char *argv[]) {  		eprint("dmenu: cannot open display\n");  	screen = DefaultScreen(dpy);  	root = RootWindow(dpy, screen); -	while(XGrabKeyboard(dpy, root, True, GrabModeAsync, -			 GrabModeAsync, CurrentTime) != GrabSuccess) -		usleep(1000); -	maxname = readstdin(); +	if(isatty(STDIN_FILENO)) { +		maxname = readstdin(); +		grabkeyboard(); +	} +	else { /* prevent keypress loss */ +		grabkeyboard(); +		maxname = readstdin(); +	}  	/* init modifier map */  	modmap = XGetModifierMapping(dpy);  	for (i = 0; i < 8; i++) { | 
