feat: support collapse a single folder under cursor

with messy conflict resolution
This commit is contained in:
linepi 2024-07-28 14:47:12 +08:00 committed by Lorentz Lasson
parent ebcaccda1c
commit 70e5451eb6
4 changed files with 49 additions and 6 deletions

View File

@ -341,7 +341,15 @@ See |nvim-tree-highlight| for details.
See |nvim-tree-api.tree.collapse_all()|
Calls: `api.tree.collapse_all(false)`
Calls: api.tree.collapse_all({ under_cursor = false, keep_buffers = false, })
*:NvimTreeCollapseFolder*
Collapses the folder under cursor
See |nvim-tree-api.tree.collapse_all()|
Calls: api.tree.collapse_all({ under_cursor = true, keep_buffers = false, })
*:NvimTreeCollapseKeepBuffers*
@ -1829,10 +1837,14 @@ tree.find_file({opts}) *nvim-tree-api.tree.find_file()*
tree.search_node() *nvim-tree-api.tree.search_node()*
Open the search dialogue as per the search_node action.
tree.collapse_all({keep_buffers}) *nvim-tree-api.tree.collapse_all()*
tree.collapse_all({opts}) *nvim-tree-api.tree.collapse_all()*
Collapse the tree.
Parameters: ~
• {opts} (table) optional parameters
Parameters: ~
• {under_cursor} (boolean) only collapse the node under cursor
• {keep_buffers} (boolean) do not collapse nodes with open buffers.
tree.expand_all({node}) *nvim-tree-api.tree.expand_all()*
@ -3340,6 +3352,7 @@ highlight group is not, hard linking as follows: >
|nvim-tree-api.tree.close_in_all_tabs()|
|nvim-tree-api.tree.close_in_this_tab()|
|nvim-tree-api.tree.collapse_all()|
|nvim-tree-api.tree.collapse
|nvim-tree-api.tree.expand_all()|
|nvim-tree-api.tree.find_file()|
|nvim-tree-api.tree.focus()|

View File

@ -23,8 +23,12 @@ local function buf_match()
end
end
---@param keep_buffers boolean
function M.fn(keep_buffers)
---@param opts ApiTreeCollapseOpts|nil
function M.fn(opts)
opts = opts or {}
local keep_buffers = opts.keep_buffers or false
local under_cursor = opts.under_cursor or false
local explorer = core.get_explorer()
if not explorer then
return
@ -37,7 +41,17 @@ function M.fn(keep_buffers)
local matches = buf_match()
Iterator.builder(explorer.nodes)
local selectedNodes
if under_cursor then
if not node or not node.nodes then
return
end
selectedNodes = node.nodes
else
selectedNodes = explorer.nodes
end
Iterator.builder(selectedNodes)
:hidden()
:applier(function(n)
local dir = n:as(DirectoryNode)

View File

@ -182,6 +182,11 @@ Api.tree.get_nodes = wrap_explorer("get_nodes")
Api.tree.find_file = wrap(actions.tree.find_file.fn)
Api.tree.search_node = wrap(actions.finders.search_node.fn)
---@class ApiTreeCollapseOpts
---@field under_cursor boolean
---@field keep_buffers boolean
Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse_all.fn)
Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand_all.fn)
Api.tree.toggle_enable_filters = wrap_explorer_member("filters", "toggle")

View File

@ -1,5 +1,6 @@
local api = require("nvim-tree.api")
local view = require("nvim-tree.view")
local lib = require("nvim-tree.lib")
local M = {}
@ -121,7 +122,17 @@ local CMDS = {
bar = true,
},
command = function()
api.tree.collapse_all(false)
api.tree.collapse_all({ under_cursor = false, keep_buffers = false })
end,
},
{
name = "NvimTreeCollapseFolder",
opts = {
desc = "nvim-tree: collapse the folder under cursor",
bar = true,
},
command = function()
api.tree.collapse_all({ under_cursor = true, keep_buffers = false })
end,
},
{