fix(#1815): don't schedule find_file calls, debounce update_focused_file with 15ms default (#1820)

* fix(#1815): don't schedule find file calls

* fix(#1815): debounce BufEnter find_file

* fix(#1815): deprecate nvim-tree.find_file

* fix(#1815): debounce BufEnter find_file

* fix(#1815): debounce BufEnter find_file
This commit is contained in:
Alexander Courtis 2022-12-16 13:01:37 +11:00 committed by GitHub
parent 95ed588211
commit 623cecb809
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 13 deletions

View File

@ -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`.

View File

@ -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)
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
@ -572,6 +581,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
},
update_focused_file = {
enable = false,
debounce_delay = 15,
update_root = false,
ignore_list = {},
},