| 
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -36,9 +36,8 @@ static void paste(void); | 
															
														
														
													
														
															
																 | 
																 | 
																static void readstdin(void); | 
																 | 
																 | 
																static void readstdin(void); | 
															
														
														
													
														
															
																 | 
																 | 
																static void run(void); | 
																 | 
																 | 
																static void run(void); | 
															
														
														
													
														
															
																 | 
																 | 
																static void setup(void); | 
																 | 
																 | 
																static void setup(void); | 
															
														
														
													
														
															
																 | 
																 | 
																static void usage(void); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																static char text[BUFSIZ]; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static char text[BUFSIZ] = ""; | 
															
														
														
													
														
															
																 | 
																 | 
																static int bh, mw, mh; | 
																 | 
																 | 
																static int bh, mw, mh; | 
															
														
														
													
														
															
																 | 
																 | 
																static int inputw = 0; | 
																 | 
																 | 
																static int inputw = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																static int lines = 0; | 
																 | 
																 | 
																static int lines = 0; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -79,7 +78,7 @@ main(int argc, char *argv[]) { | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strcmp(argv[i], "-i")) | 
																 | 
																 | 
																		else if(!strcmp(argv[i], "-i")) | 
															
														
														
													
														
															
																 | 
																 | 
																			fstrncmp = strncasecmp; | 
																 | 
																 | 
																			fstrncmp = strncasecmp; | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(i == argc-1) | 
																 | 
																 | 
																		else if(i == argc-1) | 
															
														
														
													
														
															
																 | 
																 | 
																			usage(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			goto usage; | 
															
														
														
													
														
															
																 | 
																 | 
																		/* double flags */ | 
																 | 
																 | 
																		/* double flags */ | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strcmp(argv[i], "-l")) | 
																 | 
																 | 
																		else if(!strcmp(argv[i], "-l")) | 
															
														
														
													
														
															
																 | 
																 | 
																			lines = atoi(argv[++i]); | 
																 | 
																 | 
																			lines = atoi(argv[++i]); | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -98,15 +97,19 @@ main(int argc, char *argv[]) { | 
															
														
														
													
														
															
																 | 
																 | 
																		else if(!strcmp(argv[i], "-sf")) | 
																 | 
																 | 
																		else if(!strcmp(argv[i], "-sf")) | 
															
														
														
													
														
															
																 | 
																 | 
																			selfgcolor = argv[++i]; | 
																 | 
																 | 
																			selfgcolor = argv[++i]; | 
															
														
														
													
														
															
																 | 
																 | 
																		else | 
																 | 
																 | 
																		else | 
															
														
														
													
														
															
																 | 
																 | 
																			usage(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			goto usage; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	dc = initdc(); | 
																 | 
																 | 
																	dc = initdc(); | 
															
														
														
													
														
															
																 | 
																 | 
																	initfont(dc, font); | 
																 | 
																 | 
																	initfont(dc, font); | 
															
														
														
													
														
															
																 | 
																 | 
																	readstdin(); | 
																 | 
																 | 
																	readstdin(); | 
															
														
														
													
														
															
																 | 
																 | 
																	setup(); | 
																 | 
																 | 
																	setup(); | 
															
														
														
													
														
															
																 | 
																 | 
																	run(); | 
																 | 
																 | 
																	run(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	return EXIT_FAILURE; | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	return EXIT_FAILURE;  /* should not reach */ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																usage: | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	fputs("usage: dmenu [-b] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n" | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	      "             [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	return EXIT_FAILURE; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																void | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -223,7 +226,7 @@ keypress(XKeyEvent *ev) { | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	len = strlen(text); | 
																 | 
																 | 
																	len = strlen(text); | 
															
														
														
													
														
															
																 | 
																 | 
																	XLookupString(ev, buf, sizeof buf, &ksym, NULL); | 
																 | 
																 | 
																	XLookupString(ev, buf, sizeof buf, &ksym, NULL); | 
															
														
														
													
														
															
																 | 
																 | 
																	if(ev->state & ControlMask) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if(ev->state & ControlMask) | 
															
														
														
													
														
															
																 | 
																 | 
																		switch(tolower(ksym)) { | 
																 | 
																 | 
																		switch(tolower(ksym)) { | 
															
														
														
													
														
															
																 | 
																 | 
																		default: | 
																 | 
																 | 
																		default: | 
															
														
														
													
														
															
																 | 
																 | 
																			return; | 
																 | 
																 | 
																			return; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -277,7 +280,6 @@ keypress(XKeyEvent *ev) { | 
															
														
														
													
														
															
																 | 
																 | 
																			XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime); | 
																 | 
																 | 
																			XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime); | 
															
														
														
													
														
															
																 | 
																 | 
																			return; | 
																 | 
																 | 
																			return; | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	switch(ksym) { | 
																 | 
																 | 
																	switch(ksym) { | 
															
														
														
													
														
															
																 | 
																 | 
																	default: | 
																 | 
																 | 
																	default: | 
															
														
														
													
														
															
																 | 
																 | 
																		if(!iscntrl(*buf)) | 
																 | 
																 | 
																		if(!iscntrl(*buf)) | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -341,7 +343,6 @@ keypress(XKeyEvent *ev) { | 
															
														
														
													
														
															
																 | 
																 | 
																	case XK_Return: | 
																 | 
																 | 
																	case XK_Return: | 
															
														
														
													
														
															
																 | 
																 | 
																	case XK_KP_Enter: | 
																 | 
																 | 
																	case XK_KP_Enter: | 
															
														
														
													
														
															
																 | 
																 | 
																		fputs((sel && !(ev->state & ShiftMask)) ? sel->text : text, stdout); | 
																 | 
																 | 
																		fputs((sel && !(ev->state & ShiftMask)) ? sel->text : text, stdout); | 
															
														
														
													
														
															
																 | 
																 | 
																		fflush(stdout); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		exit(EXIT_SUCCESS); | 
																 | 
																 | 
																		exit(EXIT_SUCCESS); | 
															
														
														
													
														
															
																 | 
																 | 
																	case XK_Right: | 
																 | 
																 | 
																	case XK_Right: | 
															
														
														
													
														
															
																 | 
																 | 
																		if(cursor < len) { | 
																 | 
																 | 
																		if(cursor < len) { | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -403,7 +404,7 @@ match(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																		else | 
																 | 
																 | 
																		else | 
															
														
														
													
														
															
																 | 
																 | 
																			matches = lsubstr; | 
																 | 
																 | 
																			matches = lsubstr; | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																	curr = prev = next = sel = matches; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	curr = sel = matches; | 
															
														
														
													
														
															
																 | 
																 | 
																	calcoffsets(); | 
																 | 
																 | 
																	calcoffsets(); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -438,11 +439,10 @@ readstdin(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	for(end = &items; fgets(buf, sizeof buf, stdin); *end = item, end = &item->next) { | 
																 | 
																 | 
																	for(end = &items; fgets(buf, sizeof buf, stdin); *end = item, end = &item->next) { | 
															
														
														
													
														
															
																 | 
																 | 
																		if((p = strchr(buf, '\n'))) | 
																 | 
																 | 
																		if((p = strchr(buf, '\n'))) | 
															
														
														
													
														
															
																 | 
																 | 
																			*p = '\0'; | 
																 | 
																 | 
																			*p = '\0'; | 
															
														
														
													
														
															
																 | 
																 | 
																		if(!(item = malloc(sizeof *item))) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if(!(item = calloc(1, sizeof *item))) | 
															
														
														
													
														
															
																 | 
																 | 
																			eprintf("cannot malloc %u bytes\n", sizeof *item); | 
																 | 
																 | 
																			eprintf("cannot malloc %u bytes\n", sizeof *item); | 
															
														
														
													
														
															
																 | 
																 | 
																		if(!(item->text = strdup(buf))) | 
																 | 
																 | 
																		if(!(item->text = strdup(buf))) | 
															
														
														
													
														
															
																 | 
																 | 
																			eprintf("cannot strdup %u bytes\n", strlen(buf)+1); | 
																 | 
																 | 
																			eprintf("cannot strdup %u bytes\n", strlen(buf)+1); | 
															
														
														
													
														
															
																 | 
																 | 
																		item->next = item->left = item->right = NULL; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		inputw = MAX(inputw, textw(dc, item->text)); | 
																 | 
																 | 
																		inputw = MAX(inputw, textw(dc, item->text)); | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -530,13 +530,5 @@ setup(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	inputw = MIN(inputw, mw/3); | 
																 | 
																 | 
																	inputw = MIN(inputw, mw/3); | 
															
														
														
													
														
															
																 | 
																 | 
																	promptw = prompt ? textw(dc, prompt) : 0; | 
																 | 
																 | 
																	promptw = prompt ? textw(dc, prompt) : 0; | 
															
														
														
													
														
															
																 | 
																 | 
																	XMapRaised(dc->dpy, win); | 
																 | 
																 | 
																	XMapRaised(dc->dpy, win); | 
															
														
														
													
														
															
																 | 
																 | 
																	text[0] = '\0'; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	match(); | 
																 | 
																 | 
																	match(); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																void | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																usage(void) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	fputs("usage: dmenu [-b] [-i] [-l lines] [-m monitor] [-p prompt] [-fn font]\n" | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	      "             [-nb color] [-nf color] [-sb color] [-sf color] [-v]\n", stderr); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	exit(EXIT_FAILURE); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																 |