]> Sergey Matveev's repositories - nnn.git/commitdiff
Repeat search: reset current selection
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Jul 2017 20:19:14 +0000 (01:49 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Jul 2017 20:19:14 +0000 (01:49 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index b4b2be72b37f4531f424d2f9a41082a74c463a52..876b711d7d63a5ab2a932c5f473e95871fb61fe6 100644 (file)
--- 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);