feat(git): add custom status sidebar and diff viewer
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user