From 0e713243fe327ea35abc823e44eca1665d7f35c5 Mon Sep 17 00:00:00 2001 From: Simon Andersson Date: Thu, 23 Jul 2015 00:27:10 +0200 Subject: [PATCH] Make ctrl-w work in middle of line --- src/curses/ux_input.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/curses/ux_input.c b/src/curses/ux_input.c index c05cd5a..2160159 100644 --- a/src/curses/ux_input.c +++ b/src/curses/ux_input.c @@ -449,20 +449,22 @@ zchar os_read_line (int max, zchar *buf, int timeout, int width, int continued) } break; case ZC_DEL_WORD: - if (scrpos != 0 && scrpos == len) { + if (scrpos != 0) { /* Search for start of preceding word */ - int i = len; - while (i > 0 && buf[i] != ' ') { - mvaddch(y, x + i, ' '); - i--; - } + int i; + for (i = scrpos - 1; i > 0 && buf[i] != ' '; i--) {} searchpos = -1; int delta = scrpos - i; + int oldlen = len; + int oldscrpos = scrpos; len -= delta; scrpos -= delta; - scrnmove(x + scrpos, x + scrpos + delta, delta); - memmove(buf + scrpos, buf + scrpos + delta, delta); + scrnmove(x + scrpos, x + oldscrpos, len - scrpos); + memmove(buf + scrpos, buf + oldscrpos, len - scrpos); + for (i = len; i <= oldlen ; i++) { + mvaddch(y, x + i, ' '); + } } break; case CHR_DEL: -- 2.34.1