applied Connor's next nice patch, thanks a lot!
							parent
							
								
									8e3e61170b
								
							
						
					
					
						commit
						eededaa76f
					
				
							
								
								
									
										65
									
								
								dmenu.c
								
								
								
								
							
							
						
						
									
										65
									
								
								dmenu.c
								
								
								
								
							|  | @ -52,6 +52,7 @@ static void calcoffsetsh(void); | |||
| static void calcoffsetsv(void); | ||||
| static char *cistrstr(const char *s, const char *sub); | ||||
| static void cleanup(void); | ||||
| static void drawcursor(void); | ||||
| static void drawmenu(void); | ||||
| static void drawmenuh(void); | ||||
| static void drawmenuv(void); | ||||
|  | @ -247,9 +248,7 @@ drawmenuh(void) { | |||
| 	dc.x += dc.w; | ||||
| 	/* determine maximum items */ | ||||
| 	for(i = curr; i != next; i=i->right) { | ||||
| 		dc.w = textw(i->text); | ||||
| 		if(dc.w > mw / 3) | ||||
| 			dc.w = mw / 3; | ||||
| 		dc.w = MIN(textw(i->text), mw / 3); | ||||
| 		drawtext(i->text, (sel == i) ? dc.sel : dc.norm); | ||||
| 		dc.x += dc.w; | ||||
| 	} | ||||
|  | @ -395,7 +394,8 @@ kpress(XKeyEvent * e) { | |||
| 		switch (ksym) { | ||||
| 		default:	/* ignore other control sequences */ | ||||
| 			return; | ||||
| 		case XK_bracketleft: | ||||
| 		case XK_c: | ||||
| 		case XK_C: | ||||
| 			ksym = XK_Escape; | ||||
| 			break; | ||||
| 		case XK_h: | ||||
|  | @ -414,18 +414,16 @@ kpress(XKeyEvent * e) { | |||
| 		case XK_U: | ||||
| 			text[0] = 0; | ||||
| 			match(text); | ||||
| 			drawmenu(); | ||||
| 			break; | ||||
| 		case XK_w: | ||||
| 		case XK_W: | ||||
| 			if(len) { | ||||
| 				i = len - 1; | ||||
| 				while(i >= 0 && text[i] == ' ') | ||||
| 					text[i--] = 0; | ||||
| 				while(i >= 0 && text[i] != ' ') | ||||
| 					text[i--] = 0; | ||||
| 			if(cursor > 0) { | ||||
| 				i = cursor; | ||||
| 				while(i-- > 0 && text[i] == ' '); | ||||
| 				while(i-- > 0 && text[i] != ' '); | ||||
| 				memmove(text + i + 1, text + cursor, sizeof text - cursor); | ||||
| 				cursor = i + 1; | ||||
| 				match(text); | ||||
| 				drawmenu(); | ||||
| 			} | ||||
| 			break; | ||||
| 		} | ||||
|  | @ -473,14 +471,14 @@ kpress(XKeyEvent * e) { | |||
| 		num = MIN(num, sizeof text - cursor); | ||||
| 		if(num && !iscntrl((int) buf[0])) { | ||||
| 			memmove(text + cursor + num, text + cursor, sizeof text - cursor - num); | ||||
| 			memmove(text + cursor, buf, num); | ||||
| 			memcpy(text + cursor, buf, num); | ||||
| 			cursor+=num; | ||||
| 			match(text); | ||||
| 		} | ||||
| 		break; | ||||
| 	case XK_BackSpace: | ||||
| 		if(cursor > 0) { | ||||
| 			memmove(text + cursor + -1, text + cursor, sizeof text - cursor); | ||||
| 			memmove(text + cursor - 1, text + cursor, sizeof text - cursor + 1); | ||||
| 			cursor--; | ||||
| 			match(text); | ||||
| 		} | ||||
|  | @ -490,8 +488,10 @@ kpress(XKeyEvent * e) { | |||
| 		match(text); | ||||
| 		break; | ||||
| 	case XK_End: | ||||
| 		if(!item) | ||||
| 			return; | ||||
| 		if(cursor < len) { | ||||
| 			cursor = len; | ||||
| 			break; | ||||
| 		} | ||||
| 		while(next) { | ||||
| 			sel = curr = next; | ||||
| 			calcoffsets(); | ||||
|  | @ -504,8 +504,10 @@ kpress(XKeyEvent * e) { | |||
| 		running = False; | ||||
| 		break; | ||||
| 	case XK_Home: | ||||
| 		if(!item) | ||||
| 			return; | ||||
| 		if(sel == item) { | ||||
| 			cursor = 0; | ||||
| 			break; | ||||
| 		} | ||||
| 		sel = curr = item; | ||||
| 		calcoffsets(); | ||||
| 		break; | ||||
|  | @ -536,12 +538,10 @@ kpress(XKeyEvent * e) { | |||
| 		calcoffsets(); | ||||
| 		break; | ||||
| 	case XK_Return: | ||||
| 		if((e->state & ShiftMask) && *text) | ||||
| 		if((e->state & ShiftMask) || !sel) | ||||
| 			fprintf(stdout, "%s", text); | ||||
| 		else if(sel) | ||||
| 		else | ||||
| 			fprintf(stdout, "%s", sel->text); | ||||
| 		else if(*text) | ||||
| 			fprintf(stdout, "%s", text); | ||||
| 		fflush(stdout); | ||||
| 		running = False; | ||||
| 		break; | ||||
|  | @ -567,9 +567,6 @@ kpress(XKeyEvent * e) { | |||
| 		match(text); | ||||
| 		break; | ||||
| 	} | ||||
| 	len = strlen(text); | ||||
| 	cursor = MIN(cursor, len); | ||||
| 	cursor = MAX(cursor, 0); | ||||
| 	drawmenu(); | ||||
| } | ||||
| 
 | ||||
|  | @ -620,13 +617,13 @@ readstdin(void) { | |||
| 	unsigned int len = 0, max = 0; | ||||
| 	Item *i, *new; | ||||
| 
 | ||||
| 	i = 0; | ||||
| 	i = NULL; | ||||
| 	while(fgets(buf, sizeof buf, stdin)) { | ||||
| 		len = strlen(buf); | ||||
| 		if (buf[len - 1] == '\n') | ||||
| 			buf[len - 1] = 0; | ||||
| 		if(buf[len-1] == '\n') | ||||
| 			buf[--len] = '\0'; | ||||
| 		if(!(p = strdup(buf))) | ||||
| 			eprint("fatal: could not strdup() %u bytes\n", strlen(buf)); | ||||
| 			eprint("fatal: could not strdup() %u bytes\n", len); | ||||
| 		if(max < len) { | ||||
| 			maxname = p; | ||||
| 			max = len; | ||||
|  | @ -734,13 +731,9 @@ setup(Bool topbar) { | |||
| 	if(!dc.font.set) | ||||
| 		XSetFont(dpy, dc.gc, dc.font.xfont->fid); | ||||
| 	if(maxname) | ||||
| 		cmdw = textw(maxname); | ||||
| 	if(cmdw > mw / 3) | ||||
| 		cmdw = mw / 3; | ||||
| 		cmdw = MIN(textw(maxname), mw / 3); | ||||
| 	if(prompt) | ||||
| 		promptw = textw(prompt); | ||||
| 	if(promptw > mw / 5) | ||||
| 		promptw = mw / 5; | ||||
| 		promptw = MIN(textw(prompt), mw / 5); | ||||
| 	text[0] = 0; | ||||
| 	match(text); | ||||
| 	XMapRaised(dpy, win); | ||||
|  | @ -799,7 +792,7 @@ main(int argc, char *argv[]) { | |||
| 			if(++i < argc) selfgcolor = argv[i]; | ||||
| 		} | ||||
| 		else if(!strcmp(argv[i], "-v")) | ||||
| 			eprint("dmenu-"VERSION", © 2006-2009 dmenu engineers, see LICENSE for details\n"); | ||||
| 			eprint("dmenu-"VERSION", © 2006-2010 dmenu engineers, see LICENSE for details\n"); | ||||
| 		else | ||||
| 			eprint("usage: dmenu [-i] [-b] [-l <lines>] [-fn <font>] [-nb <color>] [-nf <color>]\n" | ||||
| 			       "             [-p <prompt>] [-sb <color>] [-sf <color>] [-v]\n"); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue