vim command mode in getstring function
authorLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 15 May 2024 12:11:23 +0000 (14:11 +0200)
committerLaurent MAZET <laurent.mazet@thalesgroup.com>
Wed, 15 May 2024 12:11:23 +0000 (14:11 +0200)
tui.c

diff --git a/tui.c b/tui.c
index 9a3a2d04bbcd08c09d0a61cb09d74c5afa134d92..98e4f350960a3f100ec95bdc75c21af058f829c0 100644 (file)
--- a/tui.c
+++ b/tui.c
@@ -326,7 +326,6 @@ void mainmenu(menu *mp)
             break;
 
         case KEY_ESC:
-        case ':':
             mainhelp();
             break;
 
@@ -663,17 +662,44 @@ int weditstr(WINDOW *win, char *buf, int field)
     keypad(wedit, TRUE);
     curs_set(1);
 
+    int mode = 0;
     while (!stop)
     {
         idle();
         repainteditbox(wedit, bp - buf, buf);
 
-        switch (c = wgetch(wedit))
-        {
+        c = wgetch(wedit);
+        if (mode) {
+            switch (c) {
+            case 'i':
+                c = KEY_UP;
+                break;
+            case 'j':
+                c = KEY_LEFT;
+                break;
+            case 'k':
+                c = KEY_DOWN;
+                break;
+            case 'l':
+                c = KEY_RIGHT;
+                break;
+            case '\n':
+            case KEY_ESC:
+                mode = 0;
+                /* fallthrough */
+            default:
+                c = ERR;
+            }
+        }
+        switch (c) {
         case ERR:
             break;
 
         case KEY_ESC:
+            if (!mode) {
+                mode = 1;
+                break;
+            }
             strcpy(buf, org);   /* restore original */
             stop = TRUE;
             break;