>From a227f1a2c54aa420e016ffb5ca1c41fe93a2bd68 Mon Sep 17 00:00:00 2001 From: Egor Ignatov Date: Fri, 26 Feb 2021 12:08:23 +0300 Subject: [PATCH] Fix backspace in username prompt --- grub-core/normal/auth.c | 4 +++- grub-core/normal/charset.c | 1 + grub-core/term/gfxterm.c | 11 +++++++++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/grub-core/normal/auth.c b/grub-core/normal/auth.c index 6be678c0d..ffbf6d890 100644 --- a/grub-core/normal/auth.c +++ b/grub-core/normal/auth.c @@ -177,7 +177,9 @@ grub_username_get (char buf[], unsigned buf_size) if (cur_len) { cur_len--; - grub_printf ("\b \b"); + grub_printf ("\b"); + grub_printf (" "); + grub_printf ("\b"); } continue; } diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c index 4dfcc3107..77073c12f 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -931,6 +931,7 @@ grub_bidi_line_logical_to_visual (const grub_uint32_t *logical, pop_stack (); break; case GRUB_BIDI_TYPE_BN: + visual_len++; break; case GRUB_BIDI_TYPE_R: case GRUB_BIDI_TYPE_AL: diff --git a/grub-core/term/gfxterm.c b/grub-core/term/gfxterm.c index af7c090a3..130d33988 100644 --- a/grub-core/term/gfxterm.c +++ b/grub-core/term/gfxterm.c @@ -846,8 +846,15 @@ grub_gfxterm_putchar (struct grub_term_output *term, switch (c->base) { case '\b': - if (virtual_screen.cursor_x > 0) - virtual_screen.cursor_x--; + if (virtual_screen.cursor_x > 0) + { + virtual_screen.cursor_x--; + } + else if (virtual_screen.cursor_y > 0) + { + virtual_screen.cursor_y--; + virtual_screen.cursor_x = virtual_screen.columns-2; + } break; case '\n': -- 2.25.4