added ^K, optimisations
This commit is contained in:
		
							
								
								
									
										26
									
								
								dmenu.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								dmenu.c
									
									
									
									
									
								
							@@ -79,9 +79,9 @@ static char text[4096];
 | 
			
		||||
static int cmdw = 0;
 | 
			
		||||
static int promptw = 0;
 | 
			
		||||
static int ret = 0;
 | 
			
		||||
static int cursor = 0;
 | 
			
		||||
static int screen;
 | 
			
		||||
static unsigned int mw, mh;
 | 
			
		||||
static unsigned int cursor = 0;
 | 
			
		||||
static unsigned int numlockmask = 0;
 | 
			
		||||
static Bool running = True;
 | 
			
		||||
static Display *dpy;
 | 
			
		||||
@@ -338,8 +338,8 @@ initfont(const char *fontstr) {
 | 
			
		||||
void
 | 
			
		||||
kpress(XKeyEvent * e) {
 | 
			
		||||
	char buf[sizeof text];
 | 
			
		||||
	int i, num;
 | 
			
		||||
	unsigned int len;
 | 
			
		||||
	int num;
 | 
			
		||||
	unsigned int i, len;
 | 
			
		||||
	KeySym ksym;
 | 
			
		||||
 | 
			
		||||
	len = strlen(text);
 | 
			
		||||
@@ -381,6 +381,10 @@ kpress(XKeyEvent * e) {
 | 
			
		||||
		case XK_J:
 | 
			
		||||
			ksym = XK_Return;
 | 
			
		||||
			break;
 | 
			
		||||
		case XK_k:
 | 
			
		||||
		case XK_K:
 | 
			
		||||
			text[cursor] = '\0';
 | 
			
		||||
			break;
 | 
			
		||||
		case XK_u:
 | 
			
		||||
		case XK_U:
 | 
			
		||||
			memmove(text, text + cursor, sizeof text - cursor + 1);
 | 
			
		||||
@@ -450,12 +454,12 @@ kpress(XKeyEvent * e) {
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case XK_BackSpace:
 | 
			
		||||
		if(cursor > 0) {
 | 
			
		||||
			for(i = 1; cursor - i > 0 && !IS_UTF8_1ST_CHAR(text[cursor - i]); i++);
 | 
			
		||||
			memmove(text + cursor - i, text + cursor, sizeof text - cursor + i);
 | 
			
		||||
			cursor -= i;
 | 
			
		||||
			match(text);
 | 
			
		||||
		}
 | 
			
		||||
		if(cursor == 0)
 | 
			
		||||
			return;
 | 
			
		||||
		for(i = 1; cursor - i > 0 && !IS_UTF8_1ST_CHAR(text[cursor - i]); i++);
 | 
			
		||||
		memmove(text + cursor - i, text + cursor, sizeof text - cursor + i);
 | 
			
		||||
		cursor -= i;
 | 
			
		||||
		match(text);
 | 
			
		||||
		break;
 | 
			
		||||
	case XK_Delete:
 | 
			
		||||
		for(i = 1; cursor + i < len && !IS_UTF8_1ST_CHAR(text[cursor + i]); i++);
 | 
			
		||||
@@ -477,7 +481,7 @@ kpress(XKeyEvent * e) {
 | 
			
		||||
	case XK_Escape:
 | 
			
		||||
		ret = 1;
 | 
			
		||||
		running = False;
 | 
			
		||||
		break;
 | 
			
		||||
		return;
 | 
			
		||||
	case XK_Home:
 | 
			
		||||
		if(sel == item) {
 | 
			
		||||
			cursor = 0;
 | 
			
		||||
@@ -519,7 +523,7 @@ kpress(XKeyEvent * e) {
 | 
			
		||||
			fprintf(stdout, "%s", sel->text);
 | 
			
		||||
		fflush(stdout);
 | 
			
		||||
		running = False;
 | 
			
		||||
		break;
 | 
			
		||||
		return;
 | 
			
		||||
	case XK_Right:
 | 
			
		||||
	case XK_Down:
 | 
			
		||||
		if(cursor < len)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user