diff options
-rw-r--r-- | dmenu.c | 26 |
1 files changed, 15 insertions, 11 deletions
@@ -79,9 +79,9 @@ static char text[4096]; | |||
79 | static int cmdw = 0; | 79 | static int cmdw = 0; |
80 | static int promptw = 0; | 80 | static int promptw = 0; |
81 | static int ret = 0; | 81 | static int ret = 0; |
82 | static int cursor = 0; | ||
83 | static int screen; | 82 | static int screen; |
84 | static unsigned int mw, mh; | 83 | static unsigned int mw, mh; |
84 | static unsigned int cursor = 0; | ||
85 | static unsigned int numlockmask = 0; | 85 | static unsigned int numlockmask = 0; |
86 | static Bool running = True; | 86 | static Bool running = True; |
87 | static Display *dpy; | 87 | static Display *dpy; |
@@ -338,8 +338,8 @@ initfont(const char *fontstr) { | |||
338 | void | 338 | void |
339 | kpress(XKeyEvent * e) { | 339 | kpress(XKeyEvent * e) { |
340 | char buf[sizeof text]; | 340 | char buf[sizeof text]; |
341 | int i, num; | 341 | int num; |
342 | unsigned int len; | 342 | unsigned int i, len; |
343 | KeySym ksym; | 343 | KeySym ksym; |
344 | 344 | ||
345 | len = strlen(text); | 345 | len = strlen(text); |
@@ -381,6 +381,10 @@ kpress(XKeyEvent * e) { | |||
381 | case XK_J: | 381 | case XK_J: |
382 | ksym = XK_Return; | 382 | ksym = XK_Return; |
383 | break; | 383 | break; |
384 | case XK_k: | ||
385 | case XK_K: | ||
386 | text[cursor] = '\0'; | ||
387 | break; | ||
384 | case XK_u: | 388 | case XK_u: |
385 | case XK_U: | 389 | case XK_U: |
386 | memmove(text, text + cursor, sizeof text - cursor + 1); | 390 | memmove(text, text + cursor, sizeof text - cursor + 1); |
@@ -450,12 +454,12 @@ kpress(XKeyEvent * e) { | |||
450 | } | 454 | } |
451 | break; | 455 | break; |
452 | case XK_BackSpace: | 456 | case XK_BackSpace: |
453 | if(cursor > 0) { | 457 | if(cursor == 0) |
454 | for(i = 1; cursor - i > 0 && !IS_UTF8_1ST_CHAR(text[cursor - i]); i++); | 458 | return; |
455 | memmove(text + cursor - i, text + cursor, sizeof text - cursor + i); | 459 | for(i = 1; cursor - i > 0 && !IS_UTF8_1ST_CHAR(text[cursor - i]); i++); |
456 | cursor -= i; | 460 | memmove(text + cursor - i, text + cursor, sizeof text - cursor + i); |
457 | match(text); | 461 | cursor -= i; |
458 | } | 462 | match(text); |
459 | break; | 463 | break; |
460 | case XK_Delete: | 464 | case XK_Delete: |
461 | for(i = 1; cursor + i < len && !IS_UTF8_1ST_CHAR(text[cursor + i]); i++); | 465 | for(i = 1; cursor + i < len && !IS_UTF8_1ST_CHAR(text[cursor + i]); i++); |
@@ -477,7 +481,7 @@ kpress(XKeyEvent * e) { | |||
477 | case XK_Escape: | 481 | case XK_Escape: |
478 | ret = 1; | 482 | ret = 1; |
479 | running = False; | 483 | running = False; |
480 | break; | 484 | return; |
481 | case XK_Home: | 485 | case XK_Home: |
482 | if(sel == item) { | 486 | if(sel == item) { |
483 | cursor = 0; | 487 | cursor = 0; |
@@ -519,7 +523,7 @@ kpress(XKeyEvent * e) { | |||
519 | fprintf(stdout, "%s", sel->text); | 523 | fprintf(stdout, "%s", sel->text); |
520 | fflush(stdout); | 524 | fflush(stdout); |
521 | running = False; | 525 | running = False; |
522 | break; | 526 | return; |
523 | case XK_Right: | 527 | case XK_Right: |
524 | case XK_Down: | 528 | case XK_Down: |
525 | if(cursor < len) | 529 | if(cursor < len) |