fix: improve git workflow
This commit is contained in:
+38
@@ -0,0 +1,38 @@
|
|||||||
|
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,
|
||||||
|
}
|
||||||
+8
-15
@@ -1,26 +1,19 @@
|
|||||||
local M = {}
|
local function open(cmd)
|
||||||
|
|
||||||
-- Open a command in a simple centered floating window
|
|
||||||
function M.open_terminal_app(cmd)
|
|
||||||
local buf = vim.api.nvim_create_buf(false, true)
|
|
||||||
vim.bo[buf].bufhidden = "wipe"
|
|
||||||
|
|
||||||
local lines = vim.o.lines - vim.o.cmdheight - (vim.o.laststatus > 0 and 1 or 0)
|
local lines = vim.o.lines - vim.o.cmdheight - (vim.o.laststatus > 0 and 1 or 0)
|
||||||
local w = math.floor(vim.o.columns * 0.95)
|
local w, h = math.floor(vim.o.columns * 0.95), math.floor(lines * 0.95)
|
||||||
local h = math.floor(lines * 0.95)
|
local buf = vim.api.nvim_create_buf(false, true)
|
||||||
|
vim.bo[buf].bufhidden = 'wipe'
|
||||||
|
|
||||||
local win = vim.api.nvim_open_win(buf, true, {
|
local win = vim.api.nvim_open_win(buf, true, {
|
||||||
relative = "editor",
|
relative = 'editor',
|
||||||
width = w,
|
width = w,
|
||||||
height = h,
|
height = h,
|
||||||
row = math.floor((lines - h) / 2),
|
row = math.floor((lines - h) / 2),
|
||||||
col = math.floor((vim.o.columns - w) / 2),
|
col = math.floor((vim.o.columns - w) / 2),
|
||||||
border = "rounded",
|
border = 'rounded',
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.fn.termopen(cmd, {
|
vim.fn.termopen(cmd, { on_exit = function() pcall(vim.api.nvim_win_close, win, true) end })
|
||||||
on_exit = function() pcall(vim.api.nvim_win_close, win, true) end,
|
|
||||||
})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return { open = open }
|
||||||
|
|||||||
@@ -51,10 +51,11 @@ Config.later(function()
|
|||||||
jump = { on_jump = vim.diagnostic.open_float },
|
jump = { on_jump = vim.diagnostic.open_float },
|
||||||
signs = {
|
signs = {
|
||||||
priority = 9999,
|
priority = 9999,
|
||||||
severity = { min = vim.diagnostic.severity.WARN },
|
severity = { min = vim.diagnostic.severity.INFO },
|
||||||
text = {
|
text = {
|
||||||
[vim.diagnostic.severity.ERROR] = '',
|
[vim.diagnostic.severity.ERROR] = '',
|
||||||
[vim.diagnostic.severity.WARN] = '',
|
[vim.diagnostic.severity.WARN] = '',
|
||||||
|
[vim.diagnostic.severity.INFO] = '',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
virtual_text = false,
|
virtual_text = false,
|
||||||
|
|||||||
+5
-12
@@ -73,21 +73,14 @@ nmap_leader('fG', '<Cmd>lua MiniPick.builtin.grep({ pattern = vim.fn.expand("<cw
|
|||||||
nmap_leader('fh', '<Cmd>lua MiniPick.builtin.help()<CR>', 'Help tags')
|
nmap_leader('fh', '<Cmd>lua MiniPick.builtin.help()<CR>', 'Help tags')
|
||||||
nmap_leader('fl', '<Cmd>lua MiniPick.builtin.buf_lines({ scope = "all" })<CR>', 'Lines (all)')
|
nmap_leader('fl', '<Cmd>lua MiniPick.builtin.buf_lines({ scope = "all" })<CR>', 'Lines (all)')
|
||||||
nmap_leader('fL', '<Cmd>lua MiniPick.builtin.buf_lines({ scope = "current" })<CR>', 'Lines (buf)')
|
nmap_leader('fL', '<Cmd>lua MiniPick.builtin.buf_lines({ scope = "current" })<CR>', 'Lines (buf)')
|
||||||
|
nmap_leader('fm', '<Cmd>lua require("git").status()<CR>', 'Modified / changed files')
|
||||||
nmap_leader('fr', '<Cmd>lua MiniPick.builtin.resume()<CR>', 'Resume')
|
nmap_leader('fr', '<Cmd>lua MiniPick.builtin.resume()<CR>', 'Resume')
|
||||||
nmap_leader('fs', '<Cmd>lua MiniExtra.pickers.lsp({ scope = "workspace_symbol_live" })<CR>', 'Symbols workspace')
|
nmap_leader('fs', '<Cmd>lua MiniExtra.pickers.lsp({ scope = "workspace_symbol_live" })<CR>', 'Symbols workspace')
|
||||||
nmap_leader('fS', '<Cmd>lua MiniExtra.pickers.lsp({ scope = "document_symbol" })<CR>', 'Symbols document')
|
nmap_leader('fS', '<Cmd>lua MiniExtra.pickers.lsp({ scope = "document_symbol" })<CR>', 'Symbols document')
|
||||||
nmap_leader('f:', '<Cmd>lua MiniExtra.pickers.history({ scope = ":" })<CR>', 'Command history')
|
nmap_leader('f:', '<Cmd>lua MiniExtra.pickers.history({ scope = ":" })<CR>', 'Command history')
|
||||||
|
|
||||||
-- Git
|
-- Git
|
||||||
local git_log_cmd = [[Git log --pretty=format:\%h\ \%as\ │\ \%s --topo-order]]
|
nmap_leader('ga', '<Cmd>Git add %<CR>', 'Add current file')
|
||||||
local git_log_buf_cmd = git_log_cmd .. ' --follow -- %'
|
|
||||||
|
|
||||||
nmap_leader('ga', '<Cmd>Git diff --cached<CR>', 'Added diff')
|
|
||||||
nmap_leader('gA', '<Cmd>Git diff --cached -- %<CR>', 'Added diff buffer')
|
|
||||||
nmap_leader('gd', '<Cmd>Git diff<CR>', 'Diff')
|
|
||||||
nmap_leader('gD', '<Cmd>Git diff -- %<CR>', 'Diff buffer')
|
|
||||||
nmap_leader('gl', '<Cmd>' .. git_log_cmd .. '<CR>', 'Log')
|
|
||||||
nmap_leader('gL', '<Cmd>' .. git_log_buf_cmd .. '<CR>', 'Log buffer')
|
|
||||||
nmap_leader('go', '<Cmd>lua MiniDiff.toggle_overlay()<CR>', 'Toggle overlay')
|
nmap_leader('go', '<Cmd>lua MiniDiff.toggle_overlay()<CR>', 'Toggle overlay')
|
||||||
nmap_leader('gs', '<Cmd>lua MiniGit.show_at_cursor()<CR>', 'Show at cursor')
|
nmap_leader('gs', '<Cmd>lua MiniGit.show_at_cursor()<CR>', 'Show at cursor')
|
||||||
xmap_leader('gs', '<Cmd>lua MiniGit.show_at_cursor()<CR>', 'Show at selection')
|
xmap_leader('gs', '<Cmd>lua MiniGit.show_at_cursor()<CR>', 'Show at selection')
|
||||||
@@ -112,9 +105,9 @@ nmap_leader('rs', '<Cmd>lua require("kulala").run()<CR>', 'Send HTTP request')
|
|||||||
nmap_leader('tT', '<Cmd>horizontal term<CR>', 'Terminal (horizontal)')
|
nmap_leader('tT', '<Cmd>horizontal term<CR>', 'Terminal (horizontal)')
|
||||||
nmap_leader('tt', '<Cmd>vertical term<CR>', 'Terminal (vertical)')
|
nmap_leader('tt', '<Cmd>vertical term<CR>', 'Terminal (vertical)')
|
||||||
nmap_leader('tc', '<Cmd>vertical term claude<CR>', 'Claude')
|
nmap_leader('tc', '<Cmd>vertical term claude<CR>', 'Claude')
|
||||||
nmap_leader('tf', '<Cmd>lua require("terminal").open_terminal_app(vim.o.shell)<CR>', 'Terminal (popup)')
|
nmap_leader('tf', '<Cmd>lua require("terminal").open(vim.o.shell)<CR>', 'Terminal (popup)')
|
||||||
nmap_leader('tg', '<Cmd>lua require("terminal").open_terminal_app("lazygit")<CR>', 'LazyGit')
|
nmap_leader('tg', '<Cmd>lua require("terminal").open("lazygit")<CR>', 'LazyGit')
|
||||||
nmap_leader('ts', '<Cmd>lua require("terminal").open_terminal_app("lazysql")<CR>', 'LazySQL')
|
nmap_leader('ts', '<Cmd>lua require("terminal").open("lazysql")<CR>', 'LazySQL')
|
||||||
|
|
||||||
-- Tabs
|
-- Tabs
|
||||||
nmap_leader('<Tab><Tab>', '<Cmd>tabnew<CR>', 'New tab')
|
nmap_leader('<Tab><Tab>', '<Cmd>tabnew<CR>', 'New tab')
|
||||||
|
|||||||
Reference in New Issue
Block a user