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

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

This reverts commit a8d26bb088.

* fix(#1723): find_file for externally created new file results in folder unable to be opened

* fix(#1723): find_file for externally created new file results in folder unable to be opened
This commit is contained in:
Alexander Courtis 2022-12-16 15:35:09 +11:00 committed by GitHub
parent d85b6718ce
commit 87409bb4af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 26 deletions

View File

@ -280,6 +280,7 @@ Subsequent calls to setup will replace the previous configuration.
}, },
update_focused_file = { update_focused_file = {
enable = false, enable = false,
debounce_delay = 15,
update_root = false, update_root = false,
ignore_list = {}, ignore_list = {},
}, },
@ -508,6 +509,11 @@ until it finds the file.
Enable this feature. Enable this feature.
Type: `boolean`, Default: `false` 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`) *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 Update the root directory of the tree if the file is not under current
root directory. It prefers vim's cwd and `root_dirs`. root directory. It prefers vim's cwd and `root_dirs`.

View File

@ -69,21 +69,6 @@ end
---@deprecated ---@deprecated
M.on_keypress = require("nvim-tree.actions.dispatch").dispatch M.on_keypress = require("nvim-tree.actions.dispatch").dispatch
function M.toggle(find_file, no_focus, cwd, bang)
if view.is_visible() then
view.close()
else
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)
end
if no_focus then
vim.cmd "noautocmd wincmd p"
end
end
end
function M.open(cwd) function M.open(cwd)
cwd = cwd ~= "" and cwd or nil cwd = cwd ~= "" and cwd or nil
if view.is_visible() then if view.is_visible() then
@ -143,7 +128,7 @@ local function is_file_readable(fname)
return stat and stat.type == "file" and vim.loop.fs_access(fname, "R") return stat and stat.type == "file" and vim.loop.fs_access(fname, "R")
end 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 if not with_open and not core.get_explorer() then
return return
end end
@ -162,13 +147,35 @@ function M.find_file(with_open, bufnr, bang)
M.open() M.open()
end end
-- if we don't schedule, it will search for NvimTree if bang or _config.update_focused_file.update_root then
vim.schedule(function() M.change_root(filepath, bufnr)
if bang or _config.update_focused_file.update_root then end
M.change_root(filepath, bufnr)
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
function M.toggle(with_find_file, no_focus, cwd, bang)
if view.is_visible() then
view.close()
else
local previous_buf = vim.api.nvim_get_current_buf()
M.open(cwd)
if _config.update_focused_file.enable or with_find_file then
find_file(false, previous_buf, bang)
end end
require("nvim-tree.actions.finders.find-file").fn(filepath) if no_focus then
end) vim.cmd "noautocmd wincmd p"
end
end
end end
M.resize = view.resize M.resize = view.resize
@ -272,7 +279,7 @@ function M.on_enter(netrw_disabled)
if should_focus_other_window then if should_focus_other_window then
vim.cmd "noautocmd wincmd p" vim.cmd "noautocmd wincmd p"
if should_find then if should_find then
M.find_file(false) find_file(false)
end end
end 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("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("NvimTreeClipboard", copy_paste.print_clipboard, { bar = true })
vim.api.nvim_create_user_command("NvimTreeFindFile", function(res) 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 }) end, { bang = true, bar = true })
vim.api.nvim_create_user_command("NvimTreeFindFileToggle", function(res) vim.api.nvim_create_user_command("NvimTreeFindFileToggle", function(res)
M.toggle(true, false, res.args, res.bang) M.toggle(true, false, res.args, res.bang)
@ -324,7 +331,7 @@ function M.change_dir(name)
change_dir.fn(name) change_dir.fn(name)
if _config.update_focused_file.enable then if _config.update_focused_file.enable then
M.find_file(false) find_file(false)
end end
end end
@ -400,7 +407,9 @@ local function setup_autocommands(opts)
if opts.update_focused_file.enable then if opts.update_focused_file.enable then
create_nvim_tree_autocmd("BufEnter", { create_nvim_tree_autocmd("BufEnter", {
callback = function() callback = function()
M.find_file(false) utils.debounce("BufEnter:find_file", opts.update_focused_file.debounce_delay, function()
find_file(false)
end)
end, end,
}) })
end end
@ -572,6 +581,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
}, },
update_focused_file = { update_focused_file = {
enable = false, enable = false,
debounce_delay = 15,
update_root = false, update_root = false,
ignore_list = {}, ignore_list = {},
}, },