Skip to content

feat(history): auto-expand commits on file navigation boundary#212

Open
fredrikaverpil wants to merge 1 commit intoesmuellert:mainfrom
fredrikaverpil:feat/history-auto-expand-commits
Open

feat(history): auto-expand commits on file navigation boundary#212
fredrikaverpil wants to merge 1 commit intoesmuellert:mainfrom
fredrikaverpil:feat/history-auto-expand-commits

Conversation

@fredrikaverpil
Copy link
Contributor

@fredrikaverpil fredrikaverpil commented Jan 29, 2026

Why?

When browsing repository history with :CodeDiff history, reaching the last file in a commit and pressing ]f wraps back to the first file of the same commit. This creates friction when reviewing changes across multiple commits.

What?

Auto-expand commits when navigating across commit boundaries:

  • Navigate next (]f): At last file → expands next commit, selects its first file
  • Navigate prev ([f): At first file → expands previous commit, selects its last file
  • Wrap-around: Last commit → first, first → last

Implementation uses shared helpers:

  • collect_commit_files: Recursively collects files (handles tree mode with nested directories)
  • find_current_position: Locates commit/file indices for boundary detection
  • update_cursor: Updates history panel cursor position

Notes

  • Uses async load_commit_files with callback pattern for responsive UI
  • Works with both list and tree view modes
  • Uses user-configured keymaps (keymaps.view.next_file/prev_file)
  • Existing navigation within expanded commits preserved
  • ⚠️ Unfortunately, the history panel does not "scroll" or move with the selected file
  • ⚠️ This PR is not necessarily cleanly implemented and just serves as a POC!

Recording

trimmed.mov

@fredrikaverpil fredrikaverpil marked this pull request as draft January 29, 2026 08:29
@fredrikaverpil fredrikaverpil force-pushed the feat/history-auto-expand-commits branch 2 times, most recently from 6738053 to 1e7f481 Compare January 29, 2026 08:39
When navigating files in history mode with ]f/[f, reaching the boundary
of a commit now automatically expands the adjacent commit:

- navigate_next at last file → expands next commit, selects first file
- navigate_prev at first file → expands previous commit, selects last file
- wrap-around supported (last commit → first, first → last)

Implementation uses shared helpers to reduce code duplication:
- collect_commit_files: recursively collects files (handles tree mode)
- find_current_position: locates commit/file indices for boundary detection
- update_cursor: updates history panel cursor position

Store load_commit_files on history object for access in navigation
functions, enabling async commit expansion with callback pattern.
@esmuellert
Copy link
Owner

The idea is good, and currently we indeed can't automatically expand the commit and open files in it, but I might need to take some time to look at the PR and evaluate it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants