From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from smtpbgeu1.qq.com ([52.59.177.22]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iKdhc-00033r-GF for barebox@lists.infradead.org; Wed, 16 Oct 2019 07:26:41 +0000 From: sendpatch@qq.com Date: Wed, 16 Oct 2019 15:25:05 +0800 Message-Id: <1571210705-18315-1-git-send-email-sendpatch@qq.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH v3] readline: make ctrl-u to work like linux console To: barebox@lists.infradead.org Cc: DU HUANPENG From: DU HUANPENG 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 --- 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@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox