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 | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/readline.c b/lib/readline.c index d026af1..eba3da4 100644 --- a/lib/readline.c +++ b/lib/readline.c @@ -291,8 +291,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++) { + putchar(CTL_BACKSPACE); + } + for(i=0; i<eol_num; i++) { + putchar(' '); + } + for(i=0; i<eol_num; i++) { + putchar(CTL_BACKSPACE); + } + + eol_num -= num; + num = 0; + + for(i=0; i<eol_num; i++) { + putchar(buf[i]); + } + for(i=0; i<eol_num; i++) { + putchar(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