Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions doc/nvim-tree-lua.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {},
},
Expand Down Expand Up @@ -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`.
Expand Down
36 changes: 23 additions & 13 deletions lua/nvim-tree.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -573,6 +582,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
},
update_focused_file = {
enable = false,
debounce_delay = 15,
update_root = false,
ignore_list = {},
},
Expand Down