diff --git a/nnn.c b/nnn.c index b4b2be72..876b711d 100644 --- a/nnn.c +++ b/nnn.c @@ -851,8 +851,8 @@ readln(char *path) curs_set(TRUE); printprompt(ln); - while ((r = wget_wch(stdscr, ch)) != ERR) { - if (r == OK) { + while ((r = wget_wch(stdscr, ch)) != ERR) + if (r == OK) switch (*ch) { case '\r': // with nonl(), this is ENTER key value if (len == 1) { @@ -872,10 +872,10 @@ readln(char *path) goto end; } - if (len == 2) + wln[--len] = '\0'; + if (len == 1) cur = oldcur; - wln[--len] = '\0'; wcstombs(ln, wln, LINE_MAX << 2); ndents = total; if (matches(pln) == -1) { @@ -891,9 +891,12 @@ readln(char *path) case CONTROL('Q'): goto end; default: + /* Reset cur in case it's a repeat search */ + if (len == 1) + cur = 0; + wln[len] = (wchar_t)*ch; - ++len; - wln[len] = '\0'; + wln[++len] = '\0'; wcstombs(ln, wln, LINE_MAX << 2); ndents = total; if (matches(pln) == -1) @@ -901,7 +904,7 @@ readln(char *path) redraw(path); printprompt(ln); } - } else { + else switch (*ch) { case KEY_DC: // fallthrough case KEY_BACKSPACE: @@ -911,10 +914,10 @@ readln(char *path) goto end; } - if (len == 2) + wln[--len] = '\0'; + if (len == 1) cur = oldcur; - wln[--len] = '\0'; wcstombs(ln, wln, LINE_MAX << 2); ndents = total; if (matches(pln) == -1) @@ -932,8 +935,6 @@ readln(char *path) default: goto end; } - } - } end: noecho(); curs_set(FALSE);