Skip to content

Commit

Permalink
feat: add update_focused_file.exclude (#2673)
Browse files Browse the repository at this point in the history
* Add update_focused_file.exclude and move update_focused_file.ignore_list to update_focused_file.update_root.ignore_list

* Pass ci checks

* Add config migration for update_root and ignore_list

* Missed one mention of update root in find_file.lua

* Update migration code

Co-authored-by: Alexander Courtis <[email protected]>

* make docs consistent

* match on filename instead of entire path

* exclude as a function

* fix docs

* default exclude value

---------

Co-authored-by: Alexander Courtis <[email protected]>
  • Loading branch information
ava5627 and alex-courtis authored Mar 25, 2024
1 parent 85c502e commit e20966a
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 16 deletions.
32 changes: 22 additions & 10 deletions doc/nvim-tree-lua.txt
Original file line number Diff line number Diff line change
Expand Up @@ -500,8 +500,11 @@ Following is the default configuration. See |nvim-tree-opts| for details.
},
update_focused_file = {
enable = false,
update_root = false,
ignore_list = {},
update_root = {
enable = false,
ignore_list = {},
},
exclude = false,
},
system_open = {
cmd = "",
Expand Down Expand Up @@ -1105,14 +1108,21 @@ Update the root directory of the tree if the file is not under current
root directory. It prefers vim's cwd and `root_dirs`.
Otherwise it falls back to the folder containing the file.
Only relevant when `update_focused_file.enable` is `true`
Type: `boolean`, Default: `false`

*nvim-tree.update_focused_file.ignore_list*
List of buffer names and filetypes that will not update the root dir
of the tree if the file isn't found under the current root directory.
Only relevant when `update_focused_file.update_root` and
`update_focused_file.enable` are `true`.
Type: {string}, Default: `{}`
*nvim-tree.update_focused_file.update_root.enable*
Type: `boolean`, Default: `false`

*nvim-tree.update_focused_file.update_root.ignore_list*
List of buffer names and filetypes that will not update the root dir
of the tree if the file isn't found under the current root directory.
Only relevant when `update_focused_file.update_root.enable` and
`update_focused_file.enable` are `true`.
Type: {string}, Default: `{}`

*nvim-tree.update_focused_file.exclude*
A function that returns true if the file should not be focused when opening.
Takes the `BufEnter` event as an argument. see |autocmd-events|
Type: {function}, Default: `false`

==============================================================================
5.6 OPTS: SYSTEM OPEN *nvim-tree-opts-system-open*
Expand Down Expand Up @@ -2869,8 +2879,10 @@ highlight group is not, hard linking as follows: >
|nvim-tree.ui.confirm.remove|
|nvim-tree.ui.confirm.trash|
|nvim-tree.update_focused_file.enable|
|nvim-tree.update_focused_file.ignore_list|
|nvim-tree.update_focused_file.exclude|
|nvim-tree.update_focused_file.update_root|
|nvim-tree.update_focused_file.update_root.enable|
|nvim-tree.update_focused_file.update_root.ignore_list|
|nvim-tree.view.centralize_selection|
|nvim-tree.view.cursorline|
|nvim-tree.view.debounce_delay|
Expand Down
20 changes: 15 additions & 5 deletions lua/nvim-tree.lua
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ function M.change_root(path, bufnr)
-- skip if current file is in ignore_list
if type(bufnr) == "number" then
local ft = vim.api.nvim_buf_get_option(bufnr, "filetype") or ""
for _, value in pairs(_config.update_focused_file.ignore_list) do
for _, value in pairs(_config.update_focused_file.update_root.ignore_list) do
if utils.str_find(path, value) or utils.str_find(ft, value) then
return
end
Expand Down Expand Up @@ -149,7 +149,7 @@ function M.change_dir(name)
actions.root.change_dir.fn(name)
end

if _config.update_focused_file.enable then
if _config.update_focused_file.update_root.enable then
actions.tree.find_file.fn()
end
end
Expand Down Expand Up @@ -247,7 +247,11 @@ local function setup_autocommands(opts)
end
if opts.update_focused_file.enable then
create_nvim_tree_autocmd("BufEnter", {
callback = function()
callback = function(event)
local exclude = opts.update_focused_file.exclude
if type(exclude) == "function" and exclude(event) then
return
end
utils.debounce("BufEnter:find_file", opts.view.debounce_delay, function()
actions.tree.find_file.fn()
end)
Expand Down Expand Up @@ -462,8 +466,11 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS
},
update_focused_file = {
enable = false,
update_root = false,
ignore_list = {},
update_root = {
enable = false,
ignore_list = {},
},
exclude = false,
},
system_open = {
cmd = "",
Expand Down Expand Up @@ -624,6 +631,9 @@ local ACCEPTED_TYPES = {
group_empty = { "boolean", "function" },
root_folder_label = { "function", "string", "boolean" },
},
update_focused_file = {
exclude = { "function" },
},
filters = {
custom = { "function" },
},
Expand Down
2 changes: 1 addition & 1 deletion lua/nvim-tree/actions/tree/find-file.lua
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ function M.fn(opts)
end

-- update root
if opts.update_root or M.config.update_focused_file.update_root then
if opts.update_root or M.config.update_focused_file.update_root.enable then
require("nvim-tree").change_root(path, bufnr)
end

Expand Down
8 changes: 8 additions & 0 deletions lua/nvim-tree/legacy.lua
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ local function refactored(opts)
if type(opts.renderer) == "table" and type(opts.renderer.highlight_git) == "boolean" then
opts.renderer.highlight_git = opts.renderer.highlight_git and "name" or "none"
end

-- 2024/02/15
if type(opts.update_focused_file) == "table" then
if type(opts.update_focused_file.update_root) ~= "table" then
opts.update_focused_file.update_root = { enable = opts.update_focused_file.update_root }
end
end
utils.move_missing_val(opts, "update_focused_file", "ignore_list", opts, "update_focused_file.update_root", "ignore_list", true)
end

local function deprecated(opts)
Expand Down

0 comments on commit e20966a

Please sign in to comment.