Skip to content

Commit 583718a

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

File tree

4 files changed

+52
-8
lines changed

4 files changed

+52
-8
lines changed

doc/nvim-tree-lua.txt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,15 @@ See |nvim-tree-highlight| for details.
339339

340340
See |nvim-tree-api.tree.collapse_all()|
341341

342-
Calls: `api.tree.collapse_all(false)`
342+
Calls: api.tree.collapse_all({ under_cursor = false, keep_buffers = false, })
343+
344+
*:NvimTreeCollapseFolder*
345+
346+
Collapses the folder under cursor
347+
348+
See |nvim-tree-api.tree.collapse_all()|
349+
350+
Calls: api.tree.collapse_all({ under_cursor = true, keep_buffers = false, })
343351

344352
*:NvimTreeCollapseKeepBuffers*
345353

@@ -1764,10 +1772,14 @@ tree.find_file({opts}) *nvim-tree-api.tree.find_file()*
17641772
tree.search_node() *nvim-tree-api.tree.search_node()*
17651773
Open the search dialogue as per the search_node action.
17661774

1767-
tree.collapse_all({keep_buffers}) *nvim-tree-api.tree.collapse_all()*
1775+
tree.collapse_all({opts}) *nvim-tree-api.tree.collapse_all()*
17681776
Collapse the tree.
17691777

17701778
Parameters: ~
1779+
{opts} (table) optional parameters
1780+
1781+
Parameters: ~
1782+
• {under_cursor} (boolean) only collapse the node under cursor
17711783
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
17721784

17731785
tree.expand_all() *nvim-tree-api.tree.expand_all()*
@@ -3043,6 +3055,7 @@ highlight group is not, hard linking as follows: >
30433055
|nvim-tree-api.tree.close_in_all_tabs()|
30443056
|nvim-tree-api.tree.close_in_this_tab()|
30453057
|nvim-tree-api.tree.collapse_all()|
3058+
|nvim-tree-api.tree.collapse
30463059
|nvim-tree-api.tree.expand_all()|
30473060
|nvim-tree-api.tree.find_file()|
30483061
|nvim-tree-api.tree.focus()|

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

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,33 @@ local function buf_match()
2323
end
2424
end
2525

26-
---@param keep_buffers boolean
27-
function M.fn(keep_buffers)
28-
local node = lib.get_node_at_cursor()
29-
local explorer = core.get_explorer()
26+
---@param opts ApiTreeCollapseOpts|nil
27+
function M.fn(opts)
28+
opts = opts or {}
29+
local keep_buffers = opts.keep_buffers or false
30+
local under_cursor = opts.under_cursor or false
3031

32+
local explorer = core.get_explorer()
3133
if explorer == nil then
3234
return
3335
end
3436

3537
local matches = buf_match()
3638

37-
Iterator.builder(explorer.nodes)
39+
local node = lib.get_node_at_cursor()
40+
41+
local selectedNodes
42+
if under_cursor then
43+
if node == nil or node.nodes == nil then
44+
return
45+
end
46+
selectedNodes = node.nodes
47+
node.open = false
48+
else
49+
selectedNodes = explorer.nodes
50+
end
51+
52+
Iterator.builder(selectedNodes)
3853
:hidden()
3954
:applier(function(n)
4055
if n.nodes ~= nil then

lua/nvim-tree/api.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,11 @@ Api.tree.get_nodes = wrap(lib.get_nodes)
160160

161161
Api.tree.find_file = wrap(actions.tree.find_file.fn)
162162
Api.tree.search_node = wrap(actions.finders.search_node.fn)
163+
164+
---@class ApiTreeCollapseOpts
165+
---@field under_cursor boolean
166+
---@field keep_buffers boolean
167+
163168
Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse_all.fn)
164169
Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand_all.fn)
165170
Api.tree.toggle_enable_filters = wrap(actions.tree.modifiers.toggles.enable)

lua/nvim-tree/commands.lua

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
local api = require "nvim-tree.api"
22
local view = require "nvim-tree.view"
3+
local lib = require "nvim-tree.lib"
34

45
local M = {}
56

@@ -121,7 +122,17 @@ local CMDS = {
121122
bar = true,
122123
},
123124
command = function()
124-
api.tree.collapse_all(false)
125+
api.tree.collapse_all({ under_cursor = false, keep_buffers = false})
126+
end,
127+
},
128+
{
129+
name = "NvimTreeCollapseFolder",
130+
opts = {
131+
desc = "nvim-tree: collapse the folder under cursor",
132+
bar = true,
133+
},
134+
command = function()
135+
api.tree.collapse_all({ under_cursor = true, keep_buffers = false})
125136
end,
126137
},
127138
{

0 commit comments

Comments
 (0)