Skip to content

Commit 93ed794

Browse files
committed
add api.node.collapse
1 parent 2814f87 commit 93ed794

File tree

5 files changed

+53
-30
lines changed

5 files changed

+53
-30
lines changed

doc/nvim-tree-lua.txt

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ Show the mappings: `g?`
206206
`S` Search |nvim-tree-api.tree.search_node()|
207207
`u` Rename: Full Path |nvim-tree-api.fs.rename_full()|
208208
`U` Toggle Filter: Hidden |nvim-tree-api.tree.toggle_custom_filter()|
209-
`W` Collapse |nvim-tree-api.tree.collapse_all()|
209+
`W` Collapse All |nvim-tree-api.tree.collapse_all()|
210210
`x` Cut |nvim-tree-api.fs.cut()|
211211
`y` Copy Name |nvim-tree-api.fs.copy.filename()|
212212
`Y` Copy Relative Path |nvim-tree-api.fs.copy.relative_path()|
@@ -341,7 +341,7 @@ See |nvim-tree-highlight| for details.
341341

342342
See |nvim-tree-api.tree.collapse_all()|
343343

344-
Calls: `api.tree.collapse_all(false)`
344+
Calls: `api.tree.collapse_all({ keep_buffers = false })`
345345

346346
*:NvimTreeCollapseKeepBuffers*
347347

@@ -350,7 +350,7 @@ See |nvim-tree-highlight| for details.
350350

351351
See |nvim-tree-api.tree.collapse_all()|
352352

353-
Calls: `api.tree.collapse_all(true)`
353+
Calls: `api.tree.collapse_all({ keep_buffers = true })`
354354

355355
*:NvimTreeHiTest*
356356

@@ -1831,10 +1831,13 @@ tree.find_file({opts}) *nvim-tree-api.tree.find_file()*
18311831
tree.search_node() *nvim-tree-api.tree.search_node()*
18321832
Open the search dialogue as per the search_node action.
18331833

1834-
tree.collapse_all({keep_buffers}) *nvim-tree-api.tree.collapse_all()*
1834+
tree.collapse_all({opts}) *nvim-tree-api.tree.collapse_all()*
18351835
Collapse the tree.
18361836

18371837
Parameters: ~
1838+
{opts} (table) optional parameters
1839+
1840+
Options: ~
18381841
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
18391842

18401843
tree.expand_all({node}) *nvim-tree-api.tree.expand_all()*
@@ -2275,6 +2278,16 @@ node.buffer.wipe({node}, {opts}) *nvim-tree-api.node.buffer.wipe()*
22752278
Options: ~
22762279
{force} (boolean) wipe even if buffer is modified, default false
22772280

2281+
node.collapse({node}, {opts}) *nvim-tree-api.node.collapse()*
2282+
Collapse the tree underneath the node.
2283+
2284+
Parameters: ~
2285+
{node} (Node|nil) file or folder
2286+
{opts} (table) optional parameters
2287+
2288+
Options: ~
2289+
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
2290+
22782291
==============================================================================
22792292
6.4 API GIT *nvim-tree-api.git*
22802293

@@ -2529,7 +2542,7 @@ You are encouraged to copy these to your own |nvim-tree.on_attach| function. >lu
25292542
vim.keymap.set("n", "S", api.tree.search_node, opts("Search"))
25302543
vim.keymap.set("n", "u", api.fs.rename_full, opts("Rename: Full Path"))
25312544
vim.keymap.set("n", "U", api.tree.toggle_custom_filter, opts("Toggle Filter: Hidden"))
2532-
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse"))
2545+
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse All"))
25332546
vim.keymap.set("n", "x", api.fs.cut, opts("Cut"))
25342547
vim.keymap.set("n", "y", api.fs.copy.filename, opts("Copy Name"))
25352548
vim.keymap.set("n", "Y", api.fs.copy.relative_path, opts("Copy Relative Path"))
@@ -3301,6 +3314,7 @@ highlight group is not, hard linking as follows: >
33013314
|nvim-tree-api.marks.toggle()|
33023315
|nvim-tree-api.node.buffer.delete()|
33033316
|nvim-tree-api.node.buffer.wipe()|
3317+
|nvim-tree-api.node.collapse()|
33043318
|nvim-tree-api.node.navigate.diagnostics.next()|
33053319
|nvim-tree-api.node.navigate.diagnostics.next_recursive()|
33063320
|nvim-tree-api.node.navigate.diagnostics.prev()|

lua/nvim-tree/actions/tree/modifiers/collapse-all.lua renamed to lua/nvim-tree/actions/tree/modifiers/collapse.lua

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ local utils = require("nvim-tree.utils")
22
local core = require("nvim-tree.core")
33
local Iterator = require("nvim-tree.iterators.node-iterator")
44

5+
local FileNode = require("nvim-tree.node.file")
56
local DirectoryNode = require("nvim-tree.node.directory")
67

78
local M = {}
@@ -23,39 +24,25 @@ local function buf_match()
2324
end
2425
end
2526

26-
---@param node Node|boolean|nil legacy -> opts.keep_buffers
27-
---@param opts ApiTreeCollapseAllOpts|nil
28-
function M.fn(node, opts)
29-
-- legacy arguments
30-
if type(node) == "boolean" then
31-
opts = {
32-
keep_buffers = node,
33-
}
34-
node = nil
35-
end
36-
opts = opts or {}
37-
27+
---Collapse a node, root if nil
28+
---@param node Node?
29+
---@param opts ApiCollapseOpts
30+
local function collapse(node, opts)
3831
local explorer = core.get_explorer()
3932
if not explorer then
4033
return
4134
end
4235

36+
node = node or explorer
37+
4338
local node_at_cursor = explorer:get_node_at_cursor()
4439
if not node_at_cursor then
4540
return
4641
end
4742

4843
local matches = buf_match()
4944

50-
local nodesToIterate = explorer.nodes
51-
if node then
52-
local dir = node:as(DirectoryNode)
53-
if dir then
54-
nodesToIterate = { dir }
55-
end
56-
end
57-
58-
Iterator.builder(nodesToIterate)
45+
Iterator.builder({ node:is(FileNode) and node.parent or node:as(DirectoryNode) })
5946
:hidden()
6047
:applier(function(n)
6148
local dir = n:as(DirectoryNode)
@@ -72,4 +59,24 @@ function M.fn(node, opts)
7259
utils.focus_node_or_parent(node_at_cursor)
7360
end
7461

62+
63+
---@param opts ApiCollapseOpts|boolean|nil legacy -> opts.keep_buffers
64+
function M.all(opts)
65+
-- legacy arguments
66+
if type(opts) == "boolean" then
67+
opts = {
68+
keep_buffers = opts,
69+
}
70+
end
71+
opts = opts or {}
72+
73+
collapse(nil, opts)
74+
end
75+
76+
---@param node Node
77+
---@param opts ApiCollapseOpts?
78+
function M.node(node, opts)
79+
collapse(node, opts or {})
80+
end
81+
7582
return M

lua/nvim-tree/actions/tree/modifiers/init.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
local M = {}
22

3-
M.collapse_all = require("nvim-tree.actions.tree.modifiers.collapse-all")
3+
M.collapse = require("nvim-tree.actions.tree.modifiers.collapse")
44
M.expand_all = require("nvim-tree.actions.tree.modifiers.expand-all")
55

66
function M.setup(opts)

lua/nvim-tree/api.lua

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,10 +183,10 @@ Api.tree.get_nodes = wrap_explorer("get_nodes")
183183
Api.tree.find_file = wrap(actions.tree.find_file.fn)
184184
Api.tree.search_node = wrap(actions.finders.search_node.fn)
185185

186-
---@class ApiTreeCollapseAllOpts
186+
---@class ApiCollapseOpts
187187
---@field keep_buffers boolean|nil default false
188188

189-
Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse_all.fn)
189+
Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse.all)
190190
Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand_all.fn)
191191
Api.tree.toggle_enable_filters = wrap_explorer_member("filters", "toggle")
192192
Api.tree.toggle_gitignore_filter = wrap_explorer_member_args("filters", "toggle", "git_ignored")
@@ -316,6 +316,8 @@ Api.node.navigate.diagnostics.prev_recursive = wrap_node(actions.moves.item.fn({
316316
Api.node.navigate.opened.next = wrap_node(actions.moves.item.fn({ where = "next", what = "opened" }))
317317
Api.node.navigate.opened.prev = wrap_node(actions.moves.item.fn({ where = "prev", what = "opened" }))
318318

319+
Api.node.collapse = wrap_node(actions.tree.modifiers.collapse.node)
320+
319321
---@class ApiNodeDeleteWipeBufferOpts
320322
---@field force boolean|nil default false
321323

lua/nvim-tree/keymap.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ function M.default_on_attach(bufnr)
9696
vim.keymap.set("n", "S", api.tree.search_node, opts("Search"))
9797
vim.keymap.set("n", "u", api.fs.rename_full, opts("Rename: Full Path"))
9898
vim.keymap.set("n", "U", api.tree.toggle_custom_filter, opts("Toggle Filter: Hidden"))
99-
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse"))
99+
vim.keymap.set("n", "W", api.tree.collapse_all, opts("Collapse All"))
100100
vim.keymap.set("n", "x", api.fs.cut, opts("Cut"))
101101
vim.keymap.set("n", "y", api.fs.copy.filename, opts("Copy Name"))
102102
vim.keymap.set("n", "Y", api.fs.copy.relative_path, opts("Copy Relative Path"))

0 commit comments

Comments
 (0)