From abe860d4864aa5a3f3feb8d6e8bf46f1857d2a3f Mon Sep 17 00:00:00 2001 From: tg Date: Sun, 5 Nov 2006 16:53:34 +0000 Subject: [PATCH] fix deleting forward with count --- edit.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/edit.c b/edit.c index c309433..88fa731 100644 --- a/edit.c +++ b/edit.c @@ -5,7 +5,7 @@ #include "sh.h" -__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.44 2006/11/05 16:48:17 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.45 2006/11/05 16:53:34 tg Exp $"); /* tty driver characters we are interested in */ typedef struct { @@ -1708,15 +1708,23 @@ x_del_back(int c __attribute__((unused))) static int x_del_char(int c __attribute__((unused))) { - int nleft = xep - xcp; + char *cp, *cp2; + int i = 0; - if (!nleft) { + cp = xcp; + while (i < x_arg) { + utf_widthadj(cp, (const char **)&cp2); + if (cp2 > xep) + break; + cp = cp2; + i++; + } + + if (!i) { x_e_putc2(7); return KSTD; } - if (x_arg > nleft) - x_arg = nleft; - x_delete(x_arg, false); + x_delete(i, false); return KSTD; }