summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ui.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/ui.c b/ui.c
index a0083c4..5f0cb63 100644
--- a/ui.c
+++ b/ui.c
@@ -567,10 +567,25 @@ void uiFormat(
uiWrite(id, heat, time, buf);
}
+static void scrollTo(struct Window *window, int top) {
+ window->scroll = 0;
+ windowScroll(window, top - MAIN_LINES + MarkerLines);
+}
+
static void windowReflow(struct Window *window) {
+ uint num = 0;
+ const struct Line *line = bufferHard(window->buffer, windowTop(window));
+ if (line) num = line->num;
window->unreadHard = bufferReflow(
window->buffer, COLS, window->thresh, window->unreadSoft
);
+ if (!window->scroll || !num) return;
+ for (size_t i = 0; i < BufferCap; ++i) {
+ line = bufferHard(window->buffer, i);
+ if (!line || line->num != num) continue;
+ scrollTo(window, BufferCap - i);
+ break;
+ }
}
static void resize(void) {
@@ -762,11 +777,6 @@ static void scrollPage(struct Window *window, int n) {
windowScroll(window, n * (MAIN_LINES - SplitLines - MarkerLines - 1));
}
-static void scrollTo(struct Window *window, int top) {
- window->scroll = 0;
- windowScroll(window, top - MAIN_LINES + MarkerLines);
-}
-
static void scrollHot(struct Window *window, int dir) {
for (size_t i = windowTop(window) + dir; i < BufferCap; i += dir) {
const struct Line *line = bufferHard(window->buffer, i);