Skip to content

Commit 593323f

Browse files
committed
feat: support collapse a single folder under cursor
1 parent 4e396b2 commit 593323f

File tree

5 files changed

+62
-0
lines changed

5 files changed

+62
-0
lines changed

doc/nvim-tree-lua.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,14 @@ See |nvim-tree-highlight| for details.
341341

342342
Calls: `api.tree.collapse_all(false)`
343343

344+
*:NvimTreeCollapseFolder*
345+
346+
Collapses the folder under cursor
347+
348+
See |nvim-tree-api.tree.collapse()|
349+
350+
Calls: `api.tree.collapse()`
351+
344352
*:NvimTreeCollapseKeepBuffers*
345353

346354
Collapses the nvim-tree recursively, but keep the directories open, which are
@@ -1770,6 +1778,9 @@ tree.collapse_all({keep_buffers}) *nvim-tree-api.tree.collapse_all()*
17701778
Parameters: ~
17711779
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
17721780

1781+
tree.collapse() *nvim-tree-api.tree.collapse()*
1782+
Collapse the folder under cursor.
1783+
17731784
tree.expand_all() *nvim-tree-api.tree.expand_all()*
17741785
Recursively expand all nodes in the tree.
17751786
Folder: only the nodes underneath that folder.
@@ -3043,6 +3054,7 @@ highlight group is not, hard linking as follows: >
30433054
|nvim-tree-api.tree.close_in_all_tabs()|
30443055
|nvim-tree-api.tree.close_in_this_tab()|
30453056
|nvim-tree-api.tree.collapse_all()|
3057+
|nvim-tree-api.tree.collapse
30463058
|nvim-tree-api.tree.expand_all()|
30473059
|nvim-tree-api.tree.find_file()|
30483060
|nvim-tree-api.tree.focus()|
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
local renderer = require "nvim-tree.renderer"
2+
local utils = require "nvim-tree.utils"
3+
local core = require "nvim-tree.core"
4+
local lib = require "nvim-tree.lib"
5+
local Iterator = require "nvim-tree.iterators.node-iterator"
6+
7+
local M = {}
8+
9+
function M.fn()
10+
local node = lib.get_node_at_cursor()
11+
local explorer = core.get_explorer()
12+
13+
if explorer == nil then
14+
return
15+
end
16+
if node == nil then
17+
return
18+
end
19+
if node.nodes == nil then
20+
return
21+
end
22+
23+
Iterator.builder(node.nodes)
24+
:hidden()
25+
:applier(function(n)
26+
n.open = false
27+
end)
28+
:recursor(function(n)
29+
return n.group_next and { n.group_next } or n.nodes
30+
end)
31+
:iterate()
32+
33+
node.open = false
34+
renderer.draw()
35+
utils.focus_node_or_parent(node)
36+
end
37+
38+
return M

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

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

33
M.collapse_all = require "nvim-tree.actions.tree.modifiers.collapse-all"
4+
M.collapse = require "nvim-tree.actions.tree.modifiers.collapse"
45
M.expand_all = require "nvim-tree.actions.tree.modifiers.expand-all"
56
M.toggles = require "nvim-tree.actions.tree.modifiers.toggles"
67

lua/nvim-tree/api.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ Api.tree.get_nodes = wrap(lib.get_nodes)
161161
Api.tree.find_file = wrap(actions.tree.find_file.fn)
162162
Api.tree.search_node = wrap(actions.finders.search_node.fn)
163163
Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse_all.fn)
164+
Api.tree.collapse = wrap(actions.tree.modifiers.collapse.fn)
164165
Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand_all.fn)
165166
Api.tree.toggle_enable_filters = wrap(actions.tree.modifiers.toggles.enable)
166167
Api.tree.toggle_gitignore_filter = wrap(actions.tree.modifiers.toggles.git_ignored)

lua/nvim-tree/commands.lua

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,16 @@ local CMDS = {
124124
api.tree.collapse_all(false)
125125
end,
126126
},
127+
{
128+
name = "NvimTreeCollapseFolder",
129+
opts = {
130+
desc = "nvim-tree: collapse folder",
131+
bar = true,
132+
},
133+
command = function()
134+
api.tree.collapse(false)
135+
end,
136+
},
127137
{
128138
name = "NvimTreeCollapseKeepBuffers",
129139
opts = {

0 commit comments

Comments
 (0)