refactor(git): rewrite diff module around :diffsplit

This commit is contained in:
2026-05-19 14:30:34 +02:00
parent 8fe4d0c6a7
commit 897de35688
5 changed files with 241 additions and 181 deletions
+14 -12
View File
@@ -142,22 +142,18 @@ end
local DIFF_DIRECTIONS = { "vertical", "horizontal" }
local function default_vertical()
return vim.tbl_contains(vim.opt.diffopt:get(), "vertical")
end
vim.api.nvim_create_user_command("Gdiffsplit", function(opts)
local fargs = opts.fargs
local vertical = default_vertical()
local mods = nil
local rev_idx = 1
if fargs[1] == "vertical" then
vertical = true
mods = { vertical = true }
rev_idx = 2
elseif fargs[1] == "horizontal" then
vertical = false
mods = { vertical = false }
rev_idx = 2
end
require("git.diff").split({ rev = fargs[rev_idx], vertical = vertical })
require("git.diff").split({ target = fargs[rev_idx], mods = mods })
end, {
nargs = "*",
complete = function(arg_lead, cmd_line, _)
@@ -219,16 +215,22 @@ vim.keymap.set("n", "<Plug>(git-edit)", function()
end, { silent = true, desc = "Edit a git object" })
vim.keymap.set("n", "<Plug>(git-diff-vertical)", function()
require("git.diff").split({ vertical = true })
require("git.diff").split({ mods = { vertical = true } })
end, { silent = true, desc = "Diff against index (vertical)" })
vim.keymap.set("n", "<Plug>(git-diff-horizontal)", function()
require("git.diff").split({ vertical = false })
require("git.diff").split({ mods = { vertical = false } })
end, { silent = true, desc = "Diff against index (horizontal)" })
vim.keymap.set("n", "<Plug>(git-diff-vertical-head)", function()
require("git.diff").split({ rev = "HEAD", vertical = true })
require("git.diff").split({
target = "HEAD",
mods = { vertical = true },
})
end, { silent = true, desc = "Diff against HEAD (vertical)" })
vim.keymap.set("n", "<Plug>(git-diff-horizontal-head)", function()
require("git.diff").split({ rev = "HEAD", vertical = false })
require("git.diff").split({
target = "HEAD",
mods = { vertical = false },
})
end, { silent = true, desc = "Diff against HEAD (horizontal)" })
vim.keymap.set("n", "<Plug>(git-status-toggle)", function()