Only move bottom if it was scrolled out of the window - scroll - scrollbackbuffer program for st
(HTM) git clone git://git.suckless.org/scroll
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit 4b23d03e3c8dcac58d48fc89c1bc84f5ce27b718
(DIR) parent 97b90414891e957c95caffe078c69b18aa38e659
(HTM) Author: Jochen Sprickerhof <git@jochen.sprickerhof.de>
Date: Fri, 17 Apr 2020 22:47:19 +0200
Only move bottom if it was scrolled out of the window
Diffstat:
M scroll.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
---
(DIR) diff --git a/scroll.c b/scroll.c
@@ -314,16 +314,22 @@ scrollup(int n)
write(STDOUT_FILENO, scrollend->buf + 1, scrollend->size - 1);
else
write(STDOUT_FILENO, scrollend->buf, scrollend->size);
- bottom = TAILQ_NEXT(bottom, entries);
+ if ( x + n >= ws.ws_row)
+ bottom = TAILQ_NEXT(bottom, entries);
/* print rows lines and move bottom forward to the new screen bottom */
for (; rows > 1; rows--) {
scrollend = TAILQ_PREV(scrollend, tailhead, entries);
- bottom = TAILQ_NEXT(bottom, entries);
+ if ( x + n >= ws.ws_row)
+ bottom = TAILQ_NEXT(bottom, entries);
write(STDOUT_FILENO, scrollend->buf, scrollend->size);
}
/* move cursor from line n to the old bottom position */
- dprintf(STDOUT_FILENO, "\033[%d;0H", x);
+ if (x + n < ws.ws_row) {
+ dprintf(STDOUT_FILENO, "\033[%d;%dH", x + n, y);
+ write(STDOUT_FILENO, "\033[?25h", 6); /* show cursor */
+ } else
+ dprintf(STDOUT_FILENO, "\033[%d;0H", ws.ws_row);
}
void