From: DU HUANPENG <u74147@xxxxxxxxx> currtly, the ctrl-u discards the whole line, in most linux boxes, ctrl-u just erase characters before cursor to the begginning of the line. this patch make ctrl-u to do this. Signed-off-by: DU HUANPENG <u74147@xxxxxxxxx> --- lib/readline.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/readline.c b/lib/readline.c index d026af1..3d5fafd 100644 --- a/lib/readline.c +++ b/lib/readline.c @@ -188,9 +188,10 @@ int readline(const char *prompt, char *buf, int len) unsigned wlen; int ichar; int insert = 1; + int i; #ifdef CONFIG_AUTO_COMPLETE char tmp; - int reprint, i; + int reprint; char *completestr; complete_reset(); @@ -290,10 +291,31 @@ int readline(const char *prompt, char *buf, int len) insert = !insert; break; case BB_KEY_ERASE_LINE: - case CTL_CH('u'): BEGINNING_OF_LINE(); ERASE_TO_EOL(); break; + case CTL_CH('u'): + if (num <= eol_num) { + for (i = num; i < eol_num; i++) + buf[i-num] = buf[i]; + buf[i] = '\0'; + + for (i = 0; i < num; i++) + getcmd_putch(CTL_BACKSPACE); + for (i = 0; i < eol_num; i++) + getcmd_putch(' '); + for (i = 0; i < eol_num; i++) + getcmd_putch(CTL_BACKSPACE); + + eol_num -= num; + num = 0; + + for (i = 0 ; i < eol_num; i++) + getcmd_putch(buf[i]); + for (i = 0; i < eol_num; i++) + getcmd_putch(CTL_BACKSPACE); + } + break; case DEL: case BB_KEY_DEL7: case 8: -- 2.7.4 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox