feat(git): add custom status sidebar and diff viewer

This commit is contained in:
2026-04-27 10:44:59 +02:00
parent bc93d6e2f7
commit 5a3e39574d
8 changed files with 1111 additions and 115 deletions
+73
View File
@@ -0,0 +1,73 @@
local repo = require("git.repo")
local HIGHLIGHTS = {
GitDeleted = "Removed",
GitIgnored = "Comment",
GitUnstaged = "Changed",
GitRenamed = "GitStaged",
GitSha = "Identifier",
GitStaged = "Constant",
GitUnmerged = "Todo",
GitUnpulled = "Removed",
GitUnpushed = "Added",
GitUntracked = "Added",
}
local M = {}
function M.status()
return vim.b.git_status or ""
end
---@param path string
---@return string?
function M.head(path)
return repo.head(path)
end
function M.setup()
for name, link in pairs(HIGHLIGHTS) do
vim.api.nvim_set_hl(0, name, { link = link, default = true })
end
vim.filetype.add({
pattern = {
["git://[^/]+/(.+)"] = function(_, bufnr, inner)
return vim.filetype.match({ filename = inner, buf = bufnr })
end,
},
})
local group = vim.api.nvim_create_augroup("ow.git", { clear = true })
vim.api.nvim_create_autocmd(
{ "BufReadPost", "BufNewFile", "BufWritePost", "FileChangedShellPost" },
{
group = group,
callback = function(args)
repo.refresh_buf(args.buf)
end,
}
)
vim.api.nvim_create_autocmd({ "BufDelete", "BufWipeout" }, {
group = group,
callback = function(args)
repo.unregister(args.buf)
end,
})
vim.api.nvim_create_autocmd("FocusGained", {
group = group,
callback = function()
repo.refresh_buf(vim.api.nvim_get_current_buf())
end,
})
vim.api.nvim_create_autocmd("VimLeavePre", {
group = group,
callback = function()
repo.stop_all()
end,
})
vim.keymap.set("n", "<leader>gg", function()
require("git.status_win").toggle()
end, { desc = "Toggle git status sidebar" })
end
return M