Repository navigation
fix(list): count pages from the top so a jump never hides the cursor - #681
Merged
Merged
Conversation
Pages are now fixed: the first starts at row 0 and each starts where the one before it ends. `ui::list_view::Pages` finds the starts by walking from the top, once per listing and list size and only as far as asked, and the settle places the column on the page holding its cursor. The settle used to snap `view_top` to a multiple of the page size it had just measured. Pages fit different numbers of columns, so it alternated between two starts and kept the lower one: after a `/` search no row was lit, and `l` off a page's last column landed in the next page's second column. PageDown / PageUp move to the same column and row on the next or previous page (its last row when shorter). PageDown from the last page wraps to the first; PageUp from the first goes to the last row, so opening a directory never measures past its second page. Closes #679 Co-Authored-By: Claude <noreply@anthropic.com>
DerekMarshall
added a commit
that referenced
this pull request
Oct 15, 2026
Sets the version to `2.2.0-rc.4`, made with `make release-prep VERSION=2.2.0-rc.4`. Only `Cargo.toml` and `Cargo.lock` change. As with the earlier rcs, it gets no CHANGELOG section, because the 2.2.0 section covers the whole cycle. ## What rc.4 adds over rc.3 | PR | Change | |---|---| | #680 / #681 | fix(list): pages are counted from the top, so a `/` jump always shows the cursor and `l` off a page's last column opens the next page at its first column (#679). PageDown/PageUp keep the column and row. | | #682 | fix(agent-hud): the first column holds its width through every state, and row headings are bright and bold (#676). | | #683 | test(clipboard): the copy-command stubs run through `/bin/sh`, fixing a local macOS flake that failed this release's first prep. | The owner tested builds of #681 and #682 before they merged. `main` stays at `2.2.0-rc.4` through the soak. **After merge, on `main`:** 1. `make release-tag VERSION=2.2.0-rc.4` 2. Push the tag. `release.yml` verifies the archives reproduce, publishes a GitHub pre-release, and dispatches the Homebrew tap and apt. The crates job publishes `spyc 2.2.0-rc.4` and skips `spyc-vt-sys 0.1.0`, which is unchanged. **Checks:** the release-prep commit hook ran `make check` (3,240 tests passed). Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #679. The list's pages are now counted from the top, so a jump always shows the page holding the cursor, and
loff a page's last column opens the next page at its first column.The bug
The settle snapped
view_topto a multiple of the page size it had just measured. A page holds as many columns as fit, and a column is as wide as its longest name, so neighbouring pages differ in length. The settle alternated between two starts and kept the lower one. After a/search no row was lit, andllanded in the next page's second column.The fix
ui::list_view::Pages): the first page starts at row 0 and each starts where the one before it ends. The starts are found by walking from the top, once per listing and list size, and only as far as asked.settle_pagereplacesstabilize_grid's loop and places the column on the page holding its cursor.grid_atis now the one geometry the renderer, the hit-test and the page walk share.Commander::ensure_cursor_visibleandcursor_move_globalare gone, andARCHITECTURE.mdrecords the decision.Checks
ignores removed. Two more key-driven cases cover PageDown to a narrower page and PageUp to the previous page's first row. All four failed on the old code.l,h, PageDown and PageUp, and the cursor bar was on the cursor's name every time.make check-cipasses. The owner tested a build and approved it.Generated with Claude Code