clean up and add some ducumentation

This commit is contained in:
thefux
2022-03-06 15:05:18 +01:00
4 changed files with 77 additions and 49 deletions

View File

@@ -94,3 +94,28 @@ If you have `neovim-remote` and don't want `lazygit.nvim` to use it, you can dis
```vim
let g:lazygit_use_neovim_remote = 0
```
###Telescope Plugin
the telescope Plugin is used to track all git repository visited in one nvim session.
__why a telescope Plugin__ ?
Assuming you have one or more submodule(s) in your project and you want to commit changes in both the submodule(s)
and the main repo. Though switching between submodules and main repo is not strait forward. My solution was at first,
1. open a file inside the submodule
2. open lazygit
3. do commit
4. then open a file in the main repo
5. open lazygit
6. do commit
that was really and ennoying for me
so I though about traking all the repo I visited an I can choose from the list which one I'd like to commit in.
``` lua
require('telescope').load_extension('lazygit_telescope')
```
``` lua
autocmd BufEnter * :lua require('lazygit.utils').project_root_dir()
```

View File

@@ -9,25 +9,17 @@ LAZYGIT_BUFFER = nil
LAZYGIT_LOADED = false
vim.g.lazygit_opened = 0
local function clean_up_after_exit()
-- Close the window where the LAZYGIT_BUFFER is
vim.cmd('silent! :q')
LAZYGIT_BUFFER = nil
LAZYGIT_LOADED = false
vim.g.lazygit_opened = 0
-- make sure to update current open buffer after closing the window
--
vim.cmd('silent! :checktime')
end
--- 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
clean_up_after_exit()
vim.cmd('silent! :q')
LAZYGIT_BUFFER = nil
LAZYGIT_LOADED = false
vim.g.lazygit_opened = 0
vim.cmd('silent! :checktime')
end
--- Call lazygit

View File

@@ -5,17 +5,17 @@ local lazygit_visited_git_repos = {}
-- TODO:check if the repo isa git repo
local function append_git_repo_path(repo_path)
if repo_path == nil or not fn.isdirectory(repo_path) then
return
end
if repo_path == nil or not fn.isdirectory(repo_path) then
return
end
for _, path in ipairs(lazygit_visited_git_repos) do
if path == repo_path then
return
end
for _, path in ipairs(lazygit_visited_git_repos) do
if path == repo_path then
return
end
end
table.insert(lazygit_visited_git_repos, tostring(repo_path))
table.insert(lazygit_visited_git_repos, tostring(repo_path))
end
@@ -26,25 +26,25 @@ end
local function get_root()
local cwd = vim.loop.cwd()
local status, job = pcall(require, 'plenary.job')
if not status then
local gitdir = fn.system('git rev-parse --show-toplevel')
end
local cwd = vim.loop.cwd()
local status, job = pcall(require, 'plenary.job')
if not status then
return fn.system('git rev-parse --show-toplevel')
end
local gitroot_job = job:new({
'git',
'rev-parse',
'--show-toplevel',
cwd=cwd
})
local gitroot_job = job:new({
'git',
'rev-parse',
'--show-toplevel',
cwd=cwd
})
local _, code = gitroot_job:sync()
if (code ~= 0) then
return nil
end
local path, code = gitroot_job:sync()
if (code ~= 0) then
return nil
end
return fn.getcwd(0, 0)
return table.concat(path, "")
end
--- Get project_root_dir for git repository
@@ -52,13 +52,17 @@ local function project_root_dir()
-- always use bash on Unix based systems.
local oldshell = vim.o.shell
if vim.fn.has('win32') == 0 then
vim.o.shell = 'bash'
vim.o.shell = 'bash'
end
local root = get_root()
if root == nil then
return nil
end
local cmd = string.format('cd "%s" && git rev-parse --show-toplevel', fn.fnamemodify(fn.resolve(fn.expand('%:p')), ':h'), root)
-- try symlinked file location instead
local gitdir = fn.system(
'cd "' .. fn.fnamemodify(fn.resolve(fn.expand('%:p')), ':h') .. '" && git rev-parse --show-toplevel')
local gitdir = fn.system(cmd)
local isgitdir = fn.matchstr(gitdir, '^fatal:.*') == ''
if isgitdir then
@@ -89,9 +93,9 @@ end
return {
get_root = get_root,
project_root_dir = project_root_dir,
lazygit_visited_git_repos = lazygit_visited_git_repos,
is_lazygit_available = is_lazygit_available,
is_symlink = is_symlink,
get_root = get_root,
project_root_dir = project_root_dir,
lazygit_visited_git_repos = lazygit_visited_git_repos,
is_lazygit_available = is_lazygit_available,
is_symlink = is_symlink,
}

View File

@@ -8,13 +8,14 @@ local lazygit_utils = require("lazygit.utils")
local function open_lazygit(prompt_buf)
local entry = action_state.get_selected_entry()
local cmd = [[lua require"lazygit".lazygit(nil)]]
cmd = cmd:format(entry.value:gsub("%s", ""))
vim.fn.execute('cd ' .. entry.value)
local cmd = [[lua require"lazygit".lazygit(nil)]]
vim.api.nvim_command(cmd)
vim.cmd('stopinsert')
vim.cmd([[execute "normal i"]])
vim.fn.feedkeys('j')
vim.api.nvim_buf_set_keymap(0, 't', '<Esc>', '<Esc>', {noremap = true, silent = true})
end
@@ -32,16 +33,22 @@ local lazygit_repos = function(opts)
local repos = {}
for _, v in pairs(lazygit_utils.lazygit_visited_git_repos) do
if v == nil then
goto skip
end
local index = #repos + 1
-- retrieve git repo name
local entry =
{
idx = index,
value = v:gsub("%s", ""),
-- retrieve git repo name
repo_name= v:gsub("%s", ""):match("^.+/(.+)$"),
}
table.insert(repos, index, entry)
::skip::
end
pickers.new(opts or {}, {