diff options
Diffstat (limited to 'nvim')
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua | 49 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/utils.lua | 17 |
2 files changed, 55 insertions, 11 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua index 1b59f3b..a7d9dfd 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua @@ -1,5 +1,42 @@ +local utils = require("tobyvin.utils") local M = {} +M.with_selection = function(callback) + return function() + callback(utils.get_visual_range()) + end +end + +M.show_blameline = function() + require("gitsigns").blame_line({ full = true }) +end + +M.on_attach = function(bufnr) + local gitsigns = require("gitsigns") + local nmap = utils.create_map_group("n", "<leader>g", { name = "Git", buffer = bufnr }) + nmap("b", gitsigns.blame_line, { desc = "Show blame" }) + nmap("B", M.show_blameline, { desc = "Show blame" }) + nmap("<C-b>", gitsigns.toggle_current_line_blame, { desc = "Toggle blame line" }) + nmap("j", gitsigns.next_hunk, { desc = "Next Hunk" }) + nmap("k", gitsigns.prev_hunk, { desc = "Prev Hunk" }) + + nmap("p", gitsigns.preview_hunk, { desc = "Preview Hunk" }) + nmap("r", gitsigns.reset_hunk, { desc = "Reset Hunk" }) + nmap("s", gitsigns.stage_hunk, { desc = "Stage Hunk" }) + nmap("u", gitsigns.undo_stage_hunk, { desc = "Undo Stage Hunk" }) + + -- nmap("P", gitsigns.preview_buffer, { desc = "Preview Buffer" }) + nmap("R", gitsigns.reset_buffer, { desc = "Reset Buffer" }) + nmap("S", gitsigns.stage_buffer, { desc = "Stage Buffer" }) + nmap("U", gitsigns.reset_buffer_index, { desc = "Undo Stage Buffer" }) + + local vmap = utils.create_map_group("v", "<leader>g", { name = "Git", buffer = bufnr }) + vmap("p", M.with_selection(gitsigns.preview_hunk), { desc = "Preview Hunk" }) + vmap("r", M.with_selection(gitsigns.reset_hunk), { desc = "Reset Hunk" }) + vmap("s", M.with_selection(gitsigns.stage_hunk), { desc = "Stage Hunk" }) + vmap("u", M.with_selection(gitsigns.undo_stage_hunk), { desc = "Undo Stage Hunk" }) +end + M.setup = function() local status_ok, gitsigns = pcall(require, "gitsigns") if not status_ok then @@ -7,8 +44,6 @@ M.setup = function() return end - local nmap = require("tobyvin.utils").create_map_group("n", "<leader>g", { name = "Git" }) - gitsigns.setup({ signs = { add = { text = "▎" }, @@ -19,15 +54,7 @@ M.setup = function() }, current_line_blame = true, preview_config = { border = "rounded" }, - on_attach = function() - nmap("j", gitsigns.next_hunk, { desc = "Next Hunk" }) - nmap("k", gitsigns.prev_hunk, { desc = "Prev Hunk" }) - nmap("p", gitsigns.preview_hunk, { desc = "Preview Hunk" }) - nmap("r", gitsigns.reset_hunk, { desc = "Reset Hunk" }) - nmap("R", gitsigns.reset_buffer, { desc = "Reset Buffer" }) - nmap("s", gitsigns.stage_hunk, { desc = "Stage Hunk" }) - nmap("u", gitsigns.undo_stage_hunk, { desc = "Undo Stage Hunk" }) - end, + on_attach = M.on_attach, }) end diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua index 5ea07aa..ace6ea9 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils.lua @@ -1,5 +1,22 @@ local M = {} +M.escape = function() + local key = "<ESC>" + vim.api.nvim_replace_termcodes(key, true, false, true) + vim.api.nvim_feedkeys(key, "x", true) + -- vim.api.nvim_input("<ESC>") + -- vim.wait(100, function() + -- return "n" == vim.fn.mode() + -- end) +end + +M.get_visual_range = function() + local start_pos = vim.fn.getpos("v") + local end_pos = vim.fn.getcurpos() + return { start_pos[2], end_pos[2] } + -- return { { line = start_pos[2], col = start_pos[3] }, { line = end_pos[2], col = end_pos[3] } } +end + --- Wrapper for bdelete/bwipeout to add a write/discard modified selection and fire autocmd event ---@param opts ?BdeleteOpts ---@return nil |