| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -22,6 +22,7 @@ typedef struct Item Item; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					struct Item { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						char *text; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Item *left, *right; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						Bool out; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					}; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static void appenditem(Item *item, Item **list, Item **last); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -49,9 +50,12 @@ static const char *normbgcolor = "#222222"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static const char *normfgcolor = "#bbbbbb"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static const char *selbgcolor  = "#005577"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static const char *selfgcolor  = "#eeeeee"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static const char *outbgcolor  = "#00ffff"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static const char *outfgcolor  = "#000000"; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static unsigned int lines = 0; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static unsigned long normcol[ColLast]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static unsigned long selcol[ColLast]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static unsigned long outcol[ColLast]; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static Atom clip, utf8; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static Bool topbar = True; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					static DC *dc; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -185,7 +189,8 @@ drawmenu(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							dc->w = mw - dc->x; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(item = curr; item != next; item = item->right) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								dc->y += dc->h; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								drawtext(dc, item->text, (item == sel) ? selcol : normcol); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								drawtext(dc, item->text, (item == sel) ? selcol : | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								                         (item->out)   ? outcol : normcol); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						else if(matches) { | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -197,7 +202,8 @@ drawmenu(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							for(item = curr; item != next; item = item->right) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								dc->x += dc->w; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								dc->w = MIN(textw(dc, item->text), mw - dc->x - textw(dc, ">")); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								drawtext(dc, item->text, (item == sel) ? selcol : normcol); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								drawtext(dc, item->text, (item == sel) ? selcol : | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								                         (item->out)   ? outcol : normcol); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							dc->w = textw(dc, ">"); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							dc->x = mw - dc->w; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -278,6 +284,9 @@ keypress(XKeyEvent *ev) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								XConvertSelection(dc->dpy, (ev->state & ShiftMask) ? clip : XA_PRIMARY, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								                  utf8, utf8, win, CurrentTime); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case XK_Return: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							case XK_KP_Enter: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							default: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								return; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -362,7 +371,10 @@ keypress(XKeyEvent *ev) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						case XK_Return: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						case XK_KP_Enter: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							puts((sel && !(ev->state & ShiftMask)) ? sel->text : text); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							exit(EXIT_SUCCESS); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(!(ev->state & ControlMask)) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								exit(EXIT_SUCCESS); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							sel->out = True; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						case XK_Right: | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(text[cursor] != '\0') { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								cursor = nextrune(+1); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -480,6 +492,7 @@ readstdin(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								*p = '\0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(!(items[i].text = strdup(buf))) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								eprintf("cannot strdup %u bytes:", strlen(buf)+1); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							items[i].out = False; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
							if(strlen(items[i].text) > max) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
								max = strlen(maxstr = items[i].text); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						} | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -531,6 +544,8 @@ setup(void) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						normcol[ColFG] = getcolor(dc, normfgcolor); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						selcol[ColBG]  = getcolor(dc, selbgcolor); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						selcol[ColFG]  = getcolor(dc, selfgcolor); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						outcol[ColBG]  = getcolor(dc, outbgcolor); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						outcol[ColFG]  = getcolor(dc, outfgcolor); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						clip = XInternAtom(dc->dpy, "CLIPBOARD",   False); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
						utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False); | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |