diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 436baf3591b..e0c0900db69 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -280,6 +280,7 @@ Subsequent calls to setup will replace the previous configuration. }, update_focused_file = { enable = false, + debounce_delay = 15, update_root = false, ignore_list = {}, }, @@ -507,6 +508,11 @@ until it finds the file. Enable this feature. Type: `boolean`, Default: `false` + *nvim-tree.update_focused_file.debounce_delay* + Idle milliseconds between BufEnter and update. + The last BufEnter will be focused, others are discarded. + Type: `number`, Default: `15` (ms) + *nvim-tree.update_focused_file.update_root* (previously `update_focused_file.update_cwd`) Update the root directory of the tree if the file is not under current root directory. It prefers vim's cwd and `root_dirs`. diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index 87038f5cec9..80fe844513a 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -76,7 +76,7 @@ function M.toggle(find_file, no_focus, cwd, bang) local previous_buf = vim.api.nvim_get_current_buf() M.open(cwd) if _config.update_focused_file.enable or find_file then - M.find_file(false, previous_buf, bang) + find_file(false, previous_buf, bang) end if no_focus then vim.cmd "noautocmd wincmd p" @@ -143,7 +143,7 @@ local function is_file_readable(fname) return stat and stat.type == "file" and vim.loop.fs_access(fname, "R") end -function M.find_file(with_open, bufnr, bang) +local function find_file(with_open, bufnr, bang) if not with_open and not core.get_explorer() then return end @@ -162,13 +162,20 @@ function M.find_file(with_open, bufnr, bang) M.open() end - -- if we don't schedule, it will search for NvimTree - vim.schedule(function() - if bang or _config.update_focused_file.update_root then - M.change_root(filepath, bufnr) - end - require("nvim-tree.actions.finders.find-file").fn(filepath) - end) + if bang or _config.update_focused_file.update_root then + M.change_root(filepath, bufnr) + end + + require("nvim-tree.actions.finders.find-file").fn(filepath) +end + +---@deprecated 2022/12/16 +function M.find_file(with_open, bufnr, bang) + vim.notify_once( + "require('nvim-tree').find_file is not API and will soon be unavailable. Please use api.tree.find_file as per :help nvim-tree-api", + vim.log.levels.WARN + ) + find_file(with_open, bufnr, bang) end M.resize = view.resize @@ -272,7 +279,7 @@ function M.on_enter(netrw_disabled) if should_focus_other_window then vim.cmd "noautocmd wincmd p" if should_find then - M.find_file(false) + find_file(false) end end end @@ -306,7 +313,7 @@ local function setup_vim_commands() vim.api.nvim_create_user_command("NvimTreeRefresh", reloaders.reload_explorer, { bar = true }) vim.api.nvim_create_user_command("NvimTreeClipboard", copy_paste.print_clipboard, { bar = true }) vim.api.nvim_create_user_command("NvimTreeFindFile", function(res) - M.find_file(true, nil, res.bang) + find_file(true, nil, res.bang) end, { bang = true, bar = true }) vim.api.nvim_create_user_command("NvimTreeFindFileToggle", function(res) M.toggle(true, false, res.args, res.bang) @@ -324,7 +331,7 @@ function M.change_dir(name) change_dir.fn(name) if _config.update_focused_file.enable then - M.find_file(false) + find_file(false) end end @@ -400,7 +407,9 @@ local function setup_autocommands(opts) if opts.update_focused_file.enable then create_nvim_tree_autocmd("BufEnter", { callback = function() - M.find_file(false) + utils.debounce("BufEnter:find_file", opts.update_focused_file.debounce_delay, function() + find_file(false) + end) end, }) end @@ -573,6 +582,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS }, update_focused_file = { enable = false, + debounce_delay = 15, update_root = false, ignore_list = {}, },