Diffviewer changes focus to first file after save
Description
In diffview, after staging chunk of changes, the focus goes back to the first file in the navigator. This becomes a problem when diffing multiple files and auto-save plugin is enabled.
What happens is that I constantly need to find the last staged file, and move to the next one. It is quite an issue when trying to stage many different files.
https://github.com/user-attachments/assets/12657e65-7534-4dd6-8bc3-5e0aae6830d1
Neovim version
NVIM v0.10.1 Build type: Release LuaJIT 2.1.1720049189 Run "nvim -V1 -v" for more info
Operating system and version
Fedora Bluefin
Steps to reproduce
- Prepare repo:
mkdir /tmp/repro cd /tmp/repro echo "README\n" > README.md echo "UPDATING\n" > UPDATING.md echo "TEST\n" > TEST.md git add . git commit -m "Add files" - Make some changes:
echo "Hello There" >> README.md echo "Hello There" >> UPDATING.md echo "Hello There" >> TEST.md nvim -u minimal.lua:Neogit<CR>d u(open diff for unstaged files)- Stage changes for the first file
- Stage changes for the second file
Expected behavior
Focus should remain on the just-staged file.
Actual behavior
Focus moves to the first file in tree.
Minimal config
vim.env.LAZY_STDPATH = "/tmp/.repro"
load(vim.fn.system("curl -s https://raw.githubusercontent.com/folke/lazy.nvim/main/bootstrap.lua"))()
require("lazy.minit").repro({
spec = {
-- add any other plugins here
{
"NeogitOrg/neogit",
dependencies = {
"nvim-lua/plenary.nvim", -- required
"sindrets/diffview.nvim", -- optional - Diff integration
-- Only one of these is needed, not both.
"nvim-telescope/telescope.nvim", -- optional
"ibhagwan/fzf-lua", -- optional
},
config = true
},
},
})
I'd recommend just staging from Neogit, not diffview. Upon returning to the neogit buffer, it refreshes, and tries to save/restore the cursor position, but it'll fail to restore in this case and default to the first item.
You can stage individual hunks, or lines, from neogit itself, so diffview isn't really needed for that at all.
The default staging method is good only if you stage smaller blocks. For larger ones, the side-by-side diff offered by diffview is more convenient.
Since diffview is part of Neogit (although optional, I get it), I assume it should just work. Now, the overall UX is clunky.