Save the window from which the LazyGit command was executed and return to it on exit, so in case of multiple splits the user does not have to navigate back manually blub
121 lines
3.1 KiB
Lua
121 lines
3.1 KiB
Lua
local open_floating_window = require"lazygit.window".open_floating_window
|
|
local project_root_dir = require"lazygit.utils".project_root_dir
|
|
local is_lazygit_available = require"lazygit.utils".is_lazygit_available
|
|
local is_symlink = require"lazygit.utils".is_symlink
|
|
|
|
local fn = vim.fn
|
|
|
|
LAZYGIT_BUFFER = nil
|
|
LAZYGIT_LOADED = false
|
|
vim.g.lazygit_opened = 0
|
|
local prev_win = -1
|
|
|
|
--- on_exit callback function to delete the open buffer when lazygit exits in a neovim terminal
|
|
local function on_exit(job_id, code, event)
|
|
if code ~= 0 then
|
|
return
|
|
end
|
|
|
|
vim.cmd('silent! :q')
|
|
LAZYGIT_BUFFER = nil
|
|
LAZYGIT_LOADED = false
|
|
vim.g.lazygit_opened = 0
|
|
vim.cmd('silent! :checktime')
|
|
if vim.api.nvim_win_is_valid(prev_win) then
|
|
vim.api.nvim_set_current_win(prev_win)
|
|
prev_win = -1
|
|
end
|
|
end
|
|
|
|
--- Call lazygit
|
|
local function exec_lazygit_command(cmd)
|
|
if LAZYGIT_LOADED == false then
|
|
-- ensure that the buffer is closed on exit
|
|
vim.g.lazygit_opened = 1
|
|
vim.fn.termopen(cmd, { on_exit = on_exit })
|
|
end
|
|
vim.cmd 'startinsert'
|
|
end
|
|
|
|
|
|
--- :LazyGit entry point
|
|
local function lazygit(path)
|
|
if is_lazygit_available() ~= true then
|
|
print('Please install lazygit. Check documentation for more information')
|
|
return
|
|
end
|
|
|
|
prev_win = vim.api.nvim_get_current_win()
|
|
|
|
open_floating_window()
|
|
|
|
local cmd = 'lazygit'
|
|
|
|
-- set path to the root path
|
|
_ = project_root_dir()
|
|
|
|
if path == nil then
|
|
if is_symlink() then
|
|
path = project_root_dir()
|
|
end
|
|
else
|
|
if fn.isdirectory(path) then
|
|
cmd = cmd .. ' -p ' .. path
|
|
end
|
|
end
|
|
|
|
exec_lazygit_command(cmd)
|
|
end
|
|
|
|
--- :LazyGitFilter entry point
|
|
local function lazygitfilter(path)
|
|
if is_lazygit_available() ~= true then
|
|
print('Please install lazygit. Check documentation for more information')
|
|
return
|
|
end
|
|
if path == nil then
|
|
path = project_root_dir()
|
|
end
|
|
prev_win = vim.api.nvim_get_current_win()
|
|
open_floating_window()
|
|
local cmd = 'lazygit ' .. '-f ' .. path
|
|
exec_lazygit_command(cmd)
|
|
end
|
|
|
|
--- :LazyGitConfig entry point
|
|
local function lazygitconfig()
|
|
local os = fn.substitute(fn.system('uname'), '\n', '', '')
|
|
local config_file = ''
|
|
if os == 'Darwin' then
|
|
config_file = '~/Library/Application Support/jesseduffield/lazygit/config.yml'
|
|
else
|
|
config_file = '~/.config/lazygit/config.yml'
|
|
end
|
|
if fn.empty(fn.glob(config_file)) == 1 then
|
|
-- file does not exist
|
|
-- check if user wants to create it
|
|
local answer = fn.confirm('File ' .. config_file
|
|
.. ' does not exist.\nDo you want to create the file and populate it with the default configuration?',
|
|
'&Yes\n&No')
|
|
if answer == 2 then
|
|
return nil
|
|
end
|
|
if fn.isdirectory(fn.fnamemodify(config_file, ':h')) == false then
|
|
-- directory does not exist
|
|
fn.mkdir(fn.fnamemodify(config_file, ':h'), 'p')
|
|
end
|
|
vim.cmd('edit ' .. config_file)
|
|
vim.cmd([[execute "silent! 0read !lazygit -c"]])
|
|
vim.cmd([[execute "normal 1G"]])
|
|
else
|
|
vim.cmd('edit ' .. config_file)
|
|
end
|
|
end
|
|
|
|
return {
|
|
lazygit = lazygit,
|
|
lazygitfilter = lazygitfilter,
|
|
lazygitconfig = lazygitconfig,
|
|
project_root_dir = project_root_dir,
|
|
}
|