diff --git a/CHANGELOG.md b/CHANGELOG.md index 76fa3802..c5e9e6b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,6 +62,8 @@ * Default `--server` socket path to use `$WAYLAND_DISPLAY` instead of `$XDG_SESSION_ID` (https://codeberg.org/dnkl/foot/issues/55). * Trailing empty cells are no longer highlighted in mouse selections. +* Scrollback position indicator is now based on the number of _used_ + scrollback lines, instead of the _total_ number of scrollback lines. ### Fixed diff --git a/render.c b/render.c index 12003468..dba047e5 100644 --- a/render.c +++ b/render.c @@ -1399,14 +1399,22 @@ render_scrollback_position(struct terminal *term) /* Find absolute row number of the scrollback start */ int scrollback_start = term->grid->offset + term->rows; - while (term->grid->rows[scrollback_start & (term->grid->num_rows - 1)] == NULL) + int empty_rows = 0; + while (term->grid->rows[scrollback_start & (term->grid->num_rows - 1)] == NULL) { scrollback_start++; + empty_rows++; + } /* Rebase viewport against scrollback start (so that 0 is at * the beginning of the scrollback) */ int rebased_view = term->grid->view - scrollback_start + term->grid->num_rows; rebased_view &= term->grid->num_rows - 1; + /* How much of the scrollback is actually used? */ + int populated_rows = term->grid->num_rows - empty_rows; + assert(populated_rows > 0); + assert(populated_rows <= term->grid->num_rows); + /* * How far down in the scrollback we are. * @@ -1414,9 +1422,9 @@ render_scrollback_position(struct terminal *term) * 100% -> at the bottom, i.e. where new lines are inserted */ double percent = - rebased_view + term->rows == term->grid->num_rows + rebased_view + term->rows == populated_rows ? 1.0 - : (double)rebased_view / term->grid->num_rows; + : (double)rebased_view / populated_rows; wchar_t _text[64]; const wchar_t *text = _text;