diff options
| author | Robert Günzler <r@gnzler.io> | 2024-05-15 09:00:31 +0200 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2024-05-15 09:00:31 +0200 |
| commit | 3dbe74f2eef627e2dc19b79fe06753d5dc09003f (patch) | |
| tree | b78d1cdab62cec9ed4bbe35447108547b935ef03 /.vim/after/ftplugin/gitrebase.lua | |
| parent | 0ab72c1113139c196115c974eadaded449002c32 (diff) | |
update nvim
Signed-off-by: Robert Günzler <r@gnzler.io>
Diffstat (limited to '.vim/after/ftplugin/gitrebase.lua')
| -rw-r--r-- | .vim/after/ftplugin/gitrebase.lua | 80 |
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' }) |