On Tue, 09 Mar 2021 17:53:06 +0100, Benjamin Baier wrote:
> Ping
I think that in do_clear_screen() full should not be set unless
neednl is 0. That is, we should only print the entire prompt if
the screen was actually cleared. Otherwise looks good to me.
- todd
Index: bin/ksh/vi.c
===================================================================
RCS file: /cvs/src/bin/ksh/vi.c,v
retrieving revision 1.57
diff -u -p -u -r1.57 vi.c
--- bin/ksh/vi.c 20 Sep 2020 14:40:45 -0000 1.57
+++ bin/ksh/vi.c 9 Mar 2021 17:02:14 -0000
@@ -55,7 +55,7 @@ static int Endword(int);
static int grabhist(int, int);
static int grabsearch(int, int, int, char *);
static void do_clear_screen(void);
-static void redraw_line(int);
+static void redraw_line(int, int);
static void refresh_line(int);
static int outofwin(void);
static void rewindow(void);
@@ -719,7 +719,7 @@ vi_cmd(int argcnt, const char *cmd)
break;
case CTRL('r'):
- redraw_line(1);
+ redraw_line(1, 0);
break;
case '@':
@@ -1737,18 +1737,19 @@ do_clear_screen(void)
neednl = 0;
}
#endif
- redraw_line(neednl);
+ /* Only print the full prompt if we cleared the screen. */
+ redraw_line(neednl, !neednl);
}
static void
-redraw_line(int neednl)
+redraw_line(int neednl, int full)
{
(void) memset(wbuf[win], ' ', wbuf_len);
if (neednl) {
x_putc('\r');
x_putc('\n');
}
- vi_pprompt(0);
+ vi_pprompt(full);
cur_col = pwidth;
morec = ' ';
}
@@ -2109,7 +2110,7 @@ complete_word(int command, int count)
vi_error();
x_print_expansions(nwords, words, is_command);
x_free_words(nwords, words);
- redraw_line(0);
+ redraw_line(0, 0);
return -1;
}
/*
@@ -2183,7 +2184,7 @@ print_expansions(struct edstate *e)
}
x_print_expansions(nwords, words, is_command);
x_free_words(nwords, words);
- redraw_line(0);
+ redraw_line(0, 0);
return 0;
}