]> Sergey Matveev's repositories - nnn.git/commitdiff
Simplify readln()
authorsin <sin@2f30.org>
Fri, 20 Nov 2015 11:38:19 +0000 (11:38 +0000)
committersin <sin@2f30.org>
Fri, 20 Nov 2015 11:39:07 +0000 (11:39 +0000)
Use getnstr() and be done with it.  It will even beep now!

noice.c

diff --git a/noice.c b/noice.c
index 7192f48e79745041db65b20f5fd74f879ef37a37..17a0cea418771954cebaa21e937ba9e8a7f5991f 100644 (file)
--- a/noice.c
+++ b/noice.c
@@ -327,52 +327,14 @@ nextsel(char **run)
 char *
 readln(void)
 {
-       int c;
-       int i = 0;
-       char *ln = NULL;
-       int y, x, x0;
+       char ln[LINE_MAX];
 
        echo();
        curs_set(TRUE);
-
-       /* Starting point */
-       getyx(stdscr, y, x);
-       x0 = x;
-
-       while ((c = getch()) != ERR) {
-               if (c == KEY_ENTER || c == '\r')
-                       break;
-               if (c == KEY_BACKSPACE || c == CONTROL('H')) {
-                       getyx(stdscr, y, x);
-                       if (x >= x0) {
-                               i--;
-                               if (i > 0) {
-                                       ln = xrealloc(ln, i * sizeof(*ln));
-                               } else {
-                                       free(ln);
-                                       ln = NULL;
-                               }
-                               move(y, x);
-                               printw("%c", ' ');
-                               move(y, x);
-                       } else {
-                               move(y, x0);
-                       }
-                       continue;
-               }
-               ln = xrealloc(ln, (i + 1) * sizeof(*ln));
-               ln[i] = c;
-               i++;
-       }
-       if (ln != NULL) {
-               ln = xrealloc(ln, (i + 1) * sizeof(*ln));
-               ln[i] = '\0';
-       }
-
-       curs_set(FALSE);
+       getnstr(ln, sizeof(ln));
        noecho();
-
-       return ln;
+       curs_set(FALSE);
+       return strdup(ln);
 }
 
 /*