From: Simon Andersson Date: Wed, 22 Jul 2015 22:27:10 +0000 (+0200) Subject: Make ctrl-w work in middle of line X-Git-Url: https://scope-eye.net/git/?a=commitdiff_plain;h=0e713243fe327ea35abc823e44eca1665d7f35c5;p=liskon_frotz.git Make ctrl-w work in middle of line --- 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: