summary refs log tree commit diff
path: root/.vim/after/ftplugin/gitrebase.lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.vim/after/ftplugin/gitrebase.lua80
1 files changed, 27 insertions, 53 deletions
diff --git a/.vim/after/ftplugin/gitrebase.lua b/.vim/after/ftplugin/gitrebase.lua
index e48b296..6b9e5dc 100644
--- a/.vim/after/ftplugin/gitrebase.lua
+++ b/.vim/after/ftplugin/gitrebase.lua
@@ -1,59 +1,33 @@
-local commit_preview = function()
+local function commit_preview()
+  local beforewin = vim.api.nvim_get_current_win()
   local commit = vim.api.nvim_get_current_line():match([[ ([0-9a-f]+) ]])
-  local result = require('internal.job')
-    .jobstart({
-      command = 'git',
-      args = { 'show', commit },
-      format_title = function(_, _)
-        return 'git-show'
-      end,
-      populate_quickfix = false,
-    })
-    :wait()
-    :result()
-
-  -- create buffer
-  local bufnr = vim.api.nvim_create_buf(false, true)
-  assert(bufnr, 'Failed to create buffer')
-  vim.api.nvim_buf_set_name(bufnr, commit)
-  vim.api.nvim_buf_set_option(bufnr, 'filetype', 'git')
-  -- add lines
-  vim.api.nvim_buf_set_option(bufnr, 'modifiable', true)
-  vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, result)
-  vim.api.nvim_buf_set_option(bufnr, 'modifiable', false)
+  if not commit then
+    return
+  end
+  require('internal.commit-preview').commit_preview(commit, function(bufnr, winid)
+    -- keymaps:
+    local close = function()
+      pcall(vim.api.nvim_win_close, winid, true)
+      pcall(vim.api.nvim_buf_delete, bufnr, { force = true })
+    end
+    vim.keymap.set('n', 'q', close, { buffer = bufnr })
 
-  -- create window
-  local winpos = 'belowright'
-  local winheight = #result <= 25 and #result or 25
-  vim.cmd(string.format('%s %dsplit', winpos, winheight))
-  local winid = vim.api.nvim_get_current_win()
-  -- vim.cmd(string.format("buffer %d", bufnr))
-  vim.api.nvim_win_set_buf(winid, bufnr)
-  vim.cmd('wincmd p')
+    local goup = function()
+      vim.api.nvim_set_current_win(beforewin)
+      vim.cmd('normal k')
+      vim.cmd('normal cp')
+    end
+    vim.keymap.set('n', '<up>', goup, { buffer = bufnr })
+    vim.keymap.set('n', '<C-p>', goup, { buffer = bufnr })
 
-  local close = function()
-    pcall(vim.api.nvim_win_close, winid, true)
-    pcall(vim.api.nvim_buf_delete, bufnr, { force = true })
-  end
-  -- close with q
-  vim.keymap.set('n', 'q', close, { buffer = bufnr })
-  -- close on CursorMoved
-  local old_cursor = vim.api.nvim_win_get_cursor(0)
-  local group = vim.api.nvim_create_augroup('gitcommit_win_' .. winid, {})
-  vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
-    group = group,
-    callback = function()
-      local cursor = vim.api.nvim_win_get_cursor(0)
-      if
-        (old_cursor[1] ~= cursor[1] or old_cursor[2] ~= cursor[2])
-        and vim.api.nvim_get_current_win() ~= winid
-      then
-        close()
-        return
-      end
-      old_cursor = cursor
-    end,
-  })
+    local godown = function()
+      vim.api.nvim_set_current_win(beforewin)
+      vim.cmd('normal j')
+      vim.cmd('normal cp')
+    end
+    vim.keymap.set('n', '<down>', godown, { buffer = bufnr })
+    vim.keymap.set('n', '<C-n>', godown, { buffer = bufnr })
+  end)
 end
 
 vim.keymap.set('n', 'cp', commit_preview, { buffer = 0, desc = 'commit preview' })