172 lines
5.0 KiB
Lua
172 lines
5.0 KiB
Lua
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.init()
|
|
for name, link in pairs(HIGHLIGHTS) do
|
|
vim.api.nvim_set_hl(0, name, { link = link, default = true })
|
|
end
|
|
|
|
local group = vim.api.nvim_create_augroup("ow.git", { clear = true })
|
|
|
|
vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, {
|
|
group = group,
|
|
callback = function(args)
|
|
require("git.repo").track(args.buf)
|
|
end,
|
|
})
|
|
vim.api.nvim_create_autocmd({ "BufWritePost", "FileChangedShellPost" }, {
|
|
group = group,
|
|
callback = function(args)
|
|
require("git.repo").refresh(args.buf)
|
|
end,
|
|
})
|
|
vim.api.nvim_create_autocmd({ "BufDelete", "BufWipeout" }, {
|
|
group = group,
|
|
callback = function(args)
|
|
require("git.repo").unbind(args.buf)
|
|
end,
|
|
})
|
|
vim.api.nvim_create_autocmd("FocusGained", {
|
|
group = group,
|
|
callback = function()
|
|
require("git.repo").refresh_all()
|
|
end,
|
|
})
|
|
vim.api.nvim_create_autocmd("VimLeavePre", {
|
|
group = group,
|
|
callback = function()
|
|
require("git.repo").stop_all()
|
|
end,
|
|
})
|
|
|
|
vim.api.nvim_create_autocmd({ "VimEnter", "DirChanged", "TabEnter" }, {
|
|
group = group,
|
|
callback = function()
|
|
require("git.repo").update_cwd_repo()
|
|
end,
|
|
})
|
|
vim.api.nvim_create_autocmd("TabClosed", {
|
|
group = group,
|
|
callback = function(args)
|
|
local tab = tonumber(args.file) --[[@as integer?]]
|
|
if tab then
|
|
require("git.repo").release_tab(tab)
|
|
end
|
|
end,
|
|
})
|
|
|
|
vim.api.nvim_create_autocmd("BufReadCmd", {
|
|
pattern = "git://*",
|
|
group = group,
|
|
callback = function(args)
|
|
require("git.object").read_uri(args.buf)
|
|
end,
|
|
})
|
|
|
|
vim.api.nvim_create_autocmd("BufReadCmd", {
|
|
pattern = "gitlog://*",
|
|
group = group,
|
|
callback = function(args)
|
|
require("git.log_view").read_uri(args.buf)
|
|
end,
|
|
})
|
|
vim.api.nvim_create_autocmd("BufReadCmd", {
|
|
pattern = "gitstatus://*",
|
|
group = group,
|
|
callback = function(args)
|
|
require("git.status_view").read_uri(args.buf)
|
|
end,
|
|
})
|
|
vim.api.nvim_create_user_command("Glog", function(opts)
|
|
require("git.log_view").run_glog(opts)
|
|
end, {
|
|
nargs = "*",
|
|
complete = function(...)
|
|
return require("git.log_view").complete_glog(...)
|
|
end,
|
|
desc = "Show git log",
|
|
})
|
|
|
|
local function diff_split_cmd(vertical)
|
|
return function(opts)
|
|
require("git.diff").split({
|
|
rev = opts.args ~= "" and opts.args or nil,
|
|
vertical = vertical,
|
|
})
|
|
end
|
|
end
|
|
local function complete_rev(...)
|
|
return require("git.cmd").complete_rev(...)
|
|
end
|
|
vim.api.nvim_create_user_command("Gdiffsplit", diff_split_cmd(true), {
|
|
nargs = "?",
|
|
complete = complete_rev,
|
|
desc = "Diff against <rev>",
|
|
})
|
|
vim.api.nvim_create_user_command("Gvdiffsplit", diff_split_cmd(true), {
|
|
nargs = "?",
|
|
complete = complete_rev,
|
|
desc = "Diff against <rev> (vertical split)",
|
|
})
|
|
vim.api.nvim_create_user_command("Ghdiffsplit", diff_split_cmd(false), {
|
|
nargs = "?",
|
|
complete = complete_rev,
|
|
desc = "Diff against <rev> (horizontal split)",
|
|
})
|
|
vim.api.nvim_create_user_command("Gedit", function(opts)
|
|
vim.cmd.edit({
|
|
args = { require("git.object").URI_PREFIX .. opts.args },
|
|
magic = { file = false },
|
|
})
|
|
end, {
|
|
nargs = 1,
|
|
complete = complete_rev,
|
|
desc = "Edit a git object (<rev>)",
|
|
})
|
|
|
|
vim.api.nvim_create_user_command("G", function(opts)
|
|
local cmd = require("git.cmd")
|
|
cmd.run(cmd.parse_args(opts.args), { bang = opts.bang })
|
|
end, {
|
|
nargs = "*",
|
|
bang = true,
|
|
complete = function(...)
|
|
return require("git.cmd").complete(...)
|
|
end,
|
|
})
|
|
|
|
vim.api.nvim_create_user_command("Grefresh", function()
|
|
require("git.repo").refresh_all()
|
|
end, { desc = "Refresh git status for all repos" })
|
|
|
|
vim.api.nvim_create_user_command("Ghistory", function()
|
|
require("git.history").open()
|
|
end, { desc = "Open the git streaming output history" })
|
|
|
|
vim.api.nvim_create_user_command("Gstatus", function(opts)
|
|
require("git.status_view").open({
|
|
placement = opts.fargs[1] --[[@as ow.Git.StatusView.Placement]] or "split",
|
|
})
|
|
end, {
|
|
nargs = "?",
|
|
complete = function()
|
|
return require("git.status_view").PLACEMENTS
|
|
end,
|
|
desc = "Open git status view",
|
|
})
|
|
end
|
|
|
|
return M
|