summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorToby Vincent <tobyv13@gmail.com>2022-07-14 13:57:31 -0500
committerToby Vincent <tobyv13@gmail.com>2022-07-14 14:22:22 -0500
commitdf5e7d300d6e633dd5060e1ad9ff400038036e70 (patch)
tree7351434294ec66c44a0dd9e56886a938b988e9f6
parenta12c0e398a492051dec0f33075ead60eeca8abb3 (diff)
feat(nvim): improve gitsigns' keymaps
-rw-r--r--nvim/.config/nvim/lua/tobyvin/plugins/gitsigns.lua49
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils.lua17
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