Skip to content

Commit 623cecb

Browse files
authored
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
1 parent 95ed588 commit 623cecb

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

doc/nvim-tree-lua.txt

+6
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ Subsequent calls to setup will replace the previous configuration.
280280
},
281281
update_focused_file = {
282282
enable = false,
283+
debounce_delay = 15,
283284
update_root = false,
284285
ignore_list = {},
285286
},
@@ -507,6 +508,11 @@ until it finds the file.
507508
Enable this feature.
508509
Type: `boolean`, Default: `false`
509510

511+
*nvim-tree.update_focused_file.debounce_delay*
512+
Idle milliseconds between BufEnter and update.
513+
The last BufEnter will be focused, others are discarded.
514+
Type: `number`, Default: `15` (ms)
515+
510516
*nvim-tree.update_focused_file.update_root* (previously `update_focused_file.update_cwd`)
511517
Update the root directory of the tree if the file is not under current
512518
root directory. It prefers vim's cwd and `root_dirs`.

lua/nvim-tree.lua

+23-13
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ function M.toggle(find_file, no_focus, cwd, bang)
7676
local previous_buf = vim.api.nvim_get_current_buf()
7777
M.open(cwd)
7878
if _config.update_focused_file.enable or find_file then
79-
M.find_file(false, previous_buf, bang)
79+
find_file(false, previous_buf, bang)
8080
end
8181
if no_focus then
8282
vim.cmd "noautocmd wincmd p"
@@ -143,7 +143,7 @@ local function is_file_readable(fname)
143143
return stat and stat.type == "file" and vim.loop.fs_access(fname, "R")
144144
end
145145

146-
function M.find_file(with_open, bufnr, bang)
146+
local function find_file(with_open, bufnr, bang)
147147
if not with_open and not core.get_explorer() then
148148
return
149149
end
@@ -162,13 +162,20 @@ function M.find_file(with_open, bufnr, bang)
162162
M.open()
163163
end
164164

165-
-- if we don't schedule, it will search for NvimTree
166-
vim.schedule(function()
167-
if bang or _config.update_focused_file.update_root then
168-
M.change_root(filepath, bufnr)
169-
end
170-
require("nvim-tree.actions.finders.find-file").fn(filepath)
171-
end)
165+
if bang or _config.update_focused_file.update_root then
166+
M.change_root(filepath, bufnr)
167+
end
168+
169+
require("nvim-tree.actions.finders.find-file").fn(filepath)
170+
end
171+
172+
---@deprecated 2022/12/16
173+
function M.find_file(with_open, bufnr, bang)
174+
vim.notify_once(
175+
"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",
176+
vim.log.levels.WARN
177+
)
178+
find_file(with_open, bufnr, bang)
172179
end
173180

174181
M.resize = view.resize
@@ -272,7 +279,7 @@ function M.on_enter(netrw_disabled)
272279
if should_focus_other_window then
273280
vim.cmd "noautocmd wincmd p"
274281
if should_find then
275-
M.find_file(false)
282+
find_file(false)
276283
end
277284
end
278285
end
@@ -306,7 +313,7 @@ local function setup_vim_commands()
306313
vim.api.nvim_create_user_command("NvimTreeRefresh", reloaders.reload_explorer, { bar = true })
307314
vim.api.nvim_create_user_command("NvimTreeClipboard", copy_paste.print_clipboard, { bar = true })
308315
vim.api.nvim_create_user_command("NvimTreeFindFile", function(res)
309-
M.find_file(true, nil, res.bang)
316+
find_file(true, nil, res.bang)
310317
end, { bang = true, bar = true })
311318
vim.api.nvim_create_user_command("NvimTreeFindFileToggle", function(res)
312319
M.toggle(true, false, res.args, res.bang)
@@ -324,7 +331,7 @@ function M.change_dir(name)
324331
change_dir.fn(name)
325332

326333
if _config.update_focused_file.enable then
327-
M.find_file(false)
334+
find_file(false)
328335
end
329336
end
330337

@@ -400,7 +407,9 @@ local function setup_autocommands(opts)
400407
if opts.update_focused_file.enable then
401408
create_nvim_tree_autocmd("BufEnter", {
402409
callback = function()
403-
M.find_file(false)
410+
utils.debounce("BufEnter:find_file", opts.update_focused_file.debounce_delay, function()
411+
find_file(false)
412+
end)
404413
end,
405414
})
406415
end
@@ -572,6 +581,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
572581
},
573582
update_focused_file = {
574583
enable = false,
584+
debounce_delay = 15,
575585
update_root = false,
576586
ignore_list = {},
577587
},

0 commit comments

Comments
 (0)