refactor(git): adopt lazy-require plugin/git.lua pattern
This commit is contained in:
+8
-24
@@ -227,27 +227,11 @@ vim.keymap.set("n", "<leader>fD", vim.diagnostic.setqflist)
|
||||
vim.keymap.set("n", "grt", vim.lsp.buf.type_definition)
|
||||
vim.keymap.set("n", "gd", vim.lsp.buf.definition)
|
||||
|
||||
vim.keymap.set("n", "<leader>gd", function()
|
||||
require("git.diff").split({ vertical = true })
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>gD", function()
|
||||
require("git.diff").split({ rev = "HEAD", vertical = true })
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>gh", function()
|
||||
require("git.diff").split({ vertical = false })
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>gH", function()
|
||||
require("git.diff").split({ rev = "HEAD", vertical = false })
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>gg", function()
|
||||
require("git.status_view").toggle()
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>gc", function()
|
||||
require("git.commit").commit()
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>ga", function()
|
||||
require("git.commit").commit({ args = { "--amend" } })
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>gl", function()
|
||||
require("git.log_view").open({ max_count = 1000 })
|
||||
end)
|
||||
vim.keymap.set("n", "<leader>gd", "<Plug>(git-diff-vertical)")
|
||||
vim.keymap.set("n", "<leader>gD", "<Plug>(git-diff-vertical-head)")
|
||||
vim.keymap.set("n", "<leader>gh", "<Plug>(git-diff-horizontal)")
|
||||
vim.keymap.set("n", "<leader>gH", "<Plug>(git-diff-horizontal-head)")
|
||||
vim.keymap.set("n", "<leader>gg", "<Plug>(git-status-toggle)")
|
||||
vim.keymap.set("n", "<leader>gc", "<Plug>(git-commit)")
|
||||
vim.keymap.set("n", "<leader>ga", "<Plug>(git-commit-amend)")
|
||||
vim.keymap.set("n", "<leader>gl", "<Plug>(git-log)")
|
||||
|
||||
@@ -1,187 +0,0 @@
|
||||
local DEFAULT_HIGHLIGHTS = {
|
||||
GitIgnored = "Comment",
|
||||
GitSha = "Identifier",
|
||||
GitStaged = "Constant",
|
||||
GitUnmerged = "Todo",
|
||||
GitUnpulled = "Removed",
|
||||
GitUnpushed = "Added",
|
||||
GitUnstaged = "Changed",
|
||||
GitUntracked = "Added",
|
||||
|
||||
GitStagedAdded = "GitStaged",
|
||||
GitStagedCopied = "GitStaged",
|
||||
GitStagedDeleted = "GitStaged",
|
||||
GitStagedModified = "GitStaged",
|
||||
GitStagedRenamed = "GitStaged",
|
||||
GitStagedTypeChanged = "GitStaged",
|
||||
|
||||
GitUnstagedAdded = "GitUnstaged",
|
||||
GitUnstagedCopied = "GitUnstaged",
|
||||
GitUnstagedDeleted = "Removed",
|
||||
GitUnstagedModified = "GitUnstaged",
|
||||
GitUnstagedRenamed = "GitStaged",
|
||||
GitUnstagedTypeChanged = "GitUnstaged",
|
||||
|
||||
GitUnmergedAddedByThem = "GitUnmerged",
|
||||
GitUnmergedAddedByUs = "GitUnmerged",
|
||||
GitUnmergedBothAdded = "GitUnmerged",
|
||||
GitUnmergedBothDeleted = "GitUnmerged",
|
||||
GitUnmergedBothModified = "GitUnmerged",
|
||||
GitUnmergedDeletedByThem = "GitUnmerged",
|
||||
GitUnmergedDeletedByUs = "GitUnmerged",
|
||||
}
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.init()
|
||||
for name, link in pairs(DEFAULT_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("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
|
||||
+17
-26
@@ -57,35 +57,26 @@ local function update_buf(buf, r)
|
||||
vim.b[buf].git_status_string = render(entry)
|
||||
end
|
||||
|
||||
local enabled = false
|
||||
|
||||
function M.enable()
|
||||
if enabled then
|
||||
return
|
||||
end
|
||||
enabled = true
|
||||
repo.on("refresh", function(r)
|
||||
for buf in pairs(r.buffers) do
|
||||
if vim.api.nvim_buf_is_loaded(buf) then
|
||||
update_buf(buf, r)
|
||||
end
|
||||
end
|
||||
vim.cmd.redrawstatus({ bang = true })
|
||||
end)
|
||||
vim.api.nvim_create_autocmd("BufWinEnter", {
|
||||
group = vim.api.nvim_create_augroup(
|
||||
"ow.git.statusline",
|
||||
{ clear = true }
|
||||
),
|
||||
callback = function(args)
|
||||
update_buf(args.buf, nil)
|
||||
end,
|
||||
})
|
||||
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
||||
repo.on("refresh", function(r)
|
||||
for buf in pairs(r.buffers) do
|
||||
if vim.api.nvim_buf_is_loaded(buf) then
|
||||
update_buf(buf, nil)
|
||||
update_buf(buf, r)
|
||||
end
|
||||
end
|
||||
vim.cmd.redrawstatus({ bang = true })
|
||||
end)
|
||||
|
||||
vim.api.nvim_create_autocmd("BufWinEnter", {
|
||||
group = vim.api.nvim_create_augroup("ow.git.statusline", { clear = true }),
|
||||
callback = function(args)
|
||||
update_buf(args.buf, nil)
|
||||
end,
|
||||
})
|
||||
|
||||
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
||||
if vim.api.nvim_buf_is_loaded(buf) then
|
||||
update_buf(buf, nil)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
|
||||
Reference in New Issue
Block a user