aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 039d88c..5b1c7a8 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;