diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 6474f911606..7187e0aef1e 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -458,6 +458,7 @@ applying configuration. ignore = true, show_on_dirs = true, show_on_open_dirs = true, + disable_for_dirs = {}, timeout = 400, }, modified = { @@ -525,8 +526,7 @@ applying configuration. trash = true, }, }, - experimental = { - }, + experimental = {}, log = { enable = false, truncate = false, @@ -734,6 +734,11 @@ Git integration with icons and colors. Only relevant when `git.show_on_dirs` is `true`. Type: `boolean`, Default: `true` + *nvim-tree.git.disable_for_dirs* + Disable git integration when git top-level matches these paths. + May be relative, evaluated via |fnamemodify| `":p"` + Type: `table`, Default: `{}` + *nvim-tree.git.timeout* Kills the git process after some time if it takes too long. Git integration will be disabled after 10 git jobs exceed this timeout. diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index ff88d5a09c6..ae02eba0a44 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -492,6 +492,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS ignore = true, show_on_dirs = true, show_on_open_dirs = true, + disable_for_dirs = {}, timeout = 400, }, modified = { diff --git a/lua/nvim-tree/git/init.lua b/lua/nvim-tree/git/init.lua index a843b00c11a..2714e39ee57 100644 --- a/lua/nvim-tree/git/init.lua +++ b/lua/nvim-tree/git/init.lua @@ -107,7 +107,16 @@ function M.get_project_root(cwd) return nil end - M.cwd_to_project_root[cwd] = git_utils.get_toplevel(cwd) + local toplevel = git_utils.get_toplevel(cwd) + for _, disabled_for_dir in ipairs(M.config.git.disable_for_dirs) do + local toplevel_norm = vim.fn.fnamemodify(toplevel, ":p") + local disabled_norm = vim.fn.fnamemodify(disabled_for_dir, ":p") + if toplevel_norm == disabled_norm then + return nil + end + end + + M.cwd_to_project_root[cwd] = toplevel return M.cwd_to_project_root[cwd] end diff --git a/lua/nvim-tree/git/utils.lua b/lua/nvim-tree/git/utils.lua index 5ec0645dd79..f0940ef78e7 100644 --- a/lua/nvim-tree/git/utils.lua +++ b/lua/nvim-tree/git/utils.lua @@ -3,6 +3,9 @@ local log = require "nvim-tree.log" local has_cygpath = vim.fn.executable "cygpath" == 1 +--- Retrieve the git toplevel directory +--- @param cwd string path +--- @return string|nil toplevel absolute path function M.get_toplevel(cwd) local profile = log.profile_start("git toplevel %s", cwd)