when grepping for commits, searching for author initials is now possible, and will be prioritized first. this means typing ma for marcus for example will give you all commits from marcus. if no hits are found on initials it will apply that grep to the name/titles. also some highlighing has been added to commit grep
updated stash grep to include possiblility to grep for time and branches. this means you can filter for branches and times
Implement comprehensive interactive staging functionality that allows
users
to stage and unstage individual lines, similar to `git add -p` but with
a
visual interface.
New features:
- Split view mode showing unstaged changes (left) and staged changes
(right)
- Line-by-line staging: press Space on any diff line to stage/unstage it
- Tab switching between unstaged and staged panes
- Apply staged changes with 'a' key (runs `git apply --cached`)
- Visual indicators for staged vs unstaged content with proper syntax
highlighting
- Interactive unstaging: switch to staged pane and press Space to
unstage lines
- Automatic refresh of git status after staging/unstaging operations
- Proper git integration reading from both working directory and staging
area
Technical implementation:
- Added `load_file_with_staging_info()` to load unstaged changes
(staging vs working)
- Added `rebuild_staged_view_from_git()` to load staged changes (HEAD vs
staging)
- Added `stage_hunk_by_line()` for individual line staging
- Added `unstage_line_from_git()` for removing lines from staging area
- Added `apply_staged_changes()` to apply staged content to git
- Enhanced file content window with split view rendering
- Added proper cursor management for both unstaged and staged panes
This transforms the diff viewer into a full-featured interactive staging
tool,
allowing developers to create atomic commits with only specific lines
rather
than entire files.
Keybindings:
- Enter: Switch to split staging view
- Tab: Switch between unstaged/staged panes
- Space: Stage/unstage current line
- 'a': Apply staged changes to git
- 'c': Commit staged changes
- 'r': Reset staged changes
if you hover over a branc now you can see the commit history on that branch. it will display the hash author date title and message associated with that commit. very good very nice!!!!
the view pane was working good and scrolling was fine, but it was impossible to know which line you were on because there was no cursor. this is now added, scrolling with j k ctrl d and ctrl u now works just like in vim (I LOVE VIM) this is just a change for satisfaction for now but will come in handy in the future when i make line by line and hunk staging and commitng. as comitting is onlyy possible file by file right now
ever messed up a feature and its not working, and you just dont want to work on that shit anymore, well thats how i use stash. all the changes into the stash so that i can fix it in the future (will never get worked on in the future)
this change is aiming to fix the files still appearing in unstaged files even though it was just comitted. also the Pushing command would say synced! when done, this was just a filler from the fetching feature. this now has a Pushed! status, the same has been added to pulling
this is a change that makes it able to have this view open without having any changes in the code. also makes it able to go into the commits pane and hit p to pull that commit
- Add ncurses-based interactive git diff viewer (gg dd command)
- Create three-pane layout: file list, commit history, and diff
content
- Implement file staging system with space/A keys for marking files
- Add commit workflow with C key and title input dialog
- Add push functionality with P key for individual commits
- Create dynamic status bar with context-sensitive keybindings
- Implement character-by-character text animations for status messages
- Add auto-sync functionality to refresh files/commits every 30
seconds
- Add spinning progress indicators for fetch/push operations
- Fix cursor flickering and improve window layout spacing
- Support number key navigation (1=files, 2=view, 3=commits)
- Add proper window clearing to prevent content overlap issues