From 812368cce65d7a664379f8ca7403372c8ff28101 Mon Sep 17 00:00:00 2001 From: Ethan R Date: Mon, 27 Jan 2020 07:27:56 -0600 Subject: [PATCH] Added more readline bindings (#452) --- src/nnn.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/nnn.c b/src/nnn.c index 039d88c7..5b1c7a8c 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -2409,6 +2409,11 @@ static char *xreadline(const char *prefill, const char *prompt) case '\n': // fallthrough case '\r': goto END; + case CONTROL('D'): + if (pos < len) + ++pos; + else + continue; // fallthrough case 127: // fallthrough case '\b': /* rhel25 sends '\b' for backspace */ if (pos > 0) { @@ -2418,6 +2423,28 @@ static char *xreadline(const char *prefill, const char *prompt) } // fallthrough case '\t': /* TAB breaks cursor position, ignore it */ continue; + case CONTROL('F'): + if (pos < len) + ++pos; + continue; + case CONTROL('B'): + if (pos > 0) + --pos; + continue; + case CONTROL('W'): + printprompt(prompt); + do { + if (pos == 0) + break; + memmove(buf + pos - 1, buf + pos, + (len - pos) * WCHAR_T_WIDTH); + --pos, --len; + } while (buf[pos-1] != ' ' && buf[pos-1] != '/'); + continue; + case CONTROL('K'): + printprompt(prompt); + len = pos; + continue; case CONTROL('L'): printprompt(prompt); len = pos = 0;