]> Sergey Matveev's repositories - nnn.git/commitdiff
Get rid of getch() ('Führer' works now)
authorArun Prakash Jana <engineerarun@gmail.com>
Fri, 25 Aug 2017 08:27:22 +0000 (13:57 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Fri, 25 Aug 2017 08:27:22 +0000 (13:57 +0530)
nnn.c

diff --git a/nnn.c b/nnn.c
index 0ccf878a8ad2f756f3558bb397fba9fe0a685fe1..4fce5bc1df3605e9d90bb99264f8f051b8ccc02a 100644 (file)
--- a/nnn.c
+++ b/nnn.c
@@ -930,7 +930,7 @@ filterentries(char *path)
        curs_set(TRUE);
        printprompt(ln);
 
-       while ((r = wget_wch(stdscr, ch)) != ERR)
+       while ((r = get_wch(ch)) != ERR)
                if (r == OK)
                        switch (*ch) {
                        case '\r':  // with nonl(), this is ENTER key value
@@ -974,7 +974,7 @@ filterentries(char *path)
                                if (len == 1)
                                        cur = 0;
 
-                               if (len == maxlen || !isprint(*ch))
+                               if (len == maxlen)
                                        break;
 
                                wln[len] = (wchar_t)*ch;
@@ -1027,7 +1027,8 @@ xreadline(char *fname)
 {
        int old_curs = curs_set(1);
        size_t len, pos;
-       int c, x, y;
+       int x, y, r;
+       wint_t ch[2] = {0};
        wchar_t *buf = (wchar_t *)g_buf;
        size_t buflen = NAME_MAX - 1;
 
@@ -1048,41 +1049,44 @@ xreadline(char *fname)
                mvaddnwstr(y, x, buf, len + 1);
                move(y, x + pos);
 
-               c = getch();
-
-               if (c == KEY_ENTER || c == '\n' || c == '\r')
-                       break;
+               if ((r = get_wch(ch)) != ERR) {
+                       if (r == OK) {
+                               if (*ch == KEY_ENTER || *ch == '\n' || *ch == '\r')
+                                       break;
 
-               if (isprint(c) && pos < buflen) {
-                       memmove(buf + pos + 1, buf + pos, (len - pos) << 2);
-                       buf[pos] = c;
-                       ++len, ++pos;
-                       continue;
-               }
+                               if (pos < buflen) {
+                                       memmove(buf + pos + 1, buf + pos, (len - pos) << 2);
+                                       buf[pos] = *ch;
+                                       ++len, ++pos;
+                                       continue;
+                               }
 
-               switch (c) {
-               case KEY_LEFT:
-                       if (pos > 0)
-                               --pos;
-                       break;
-               case KEY_RIGHT:
-                       if (pos < len)
-                               ++pos;
-                       break;
-               case KEY_BACKSPACE:
-                       if (pos > 0) {
-                               memmove(buf + pos - 1, buf + pos, (len - pos) << 2);
-                               --len, --pos;
-                       }
-                       break;
-               case KEY_DC:
-                       if (pos < len) {
-                               memmove(buf + pos, buf + pos + 1, (len - pos - 1) << 2);
-                               --len;
+                       } else {
+                               switch (*ch) {
+                               case KEY_LEFT:
+                                       if (pos > 0)
+                                               --pos;
+                                       break;
+                               case KEY_RIGHT:
+                                       if (pos < len)
+                                               ++pos;
+                                       break;
+                               case KEY_BACKSPACE:
+                                       if (pos > 0) {
+                                               memmove(buf + pos - 1, buf + pos, (len - pos) << 2);
+                                               --len, --pos;
+                                       }
+                                       break;
+                               case KEY_DC:
+                                       if (pos < len) {
+                                               memmove(buf + pos, buf + pos + 1, (len - pos - 1) << 2);
+                                               --len;
+                                       }
+                                       break;
+                               default:
+                                       break;
+                               }
                        }
-                       break;
-               default:
-                       break;
                }
        }