| 
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -10,8 +10,6 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																#include <stdio.h> | 
																 | 
																 | 
																#include <stdio.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#include <string.h> | 
																 | 
																 | 
																#include <string.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#include <unistd.h> | 
																 | 
																 | 
																#include <unistd.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#include <sys/select.h> | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																#include <sys/time.h> | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																#include <X11/Xutil.h> | 
																 | 
																 | 
																#include <X11/Xutil.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#include <X11/keysym.h> | 
																 | 
																 | 
																#include <X11/keysym.h> | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -457,6 +455,12 @@ readstdin(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	return maxname; | 
																 | 
																 | 
																	return maxname; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static void | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																usage(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	eprint("usage: dmenu [-b] [-fn <font>] [-nb <color>] [-nf <color>]\n" | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		"             [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																/* extern */ | 
																 | 
																 | 
																/* extern */ | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																int screen; | 
																 | 
																 | 
																int screen; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -472,16 +476,16 @@ main(int argc, char *argv[]) { | 
															
														
														
													
														
															
																 | 
																 | 
																	char *normfg = NORMFGCOLOR; | 
																 | 
																 | 
																	char *normfg = NORMFGCOLOR; | 
															
														
														
													
														
															
																 | 
																 | 
																	char *selbg = SELBGCOLOR; | 
																 | 
																 | 
																	char *selbg = SELBGCOLOR; | 
															
														
														
													
														
															
																 | 
																 | 
																	char *selfg = SELFGCOLOR; | 
																 | 
																 | 
																	char *selfg = SELFGCOLOR; | 
															
														
														
													
														
															
																 | 
																 | 
																	fd_set rd; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	int i, j; | 
																 | 
																 | 
																	int i, j; | 
															
														
														
													
														
															
																 | 
																 | 
																	struct timeval timeout; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	Item *itm; | 
																 | 
																 | 
																	Item *itm; | 
															
														
														
													
														
															
																 | 
																 | 
																	XEvent ev; | 
																 | 
																 | 
																	XEvent ev; | 
															
														
														
													
														
															
																 | 
																 | 
																	XModifierKeymap *modmap; | 
																 | 
																 | 
																	XModifierKeymap *modmap; | 
															
														
														
													
														
															
																 | 
																 | 
																	XSetWindowAttributes wa; | 
																 | 
																 | 
																	XSetWindowAttributes wa; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	timeout.tv_usec = 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	timeout.tv_sec = 3; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(isatty(STDIN_FILENO)) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		fputs("error: dmenu can't run in an interactive shell\n", stdout); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		usage(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																	/* command line args */ | 
																 | 
																 | 
																	/* command line args */ | 
															
														
														
													
														
															
																 | 
																 | 
																	for(i = 1; i < argc; i++) | 
																 | 
																 | 
																	for(i = 1; i < argc; i++) | 
															
														
														
													
														
															
																 | 
																 | 
																		if(!strncmp(argv[i], "-b", 3)) { | 
																 | 
																 | 
																		if(!strncmp(argv[i], "-b", 3)) { | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -505,41 +509,26 @@ main(int argc, char *argv[]) { | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strncmp(argv[i], "-sf", 4)) { | 
																 | 
																 | 
																		else if(!strncmp(argv[i], "-sf", 4)) { | 
															
														
														
													
														
															
																 | 
																 | 
																			if(++i < argc) selfg = argv[i]; | 
																 | 
																 | 
																			if(++i < argc) selfg = argv[i]; | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strncmp(argv[i], "-t", 3)) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			if(++i < argc) timeout.tv_sec = atoi(argv[i]); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strncmp(argv[i], "-v", 3)) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			fputs("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n", stdout); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			exit(EXIT_SUCCESS); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		else if(!strncmp(argv[i], "-v", 3)) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			eprint("dmenu-"VERSION", (C)opyright MMVI-MMVII Anselm R. Garbe\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																		else | 
																 | 
																 | 
																		else | 
															
														
														
													
														
															
																 | 
																 | 
																			eprint("usage: dmenu [-b] [-fn <font>] [-nb <color>] [-nf <color>] [-p <prompt>]\n" | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																				"             [-sb <color>] [-sf <color>] [-t <seconds>] [-v]\n", stdout); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			usage(); | 
															
														
														
													
														
															
																 | 
																 | 
																	setlocale(LC_CTYPE, ""); | 
																 | 
																 | 
																	setlocale(LC_CTYPE, ""); | 
															
														
														
													
														
															
																 | 
																 | 
																	dpy = XOpenDisplay(0); | 
																 | 
																 | 
																	dpy = XOpenDisplay(0); | 
															
														
														
													
														
															
																 | 
																 | 
																	if(!dpy) | 
																 | 
																 | 
																	if(!dpy) | 
															
														
														
													
														
															
																 | 
																 | 
																		eprint("dmenu: cannot open display\n"); | 
																 | 
																 | 
																		eprint("dmenu: cannot open display\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																	screen = DefaultScreen(dpy); | 
																 | 
																 | 
																	screen = DefaultScreen(dpy); | 
															
														
														
													
														
															
																 | 
																 | 
																	root = RootWindow(dpy, screen); | 
																 | 
																 | 
																	root = RootWindow(dpy, screen); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	/* Note, the select() construction allows to grab all keypresses as | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	 * early as possible, to not loose them. But if there is no standard | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	 * input supplied, we will make sure to exit after MAX_WAIT_STDIN | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	 * seconds. This is convenience behavior for rapid typers. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	 */  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	while(XGrabKeyboard(dpy, root, True, GrabModeAsync, | 
																 | 
																 | 
																	while(XGrabKeyboard(dpy, root, True, GrabModeAsync, | 
															
														
														
													
														
															
																 | 
																 | 
																			 GrabModeAsync, CurrentTime) != GrabSuccess) | 
																 | 
																 | 
																			 GrabModeAsync, CurrentTime) != GrabSuccess) | 
															
														
														
													
														
															
																 | 
																 | 
																		usleep(1000); | 
																 | 
																 | 
																		usleep(1000); | 
															
														
														
													
														
															
																 | 
																 | 
																	FD_ZERO(&rd); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	FD_SET(STDIN_FILENO, &rd); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	if(select(ConnectionNumber(dpy) + 1, &rd, NULL, NULL, &timeout) < 1) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		goto UninitializedEnd; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	maxname = readstdin(); | 
																 | 
																 | 
																	maxname = readstdin(); | 
															
														
														
													
														
															
																 | 
																 | 
																	/* init modifier map */ | 
																 | 
																 | 
																	/* init modifier map */ | 
															
														
														
													
														
															
																 | 
																 | 
																	modmap = XGetModifierMapping(dpy); | 
																 | 
																 | 
																	modmap = XGetModifierMapping(dpy); | 
															
														
														
													
														
															
																 | 
																 | 
																	for (i = 0; i < 8; i++) { | 
																 | 
																 | 
																	for (i = 0; i < 8; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																		for (j = 0; j < modmap->max_keypermod; j++) { | 
																 | 
																 | 
																		for (j = 0; j < modmap->max_keypermod; j++) { | 
															
														
														
													
														
															
																 | 
																 | 
																			if(modmap->modifiermap[i * modmap->max_keypermod + j] == XKeysymToKeycode(dpy, XK_Num_Lock)) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			if(modmap->modifiermap[i * modmap->max_keypermod + j] | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			== XKeysymToKeycode(dpy, XK_Num_Lock)) | 
															
														
														
													
														
															
																 | 
																 | 
																				numlockmask = (1 << i); | 
																 | 
																 | 
																				numlockmask = (1 << i); | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -607,7 +596,6 @@ main(int argc, char *argv[]) { | 
															
														
														
													
														
															
																 | 
																 | 
																	XFreePixmap(dpy, dc.drawable); | 
																 | 
																 | 
																	XFreePixmap(dpy, dc.drawable); | 
															
														
														
													
														
															
																 | 
																 | 
																	XFreeGC(dpy, dc.gc); | 
																 | 
																 | 
																	XFreeGC(dpy, dc.gc); | 
															
														
														
													
														
															
																 | 
																 | 
																	XDestroyWindow(dpy, win); | 
																 | 
																 | 
																	XDestroyWindow(dpy, win); | 
															
														
														
													
														
															
																 | 
																 | 
																UninitializedEnd: | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	XUngrabKeyboard(dpy, CurrentTime); | 
																 | 
																 | 
																	XUngrabKeyboard(dpy, CurrentTime); | 
															
														
														
													
														
															
																 | 
																 | 
																	XCloseDisplay(dpy); | 
																 | 
																 | 
																	XCloseDisplay(dpy); | 
															
														
														
													
														
															
																 | 
																 | 
																	return ret; | 
																 | 
																 | 
																	return ret; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																 | 
																
  |