Skip to content

Commit 70e5451

Browse files
linepilorentzlasson
authored andcommitted
feat: support collapse a single folder under cursor
with messy conflict resolution
1 parent ebcaccd commit 70e5451

File tree

4 files changed

+49
-6
lines changed

4 files changed

+49
-6
lines changed

doc/nvim-tree-lua.txt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,15 @@ 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({ under_cursor = false, keep_buffers = false, })
345+
346+
*:NvimTreeCollapseFolder*
347+
348+
Collapses the folder under cursor
349+
350+
See |nvim-tree-api.tree.collapse_all()|
351+
352+
Calls: api.tree.collapse_all({ under_cursor = true, keep_buffers = false, })
345353

346354
*:NvimTreeCollapseKeepBuffers*
347355

@@ -1829,10 +1837,14 @@ tree.find_file({opts}) *nvim-tree-api.tree.find_file()*
18291837
tree.search_node() *nvim-tree-api.tree.search_node()*
18301838
Open the search dialogue as per the search_node action.
18311839

1832-
tree.collapse_all({keep_buffers}) *nvim-tree-api.tree.collapse_all()*
1840+
tree.collapse_all({opts}) *nvim-tree-api.tree.collapse_all()*
18331841
Collapse the tree.
18341842

18351843
Parameters: ~
1844+
{opts} (table) optional parameters
1845+
1846+
Parameters: ~
1847+
• {under_cursor} (boolean) only collapse the node under cursor
18361848
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
18371849

18381850
tree.expand_all({node}) *nvim-tree-api.tree.expand_all()*
@@ -3340,6 +3352,7 @@ highlight group is not, hard linking as follows: >
33403352
|nvim-tree-api.tree.close_in_all_tabs()|
33413353
|nvim-tree-api.tree.close_in_this_tab()|
33423354
|nvim-tree-api.tree.collapse_all()|
3355+
|nvim-tree-api.tree.collapse
33433356
|nvim-tree-api.tree.expand_all()|
33443357
|nvim-tree-api.tree.find_file()|
33453358
|nvim-tree-api.tree.focus()|

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

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@ local function buf_match()
2323
end
2424
end
2525

26-
---@param keep_buffers boolean
27-
function M.fn(keep_buffers)
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
31+
2832
local explorer = core.get_explorer()
2933
if not explorer then
3034
return
@@ -37,7 +41,17 @@ function M.fn(keep_buffers)
3741

3842
local matches = buf_match()
3943

40-
Iterator.builder(explorer.nodes)
44+
local selectedNodes
45+
if under_cursor then
46+
if not node or not node.nodes then
47+
return
48+
end
49+
selectedNodes = node.nodes
50+
else
51+
selectedNodes = explorer.nodes
52+
end
53+
54+
Iterator.builder(selectedNodes)
4155
:hidden()
4256
:applier(function(n)
4357
local dir = n:as(DirectoryNode)

lua/nvim-tree/api.lua

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ Api.tree.get_nodes = wrap_explorer("get_nodes")
182182

183183
Api.tree.find_file = wrap(actions.tree.find_file.fn)
184184
Api.tree.search_node = wrap(actions.finders.search_node.fn)
185+
186+
---@class ApiTreeCollapseOpts
187+
---@field under_cursor boolean
188+
---@field keep_buffers boolean
189+
185190
Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse_all.fn)
186191
Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand_all.fn)
187192
Api.tree.toggle_enable_filters = wrap_explorer_member("filters", "toggle")

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)