| 
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -10,7 +10,7 @@ | 
															
														
														
													
														
															
																 | 
																 | 
																#ifdef XINERAMA | 
																 | 
																 | 
																#ifdef XINERAMA | 
															
														
														
													
														
															
																 | 
																 | 
																#include <X11/extensions/Xinerama.h> | 
																 | 
																 | 
																#include <X11/extensions/Xinerama.h> | 
															
														
														
													
														
															
																 | 
																 | 
																#endif | 
																 | 
																 | 
																#endif | 
															
														
														
													
														
															
																 | 
																 | 
																#include <dc.h> | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#include "draw.h" | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																#define INRECT(x,y,rx,ry,rw,rh) ((x) >= (rx) && (x) < (rx)+(rw) && (y) >= (ry) && (y) < (ry)+(rh)) | 
																 | 
																 | 
																#define INRECT(x,y,rx,ry,rw,rh) ((x) >= (rx) && (x) < (rx)+(rw) && (y) >= (ry) && (y) < (ry)+(rh)) | 
															
														
														
													
														
															
																 | 
																 | 
																#define MIN(a,b)                ((a) < (b) ? (a) : (b)) | 
																 | 
																 | 
																#define MIN(a,b)                ((a) < (b) ? (a) : (b)) | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -81,13 +81,13 @@ calcoffsets(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	if(lines > 0) | 
																 | 
																 | 
																	if(lines > 0) | 
															
														
														
													
														
															
																 | 
																 | 
																		n = lines * bh; | 
																 | 
																 | 
																		n = lines * bh; | 
															
														
														
													
														
															
																 | 
																 | 
																	else | 
																 | 
																 | 
																	else | 
															
														
														
													
														
															
																 | 
																 | 
																		n = mw - (promptw + inputw + dc_textw(dc, "<") + dc_textw(dc, ">")); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		n = mw - (promptw + inputw + textw(dc, "<") + textw(dc, ">")); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	for(i = 0, next = curr; next; next = next->right) | 
																 | 
																 | 
																	for(i = 0, next = curr; next; next = next->right) | 
															
														
														
													
														
															
																 | 
																 | 
																		if((i += (lines > 0) ? bh : MIN(dc_textw(dc, next->text), n)) > n) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if((i += (lines > 0) ? bh : MIN(textw(dc, next->text), n)) > n) | 
															
														
														
													
														
															
																 | 
																 | 
																			break; | 
																 | 
																 | 
																			break; | 
															
														
														
													
														
															
																 | 
																 | 
																	for(i = 0, prev = curr; prev && prev->left; prev = prev->left) | 
																 | 
																 | 
																	for(i = 0, prev = curr; prev && prev->left; prev = prev->left) | 
															
														
														
													
														
															
																 | 
																 | 
																		if((i += (lines > 0) ? bh : MIN(dc_textw(dc, prev->left->text), n)) > n) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		if((i += (lines > 0) ? bh : MIN(textw(dc, prev->left->text), n)) > n) | 
															
														
														
													
														
															
																 | 
																 | 
																			break; | 
																 | 
																 | 
																			break; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -99,41 +99,41 @@ drawmenu(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	dc->x = 0; | 
																 | 
																 | 
																	dc->x = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																	dc->y = 0; | 
																 | 
																 | 
																	dc->y = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																	dc->h = bh; | 
																 | 
																 | 
																	dc->h = bh; | 
															
														
														
													
														
															
																 | 
																 | 
																	dc_drawrect(dc, 0, 0, mw, mh, True, BG(dc, normcol)); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	drawrect(dc, 0, 0, mw, mh, True, BG(dc, normcol)); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	if(prompt) { | 
																 | 
																 | 
																	if(prompt) { | 
															
														
														
													
														
															
																 | 
																 | 
																		dc->w = promptw; | 
																 | 
																 | 
																		dc->w = promptw; | 
															
														
														
													
														
															
																 | 
																 | 
																		dc_drawtext(dc, prompt, selcol); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		drawtext(dc, prompt, selcol); | 
															
														
														
													
														
															
																 | 
																 | 
																		dc->x = dc->w; | 
																 | 
																 | 
																		dc->x = dc->w; | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																	dc->w = (lines > 0 || !matches) ? mw - dc->x : inputw; | 
																 | 
																 | 
																	dc->w = (lines > 0 || !matches) ? mw - dc->x : inputw; | 
															
														
														
													
														
															
																 | 
																 | 
																	dc_drawtext(dc, text, normcol); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	if((curpos = dc_textnw(dc, text, cursor) + dc->h/2 - 2) < dc->w) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																		dc_drawrect(dc, curpos, 2, 1, dc->h - 4, True, FG(dc, normcol)); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	drawtext(dc, text, normcol); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if((curpos = textnw(dc, text, cursor) + dc->h/2 - 2) < dc->w) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		drawrect(dc, curpos, 2, 1, dc->h - 4, True, FG(dc, normcol)); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	if(lines > 0) { | 
																 | 
																 | 
																	if(lines > 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																		dc->w = mw - dc->x; | 
																 | 
																 | 
																		dc->w = mw - dc->x; | 
															
														
														
													
														
															
																 | 
																 | 
																		for(item = curr; item != next; item = item->right) { | 
																 | 
																 | 
																		for(item = curr; item != next; item = item->right) { | 
															
														
														
													
														
															
																 | 
																 | 
																			dc->y += dc->h; | 
																 | 
																 | 
																			dc->y += dc->h; | 
															
														
														
													
														
															
																 | 
																 | 
																			dc_drawtext(dc, item->text, (item == sel) ? selcol : normcol); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			drawtext(dc, item->text, (item == sel) ? selcol : normcol); | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																	else if(matches) { | 
																 | 
																 | 
																	else if(matches) { | 
															
														
														
													
														
															
																 | 
																 | 
																		dc->x += inputw; | 
																 | 
																 | 
																		dc->x += inputw; | 
															
														
														
													
														
															
																 | 
																 | 
																		dc->w = dc_textw(dc, "<"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		dc->w = textw(dc, "<"); | 
															
														
														
													
														
															
																 | 
																 | 
																		if(curr->left) | 
																 | 
																 | 
																		if(curr->left) | 
															
														
														
													
														
															
																 | 
																 | 
																			dc_drawtext(dc, "<", normcol); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			drawtext(dc, "<", normcol); | 
															
														
														
													
														
															
																 | 
																 | 
																		for(item = curr; item != next; item = item->right) { | 
																 | 
																 | 
																		for(item = curr; item != next; item = item->right) { | 
															
														
														
													
														
															
																 | 
																 | 
																			dc->x += dc->w; | 
																 | 
																 | 
																			dc->x += dc->w; | 
															
														
														
													
														
															
																 | 
																 | 
																			dc->w = MIN(dc_textw(dc, item->text), mw - dc->x - dc_textw(dc, ">")); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																			dc_drawtext(dc, item->text, (item == sel) ? selcol : normcol); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			dc->w = MIN(textw(dc, item->text), mw - dc->x - textw(dc, ">")); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			drawtext(dc, item->text, (item == sel) ? selcol : normcol); | 
															
														
														
													
														
															
																 | 
																 | 
																		} | 
																 | 
																 | 
																		} | 
															
														
														
													
														
															
																 | 
																 | 
																		dc->w = dc_textw(dc, ">"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		dc->w = textw(dc, ">"); | 
															
														
														
													
														
															
																 | 
																 | 
																		dc->x = mw - dc->w; | 
																 | 
																 | 
																		dc->x = mw - dc->w; | 
															
														
														
													
														
															
																 | 
																 | 
																		if(next) | 
																 | 
																 | 
																		if(next) | 
															
														
														
													
														
															
																 | 
																 | 
																			dc_drawtext(dc, ">", normcol); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			drawtext(dc, ">", normcol); | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																	dc_map(dc, win, mw, mh); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	mapdc(dc, win, mw, mh); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																char * | 
																 | 
																 | 
																char * | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -398,7 +398,7 @@ readstdin(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																		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; | 
																 | 
																 | 
																		item->next = item->left = item->right = NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																		inputw = MAX(inputw, dc_textw(dc, item->text)); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		inputw = MAX(inputw, textw(dc, item->text)); | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -439,10 +439,10 @@ setup(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	root = RootWindow(dc->dpy, screen); | 
																 | 
																 | 
																	root = RootWindow(dc->dpy, screen); | 
															
														
														
													
														
															
																 | 
																 | 
																	utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False); | 
																 | 
																 | 
																	utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	normcol[ColBG] = dc_color(dc, normbgcolor); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	normcol[ColFG] = dc_color(dc, normfgcolor); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	selcol[ColBG] = dc_color(dc, selbgcolor); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	selcol[ColFG] = dc_color(dc, selfgcolor); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	normcol[ColBG] = getcolor(dc, normbgcolor); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	normcol[ColFG] = getcolor(dc, normfgcolor); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	selcol[ColBG] = getcolor(dc, selbgcolor); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	selcol[ColFG] = getcolor(dc, selfgcolor); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	/* menu geometry */ | 
																 | 
																 | 
																	/* menu geometry */ | 
															
														
														
													
														
															
																 | 
																 | 
																	bh = dc->font.height + 2; | 
																 | 
																 | 
																	bh = dc->font.height + 2; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -481,9 +481,9 @@ setup(void) { | 
															
														
														
													
														
															
																 | 
																 | 
																	                    CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | 
																 | 
																 | 
																	                    CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	grabkeyboard(); | 
																 | 
																 | 
																	grabkeyboard(); | 
															
														
														
													
														
															
																 | 
																 | 
																	dc_resize(dc, mw, mh); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	resizedc(dc, mw, mh); | 
															
														
														
													
														
															
																 | 
																 | 
																	inputw = MIN(inputw, mw/3); | 
																 | 
																 | 
																	inputw = MIN(inputw, mw/3); | 
															
														
														
													
														
															
																 | 
																 | 
																	promptw = prompt ? dc_textw(dc, prompt) : 0; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	promptw = prompt ? textw(dc, prompt) : 0; | 
															
														
														
													
														
															
																 | 
																 | 
																	XMapRaised(dc->dpy, win); | 
																 | 
																 | 
																	XMapRaised(dc->dpy, win); | 
															
														
														
													
														
															
																 | 
																 | 
																	text[0] = '\0'; | 
																 | 
																 | 
																	text[0] = '\0'; | 
															
														
														
													
														
															
																 | 
																 | 
																	match(); | 
																 | 
																 | 
																	match(); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -533,8 +533,8 @@ main(int argc, char *argv[]) { | 
															
														
														
													
														
															
																 | 
																 | 
																		else | 
																 | 
																 | 
																		else | 
															
														
														
													
														
															
																 | 
																 | 
																			usage(); | 
																 | 
																 | 
																			usage(); | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																	dc = dc_init(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	dc_font(dc, font); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	dc = initdc(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	initfont(dc, font); | 
															
														
														
													
														
															
																 | 
																 | 
																	readstdin(); | 
																 | 
																 | 
																	readstdin(); | 
															
														
														
													
														
															
																 | 
																 | 
																	setup(); | 
																 | 
																 | 
																	setup(); | 
															
														
														
													
														
															
																 | 
																 | 
																	run(); | 
																 | 
																 | 
																	run(); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																	
																 | 
																
  |