Skip to content

feat: make it possible to collapse the tree but keep the directories open which are in used in buffers #1057

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ nnoremap <leader>n :NvimTreeFindFile<CR>
" NvimTreeFocus
" NvimTreeFindFileToggle
" NvimTreeResize
" NvimTreeCollapse
" NvimTreeCollapseKeepBuffers

set termguicolors " this variable must be enabled for colors to be applied properly

Expand Down
9 changes: 9 additions & 0 deletions doc/nvim-tree-lua.txt
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,15 @@ adds or removes the given value to the current window width.
Example `:NvimTreeResize -20` removes the value 20 from the current width. And
`:NvimTreeResize +20` adds the value 20 to the current width.

|:NvimTreeCollapse| *:NvimTreeCollapse*

Collapses the nvim-tree recursively.

|:NvimTreeCollapseKeepBuffers| *:NvimTreeCollapseKeepBuffers*

Collapses the nvim-tree recursively, but keep the directories open, which are
used in an open buffer.


==============================================================================
SETUP *nvim-tree.setup*
Expand Down
2 changes: 2 additions & 0 deletions lua/nvim-tree.lua
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,8 @@ local function setup_vim_commands()
command! NvimTreeFindFile lua require'nvim-tree'.find_file(true)
command! NvimTreeFindFileToggle lua require'nvim-tree'.toggle(true)
command! -nargs=1 NvimTreeResize lua require'nvim-tree'.resize("<args>")
command! NvimTreeCollapse lua require'nvim-tree.actions.collapse-all'.fn()
command! NvimTreeCollapseKeepBuffers lua require'nvim-tree.actions.collapse-all'.fn(true)
]]
end

Expand Down
21 changes: 19 additions & 2 deletions lua/nvim-tree/actions/collapse-all.lua
Original file line number Diff line number Diff line change
@@ -1,12 +1,29 @@
local renderer = require "nvim-tree.renderer"
local utils = require "nvim-tree.utils"

local M = {}

function M.fn()
function M.fn(keep_buffers)
local buffer_paths = {}
for _, buffer in ipairs(vim.api.nvim_list_bufs()) do
table.insert(buffer_paths, vim.api.nvim_buf_get_name(buffer))
end

local function iter(nodes)
for _, node in pairs(nodes) do
if node.open then
node.open = false
local new_open = false

if keep_buffers == true then
for _, buffer_path in ipairs(buffer_paths) do
local matches = utils.str_find(buffer_path, node.absolute_path)
if matches then
new_open = true
end
end
end

node.open = new_open
end
if node.nodes then
iter(node.nodes)
Expand Down