local function open_git_status() local previous_win = vim.api.nvim_get_current_win() vim.cmd("leftabove vertical G") vim.api.nvim_win_set_width(0, 50) vim.api.nvim_set_option_value("winfixwidth", true, { scope = "local" }) 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 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 return win end end end local function toggle_git_status() local win = get_git_status_win() if win then vim.api.nvim_win_close(win, false) return end open_git_status() end vim.api.nvim_create_user_command("Glog", function(opts) local mods = opts.mods ~= "" and (opts.mods .. " ") or "" vim.cmd( mods .. "Git log --graph --all --decorate --date=short " .. "--format=format:'%h %ad {%an}%d %s' " .. opts.args ) end, { nargs = "*", desc = "Pretty git log via fugitive" }) vim.keymap.set("n", "gl", vim.cmd.Glog) vim.keymap.set("n", "gd", vim.cmd.Gvdiffsplit) vim.keymap.set("n", "gD", function() vim.cmd.Gvdiffsplit("HEAD") end) vim.keymap.set("n", "gh", vim.cmd.Ghdiffsplit) vim.keymap.set("n", "gH", function() vim.cmd.Ghdiffsplit("HEAD") end) vim.keymap.set("n", "gc", function() vim.cmd.G("commit") end) vim.keymap.set("n", "ga", function() vim.cmd.G("commit --amend") end) vim.keymap.set("n", "gp", function() vim.cmd.G("push") end) vim.keymap.set("n", "gg", toggle_git_status) vim.api.nvim_create_autocmd("User", { pattern = "GitRefresh", group = vim.api.nvim_create_augroup("ow.fugitive", { clear = true }), callback = function() vim.fn["fugitive#ReloadStatus"]() end, })