feat(#2799): filesystem_watchers.ignore_dirs and git.disable_for_dirs may be functions
This commit is contained in:
parent
2086e564c4
commit
8b2c5c678b
@ -1170,8 +1170,9 @@ Only relevant when `git.show_on_dirs` is `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: `{}`
|
||||
Strings may be relative, evaluated via |fnamemodify| `":p"`
|
||||
Function is passed an absolute path and returns true for disable.
|
||||
Type: `string[] | fun(path: string): boolean`, Default: `{}`
|
||||
|
||||
*nvim-tree.git.timeout*
|
||||
Kills the git process after some time if it takes too long.
|
||||
@ -1333,10 +1334,12 @@ Idle milliseconds between filesystem change and action.
|
||||
Type: `number`, Default: `50` (ms)
|
||||
|
||||
*nvim-tree.filesystem_watchers.ignore_dirs*
|
||||
List of vim regex for absolute directory paths that will not be watched.
|
||||
Backslashes must be escaped e.g. `"my-project/\\.build$"`. See |string-match|.
|
||||
List of vim regex for absolute directory paths that will not be watched or
|
||||
function returning whether a path should be ignored.
|
||||
Strings must be backslash escaped e.g. `"my-proj/\\.build$"`. See |string-match|.
|
||||
Function is passed an absolute path.
|
||||
Useful when path is not in `.gitignore` or git integration is disabled.
|
||||
Type: {string}, Default: `{}`
|
||||
Type: `string[] | fun(path: string): boolean`, Default: `{}`
|
||||
|
||||
==============================================================================
|
||||
5.13 OPTS: ACTIONS *nvim-tree-opts-actions*
|
||||
|
||||
@ -632,9 +632,15 @@ local ACCEPTED_TYPES = {
|
||||
update_focused_file = {
|
||||
exclude = { "function" },
|
||||
},
|
||||
git = {
|
||||
disable_for_dirs = { "function" },
|
||||
},
|
||||
filters = {
|
||||
custom = { "function" },
|
||||
},
|
||||
filesystem_watchers = {
|
||||
ignore_dirs = { "function" },
|
||||
},
|
||||
actions = {
|
||||
open_file = {
|
||||
window_picker = {
|
||||
|
||||
@ -40,10 +40,14 @@ local function is_folder_ignored(path)
|
||||
end
|
||||
end
|
||||
|
||||
for _, ignore_dir in ipairs(M.config.filesystem_watchers.ignore_dirs) do
|
||||
if vim.fn.match(path, ignore_dir) ~= -1 then
|
||||
return true
|
||||
if type(M.config.filesystem_watchers.ignore_dirs) == "table" then
|
||||
for _, ignore_dir in ipairs(M.config.filesystem_watchers.ignore_dirs) do
|
||||
if vim.fn.match(path, ignore_dir) ~= -1 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
elseif type(M.config.filesystem_watchers.ignore_dirs) == "function" then
|
||||
return M.config.filesystem_watchers.ignore_dirs(path)
|
||||
end
|
||||
|
||||
return false
|
||||
|
||||
@ -170,12 +170,18 @@ function M.get_toplevel(path)
|
||||
if not toplevel or not git_dir then
|
||||
return nil
|
||||
end
|
||||
local toplevel_norm = vim.fn.fnamemodify(toplevel, ":p")
|
||||
|
||||
-- ignore disabled paths
|
||||
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
|
||||
if type(M.config.git.disable_for_dirs) == "table" then
|
||||
for _, disabled_for_dir in ipairs(M.config.git.disable_for_dirs) do
|
||||
local disabled_norm = vim.fn.fnamemodify(disabled_for_dir, ":p")
|
||||
if toplevel_norm == disabled_norm then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
elseif type(M.config.git.disable_for_dirs) == "function" then
|
||||
if M.config.git.disable_for_dirs(toplevel_norm) then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
Reference in New Issue
Block a user