-
-
Notifications
You must be signed in to change notification settings - Fork 611
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
1836 view debounce delay #1871
1836 view debounce delay #1871
Changes from all commits
4648ed4
2b450d6
6de1163
88c7c25
f5a0378
521c624
f452c38
aec57a9
7c88f30
9bd9e42
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -369,7 +369,9 @@ local function setup_autocommands(opts) | |
(filters.config.filter_no_buffer or renderer.config.highlight_opened_files ~= "none") | ||
and vim.bo[data.buf].buftype == "" | ||
then | ||
reloaders.reload_explorer() | ||
utils.debounce("Buf:filter_buffer", opts.view.debounce_delay, function() | ||
reloaders.reload_explorer() | ||
end) | ||
end | ||
end, | ||
}) | ||
|
@@ -381,7 +383,9 @@ local function setup_autocommands(opts) | |
(filters.config.filter_no_buffer or renderer.config.highlight_opened_files ~= "none") | ||
and vim.bo[data.buf].buftype == "" | ||
then | ||
reloaders.reload_explorer(nil, data.buf) | ||
utils.debounce("Buf:filter_buffer", opts.view.debounce_delay, function() | ||
reloaders.reload_explorer(nil, data.buf) | ||
end) | ||
end | ||
end, | ||
}) | ||
|
@@ -416,7 +420,7 @@ local function setup_autocommands(opts) | |
if opts.update_focused_file.enable then | ||
create_nvim_tree_autocmd("BufEnter", { | ||
callback = function() | ||
utils.debounce("BufEnter:find_file", opts.update_focused_file.debounce_delay, function() | ||
utils.debounce("BufEnter:find_file", opts.view.debounce_delay, function() | ||
find_file(false) | ||
end) | ||
end, | ||
|
@@ -481,8 +485,10 @@ local function setup_autocommands(opts) | |
if opts.modified.enable then | ||
create_nvim_tree_autocmd({ "BufModifiedSet", "BufWritePost" }, { | ||
callback = function() | ||
modified.reload() | ||
reloaders.reload_explorer() | ||
utils.debounce("Buf:modified", opts.view.debounce_delay, function() | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is looking good. I'd eventually like to have all Idea: could we use one category for this and
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmmm, that sounds sensible, though I feel like if we do this too much then I actually have another refactoring idea after I finished modified, it goes like this: We split nvim-tree into three distinct part: core, external modules & line builder. Git, diagnostics, modified & opened file becomes external modules. They interact with core to attach attributes to paths (i.e. directories & files). Core can propagate attributes to parents / children at the external module's request. Core calls line builder with all the path's attributes + other info like name, depth. Line builder returns everything the core needs to display including padding, signcolumn, highlights etc. This would allow us to do a few things:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes.
I like this approach. Files and git status are somewhat detached in that they don't trigger a full refresh, only a draw for the affected directory. Everything else does a full refresh, which is unnecessary and expensive. Examples: filter, most nvim events, fs operations.
That would work very nicely: core can decide upon the least expensive action and propagate that. It would be fantastic if you could start on this one: we could "proof of concept" this by having some events call This can be done iteratively ande we can split up the functionality as we go. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I just would like to add that we should not be afraid of breaking changes if benefits out weight inconveniences of one off config changes for users. Project longevity and maintainability is more important. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Absolutely. We have successfully made a few such small changes with no reported issues. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. api.tree.toggle_no_buffer_filter()
api.tree.expand_all() doesn't work as you'd expect, as the filter is debounced and completes after expansion. Having the toggle draw synchronously with no refresh would resolve that. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Sounds great, I'll think about opening a tracking issue and start with highilght_opened_files in a few days. Do we have any plan for versioning nvim-tree? I think it'd be nice if we put those refactoring onto release candidate for nvim-tree 2.0. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Big 👍 Versioning is a work in progress. We don't have any immediate plans to break anything large. Also... this change would be non-breaking. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Tracked in #1881 |
||
modified.reload() | ||
reloaders.reload_explorer() | ||
end) | ||
end, | ||
}) | ||
end | ||
|
@@ -510,6 +516,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS | |
adaptive_size = false, | ||
centralize_selection = false, | ||
cursorline = true, | ||
debounce_delay = 15, | ||
width = 30, | ||
hide_root_folder = false, | ||
side = "left", | ||
|
@@ -604,7 +611,6 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS | |
}, | ||
update_focused_file = { | ||
enable = false, | ||
debounce_delay = 15, | ||
update_root = false, | ||
ignore_list = {}, | ||
}, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Was the bug caused by having separate categories?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's simply because
view.debounce_delay
was used instead ofopts.view.debounce_delay
, which resulted in nil exception somewhere else.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah! Good catch