From: DU HUANPENG <u74...@gmail.com> currtly, the ctrl-u discards the whole line, in most linux boxes, ctrl-u just remove character before cursor. this patch make ctrl-u to do this.
Signed-off-by: DU HUANPENG <u74...@gmail.com> --- lib/readline.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/lib/readline.c b/lib/readline.c index d026af1..c0b194c 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(); @@ -291,8 +292,35 @@ int readline(const char *prompt, char *buf, int len) break; case BB_KEY_ERASE_LINE: case CTL_CH('u'): - BEGINNING_OF_LINE(); - ERASE_TO_EOL(); + if(num >= eol_num) { + BEGINNING_OF_LINE(); + ERASE_TO_EOL(); + } else { + 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: -- 2.7.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox