From ae4c829b4e39b27e5b8012b0ddeabb6d5cc02e65 Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.uk>
Date: Fri, 11 Aug 2023 00:26:36 +0100
Subject: [PATCH] chore(nvim): update gitsigns keymaps

---
 config/neovim/after/plugin/gitsigns.lua | 26 +++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/config/neovim/after/plugin/gitsigns.lua b/config/neovim/after/plugin/gitsigns.lua
index 14dfb742..cf8f92cf 100644
--- a/config/neovim/after/plugin/gitsigns.lua
+++ b/config/neovim/after/plugin/gitsigns.lua
@@ -8,9 +8,23 @@ gitsigns.setup {
   numhl = true,
 }
 
-vim.keymap.set('n', '[h', "<cmd>Gitsigns prev_hunk<cr>");
-vim.keymap.set('n', ']h', "<cmd>Gitsigns next_hunk<cr>");
-vim.keymap.set('n', 'gS', "<cmd>Gitsigns undo_stage_hunk<cr>");
-vim.keymap.set('n', 'gb', "<cmd>Gitsigns blame_line<cr>");
-vim.keymap.set('n', 'gp', "<cmd>Gitsigns preview_hunk<cr>");
-vim.keymap.set('n', 'gs', "<cmd>Gitsigns stage_hunk<cr>");
+local bufnr = vim.api.nvim_get_current_buf()
+
+local map = require "opdavies.keymap".map
+local nmap = require "opdavies.keymap".nmap
+local vmap = require "opdavies.keymap".vmap
+
+nmap { '[h', "&diff ? '[c' : '<cmd>Gitsigns prev_hunk<CR>'", { expr = true, buffer = bufnr }}
+nmap { ']h', "&diff ? ']c' : '<cmd>Gitsigns next_hunk<CR>'", { expr = true, buffer = bufnr }}
+
+nmap { '<leader>hR', gitsigns.reset_buffer }
+nmap { '<leader>hS', gitsigns.stage_buffer }
+nmap { '<leader>hp', gitsigns.preview_hunk }
+nmap { '<leader>hr', gitsigns.reset_hunk }
+nmap { '<leader>hs', gitsigns.stage_hunk }
+nmap { '<leader>hu', gitsigns.undo_stage_hunk }
+vmap { '<leader>hr', function() gitsigns.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end }
+vmap { '<leader>hs', function() gitsigns.stage_hunk { vim.fn.line('.'), vim.fn.line('v')} end }
+
+-- Text object.
+map{ {'o', 'x'}, 'ih', ':<C-U>Gitsigns select_hunk<CR>' }