feat: tab cycle through comments, comment auto-follow, cursor decoration-skip - #385
Conversation
|
UX fixes, let me know if you want me to split it but most should be sane |
|
@N4M3Z I'm going to revert the old line wrapping PR in the meantime until I can battle test this a bit more. it looks like this introduces a few other cosmetic bugs like the file headers being broken |
|
I think I need to spend some time figuring out how to have better automated tests because anything that changes rendering line counts causes a lot of downstream problems. see this as well #384 (comment) |
|
Yes, apologies, I'm testing by using so I discover these as I go. I'll contribute here if I find I need to fix more. |
…ion-skip Tab cycle reordered: FileList -> Diff -> CommitSelector -> Comments -> FileList (reverse mirrors it). Tabbing to Comments or FileList reveals the left pane. Comment navigator auto-follows: j/k scrolls the diff to the selected comment without stealing focus. Enter still jumps and focuses. Cursor positioning (jump_to_file, scroll_down, scroll_up) skips decoration lines (Spacing, FileHeader) so the cursor never lands on a non-actionable line. Skip logic lives in free functions with unit tests covering forward/backward walks and the max-line clamp. `:help` / `:h` opens the help popup. `:wrap` is a short alias for `:set wrap!`.
|
Reworked this on top of current main — dropped the wrap changes entirely, so I'll redo the word wrap as a separate PR against the current implementation, |

Reworked from scratch on top of current main — the wrap stuff is gone, this no
longer touches diff rendering or line counts.
What's left is the safe half of the original PR:
it), and tabbing into Comments/FileList unhides the left pane
stealing focus (Enter still jumps + focuses)
never lands on a non-actionable line — the skip logic is in free functions
with unit tests
:help/:h, and:wrapas a short alias for:set wrap!Word-boundary wrap will come back as its own PR, rebuilt against the current
wrap implementation and with rendering tests for the line-count math this time.
Tests: fmt/clippy clean, 972 passing. The 2 failures in
vcs::git::cli::testsare pre-existing — they run real
git commitand inherit the host'scommit.gpgsign, so they time out against my YubiKey; same result on a cleancheckout of main.