@@ -3,6 +3,8 @@ local explorer = require "nvim-tree.explorer"
3
3
local live_filter = require " nvim-tree.live-filter"
4
4
local view = require " nvim-tree.view"
5
5
local log = require " nvim-tree.log"
6
+ local Iterator = require " nvim-tree.iterators.node-iterator"
7
+ local utils = require " nvim-tree.utils"
6
8
7
9
local M = {}
8
10
@@ -25,6 +27,49 @@ function M.init(foldername)
25
27
log .profile_end (profile )
26
28
end
27
29
30
+ --- @param path string
31
+ function M .change_root (path )
32
+ if TreeExplorer == nil then
33
+ return
34
+ end
35
+ local root_parent_cwd = vim .fn .fnamemodify (utils .path_remove_trailing (TreeExplorer .absolute_path ), " :h" )
36
+ if root_parent_cwd == path then
37
+ local newTreeExplorer = explorer .Explorer .new (path )
38
+ if newTreeExplorer == nil then
39
+ return
40
+ end
41
+ for _ , node in ipairs (newTreeExplorer .nodes ) do
42
+ if node .absolute_path == TreeExplorer .absolute_path then
43
+ node .nodes = TreeExplorer .nodes
44
+ end
45
+ end
46
+ TreeExplorer :destroy ()
47
+ TreeExplorer = newTreeExplorer
48
+ else
49
+ local newTreeExplorer = explorer .Explorer .new (path )
50
+ if newTreeExplorer == nil then
51
+ return
52
+ end
53
+ local child_node
54
+ Iterator .builder (TreeExplorer .nodes )
55
+ :hidden ()
56
+ :applier (function (n )
57
+ if n .absolute_path == path then
58
+ child_node = n
59
+ end
60
+ end )
61
+ :recursor (function (n )
62
+ return n .group_next and { n .group_next } or n .nodes
63
+ end )
64
+ :iterate ()
65
+ if # child_node .nodes ~= 0 then
66
+ newTreeExplorer .nodes = child_node .nodes ;
67
+ end
68
+ TreeExplorer :destroy ()
69
+ TreeExplorer = newTreeExplorer
70
+ end
71
+ end
72
+
28
73
--- @return Explorer | nil
29
74
function M .get_explorer ()
30
75
return TreeExplorer
0 commit comments