137 lines
3.6 KiB
Lua
137 lines
3.6 KiB
Lua
local open_floating_window = require"lazygit.window".open_floating_window
|
|
local project_root_dir = require"lazygit.utils".project_root_dir
|
|
local get_root = require"lazygit.utils".get_root
|
|
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
|
|
|
|
--- :LazyGitCurrentFile entry point
|
|
local function lazygitcurrentfile()
|
|
local current_dir = vim.fn.expand('%:p:h')
|
|
local git_root = get_root(current_dir)
|
|
lazygit(git_root)
|
|
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
|
|
|
|
--- :LazyGitFilterCurrentFile entry point
|
|
local function lazygitfiltercurrentfile()
|
|
local current_file = vim.fn.expand('%')
|
|
lazygitfilter(current_file)
|
|
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,
|
|
lazygitcurrentfile = lazygitcurrentfile,
|
|
lazygitfilter = lazygitfilter,
|
|
lazygitfiltercurrentfile = lazygitfiltercurrentfile,
|
|
lazygitconfig = lazygitconfig,
|
|
project_root_dir = project_root_dir,
|
|
}
|