diff --git a/README.md b/README.md index c1c5d7d..c11552e 100644 --- a/README.md +++ b/README.md @@ -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() +``` + diff --git a/lua/lazygit.lua b/lua/lazygit.lua index 895c1cd..f1e0b2e 100644 --- a/lua/lazygit.lua +++ b/lua/lazygit.lua @@ -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 diff --git a/lua/lazygit/utils.lua b/lua/lazygit/utils.lua index 2b34859..a8ace4d 100644 --- a/lua/lazygit/utils.lua +++ b/lua/lazygit/utils.lua @@ -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, } diff --git a/lua/telescope/_extensions/lazygit_telescope.lua b/lua/telescope/_extensions/lazygit_telescope.lua index 2103a2a..daccba3 100644 --- a/lua/telescope/_extensions/lazygit_telescope.lua +++ b/lua/telescope/_extensions/lazygit_telescope.lua @@ -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', '', '', {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 {}, {