feat(git): add status diff tab binding

This commit is contained in:
2026-06-10 17:48:45 +02:00
parent 523f1dbcda
commit c255fcd6e9
+38 -8
View File
@@ -6,20 +6,45 @@ local function open_git_status()
vim.api.nvim_set_current_win(previous_win)
end
local function get_git_status_win()
local current_tabpage = vim.api.nvim_get_current_tabpage()
for _, win in ipairs(vim.api.nvim_tabpage_list_wins(current_tabpage)) do
---@param buf integer
---@return boolean
local function is_git_status_buffer(buf)
return vim.fn.getbufvar(buf, "fugitive_type") == "index"
end
---@param tabpage integer?
---@return integer?
local function get_git_status_win(tabpage)
tabpage = tabpage or vim.api.nvim_get_current_tabpage()
for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tabpage)) do
local buf = vim.api.nvim_win_get_buf(win)
local buftype = vim.api.nvim_get_option_value("buftype", { buf = buf })
if
buftype == "nowrite"
and vim.api.nvim_buf_get_name(buf):match("^fugitive://.*%.git//$")
then
if is_git_status_buffer(buf) then
return win
end
end
end
local function git_status_diffsplit()
local status_win = vim.api.nvim_get_current_win()
local ok, err = pcall(function()
vim.api.nvim_win_call(status_win, function()
vim.cmd("normal dv")
end)
end)
if not ok then
error(err, 0)
end
end
---@param args vim.api.keyset.create_autocmd.callback_args
local function on_git_status(args)
vim.keymap.set("n", "<Tab>", git_status_diffsplit, {
buffer = args.buf,
desc = "Open file diff without changing focus",
silent = true,
})
end
local function toggle_git_status()
local win = get_git_status_win()
if win then
@@ -35,6 +60,11 @@ vim.api.nvim_create_user_command(
{ desc = "Toggle fugitive git status window" }
)
vim.api.nvim_create_autocmd("User", {
pattern = "FugitiveIndex",
callback = on_git_status,
})
vim.api.nvim_create_user_command("Glog", function(opts)
local mods = opts.mods ~= "" and (opts.mods .. " ") or ""
vim.cmd(