Files
neovim-config/lua/git.lua
T
2026-09-11 20:41:09 +02:00

39 lines
1.2 KiB
Lua

local ns = vim.api.nvim_create_namespace('git_status')
local hls = { M = 'DiagnosticWarn', ['?'] = 'DiagnosticInfo', A = 'DiagnosticOk', D = 'DiagnosticError', R = 'DiagnosticWarn' }
local function show(buf_id, items, query)
MiniPick.default_show(buf_id, items, query)
vim.api.nvim_buf_clear_namespace(buf_id, ns, 0, -1)
for i, item in ipairs(items) do
local hl = hls[item.text:match('%S')]
if hl then
vim.api.nvim_buf_set_extmark(buf_id, ns, i - 1, 0, { end_col = 2, hl_group = hl, priority = 202, hl_mode = 'combine' })
end
end
end
return {
status = function()
local items = {}
for _, l in ipairs(vim.fn.systemlist('git status -s -u')) do
local p = l:sub(4):gsub('.* %-> ', '')
if vim.uv.fs_stat(p) then items[#items + 1] = { text = l, path = p } end
end
if #items == 0 then return vim.notify('No changes') end
MiniPick.start({
source = { items = items, name = 'Git Status', show = show },
mappings = {
quickfix = {
char = '<C-q>',
func = function()
local m = MiniPick.get_picker_matches()
MiniPick.default_choose_marked(#m.marked > 0 and m.marked or m.all)
return true
end,
},
},
})
end,
}