commit 8afdc10fd50174fc2f567d371401834277bf1c40
parent d65e29260f83ac1d9d5fe128540f0079638b4e1a
Author: Jochen Sprickerhof <git@jochen.sprickerhof.de>
Date: Sat, 25 Apr 2020 22:33:46 +0200
Magnetic redraw behaviour
Diffstat:
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/scroll.c b/scroll.c
@@ -254,16 +254,19 @@ redraw()
{
int rows = 0, x, y;
+ if (bottom == NULL)
+ return;
+
getcursorposition(&x, &y);
+ if (y < ws.ws_row-1)
+ y--;
+
/* wind back bottom pointer by shown history */
for (; bottom != NULL && TAILQ_NEXT(bottom, entries) != NULL &&
- rows < y - 2; rows++)
+ rows < y - 1; rows++)
bottom = TAILQ_NEXT(bottom, entries);
- if (rows == 0)
- return;
-
/* clear screen */
dprintf(STDOUT_FILENO, "\033[2J");
/* set cursor position to upper left corner */
@@ -275,12 +278,16 @@ redraw()
else
write(STDOUT_FILENO, bottom->buf, bottom->size);
- for (; rows > 0; rows--) {
+ for (rows = ws.ws_row; rows > 0 &&
+ TAILQ_PREV(bottom, tailhead, entries) != NULL; rows--) {
bottom = TAILQ_PREV(bottom, tailhead, entries);
write(STDOUT_FILENO, bottom->buf, bottom->size);
}
- /* add new line in front of the shell prompt */
- write(STDOUT_FILENO, "\n", 1);
+
+ if (bottom == TAILQ_FIRST(&head))
+ write(STDOUT_FILENO, "\n", 1);
+ else
+ bottom = TAILQ_NEXT(bottom, entries);
}
void