Hi, On Mon, Dec 13, 2021 at 10:09:01PM +0100, Sascha Hauer wrote: > Our console driver for the EFI simple text protocol does not support > the "\e[1S" escape sequence to scroll the window which means sedit > doesn't work properly. Disable smartscroll when the efi-stdio console > is active. While at it put the screen height reduction into the same > dynamic test. FYI >From the terminfo manpage: In order to scroll text up, a program will go to the bottom left corner of the screen and send the ind (index) string. [...] Parameterized versions of the scrolling sequences are indn and rin which have the same semantics as ind and ri except that they take one parameter, and scroll that many lines. [...] >From infocmp on my system: ind=\n and indn=\e[%p1$pS So the smart scroll could be replaced by a move to the last line plus \n > > Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> > --- > commands/edit.c | 46 ++++++++++++++++++++++++++++++++++++---------- > 1 file changed, 36 insertions(+), 10 deletions(-) > > diff --git a/commands/edit.c b/commands/edit.c > index 30448cbc04..592cf4aa3d 100644 > --- a/commands/edit.c > +++ b/commands/edit.c > @@ -522,6 +522,25 @@ static int read_modal_key(bool is_modal) > return -EAGAIN; > } > > +static bool is_efi_console_active(void) > +{ > + struct console_device *cdev; > + > + if (!IS_ENABLED(CONFIG_DRIVER_SERIAL_EFI_STDIO)) > + return false; > + > + for_each_console(cdev) { > + if (!(cdev->f_active & CONSOLE_STDIN)) > + continue; > + if (!(cdev->f_active & CONSOLE_STDOUT)) > + continue; > + if (!strcmp(dev_name(cdev->dev), "efi-stdio")) > + return true; > + } > + > + return false; > +} > + > static int do_edit(int argc, char *argv[]) > { > bool is_vi = false; > @@ -539,16 +558,7 @@ static int do_edit(int argc, char *argv[]) > return 1; > > screenwidth = 80; > - > - /* > - * The EFI simple text output protocol wraps to the next line and scrolls > - * down when we write to the right bottom screen position. Reduce the number > - * of rows by one to work around this. > - */ > - if (IS_ENABLED(CONFIG_EFI_BOOTUP)) > - screenheight = 24; > - else > - screenheight = 25; > + screenheight = 25; > > /* check if we are not called as "edit" */ > if (*argv[0] != 'e') { > @@ -560,6 +570,22 @@ static int do_edit(int argc, char *argv[]) > is_vi = true; > } > > + if (is_efi_console_active()) { > + /* > + * The EFI simple text output protocol wraps to the next line and > + * scrolls down when we write to the right bottom screen position. > + * Reduce the number of rows by one to work around this. > + */ > + screenheight--; > + > + /* > + * Our console driver for the EFI simple text output protocol does > + * not implement the "\e[1S" sequence we use for scrolling the > + * screen. > + */ > + smartscroll = 0; > + } > + > cursx = 0; > cursy = 0; > textx = 0; > -- > 2.30.2 > > > _______________________________________________ > barebox mailing list > barebox@xxxxxxxxxxxxxxxxxxx > http://lists.infradead.org/mailman/listinfo/barebox > > > To declare a filtering error, please use the following link : https://www.security-mail.net/reporter.php?mid=51ef.61b7b6ff.b5dfd.0&r=jmaselbas%40kalray.eu&s=barebox-bounces%2Bjmaselbas%3Dkalray.eu%40lists.infradead.org&o=%5BPATCH+21%2F25%5D+edit%3A+Improve+behaviour+on+efi-stdio+console&verdict=C&c=7aca3328f2dac1c6571b69dba9c6a9e04f98dc81 > _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox