diff --git a/.hooks/pre-commit.sh b/.hooks/pre-commit.sh index 5b139ec3263..9e89e95700c 100755 --- a/.hooks/pre-commit.sh +++ b/.hooks/pre-commit.sh @@ -1,3 +1,3 @@ -#!/bin/sh +#!/usr/bin/env sh make diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index b3aa35abb2b..150a62f1962 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -339,9 +339,17 @@ See |nvim-tree-highlight| for details. Collapses the nvim-tree recursively. - See |nvim-tree-api.tree.collapse_all()| + See |nvim-tree-api.tree.collapse()| + + Calls: api.tree.collapse({ under_cursor = false, keep_buffers = false, }) + +*:NvimTreeCollapseFolder* - Calls: `api.tree.collapse_all(false)` + Collapses the folder under cursor + + See |nvim-tree-api.tree.collapse()| + + Calls: api.tree.collapse({ under_cursor = true, keep_buffers = false, }) *:NvimTreeCollapseKeepBuffers* @@ -1829,6 +1837,16 @@ 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({opts}) *nvim-tree-api.tree.collapse()* + Collapse the tree. + + Parameters: ~ + • {opts} (table) parameters + + Parameters: ~ + • {under_cursor} (boolean) only collapse the node under cursor + • {keep_buffers} (boolean) do not collapse nodes with open buffers. + tree.collapse_all({keep_buffers}) *nvim-tree-api.tree.collapse_all()* Collapse the tree. @@ -3340,6 +3358,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()| diff --git a/lua/nvim-tree/actions/tree/modifiers/collapse-all.lua b/lua/nvim-tree/actions/tree/modifiers/collapse.lua similarity index 62% rename from lua/nvim-tree/actions/tree/modifiers/collapse-all.lua rename to lua/nvim-tree/actions/tree/modifiers/collapse.lua index 049be2bbfa2..0f1d923edd4 100644 --- a/lua/nvim-tree/actions/tree/modifiers/collapse-all.lua +++ b/lua/nvim-tree/actions/tree/modifiers/collapse.lua @@ -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.collapse(opts) + opts = opts or { + keep_buffers = false, + under_cursor = true + } local explorer = core.get_explorer() if not explorer then return @@ -37,12 +41,24 @@ function M.fn(keep_buffers) local matches = buf_match() - Iterator.builder(explorer.nodes) + local selected_nodes + if opts.under_cursor then + local dir = node:as(DirectoryNode) + if not node or not node.nodes then + return + end + selected_nodes = node.nodes + dir.open = false + else + selected_nodes = explorer.nodes + end + + Iterator.builder(selected_nodes) :hidden() :applier(function(n) local dir = n:as(DirectoryNode) if dir then - dir.open = keep_buffers and matches(dir.absolute_path) + dir.open = opts.keep_buffers and matches(dir.absolute_path) end end) :recursor(function(n) @@ -54,4 +70,10 @@ function M.fn(keep_buffers) utils.focus_node_or_parent(node) end +---@param keep_buffers boolean | nil +function M.collapse_all(keep_buffers) + keep_buffers = keep_buffers or false + M.collapse({ keep_buffers = keep_buffers, under_cursor = false }) +end + return M diff --git a/lua/nvim-tree/actions/tree/modifiers/init.lua b/lua/nvim-tree/actions/tree/modifiers/init.lua index f3ce27fc616..8b66dd61301 100644 --- a/lua/nvim-tree/actions/tree/modifiers/init.lua +++ b/lua/nvim-tree/actions/tree/modifiers/init.lua @@ -1,6 +1,6 @@ local M = {} -M.collapse_all = require("nvim-tree.actions.tree.modifiers.collapse-all") +M.collapse = require("nvim-tree.actions.tree.modifiers.collapse") M.expand_all = require("nvim-tree.actions.tree.modifiers.expand-all") function M.setup(opts) diff --git a/lua/nvim-tree/api.lua b/lua/nvim-tree/api.lua index 822dbf20c0e..2fe2bf9ce1c 100644 --- a/lua/nvim-tree/api.lua +++ b/lua/nvim-tree/api.lua @@ -182,7 +182,13 @@ 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) -Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse_all.fn) + +---@class ApiTreeCollapseOpts +---@field under_cursor boolean +---@field keep_buffers boolean + +Api.tree.collapse = wrap(actions.tree.modifiers.collapse.collapse) +Api.tree.collapse_all = wrap(actions.tree.modifiers.collapse.collapse_all) Api.tree.expand_all = wrap_node(actions.tree.modifiers.expand_all.fn) Api.tree.toggle_enable_filters = wrap_explorer_member("filters", "toggle") Api.tree.toggle_gitignore_filter = wrap_explorer_member_args("filters", "toggle", "git_ignored") diff --git a/lua/nvim-tree/commands.lua b/lua/nvim-tree/commands.lua index bff880c14fd..ff08c041485 100644 --- a/lua/nvim-tree/commands.lua +++ b/lua/nvim-tree/commands.lua @@ -121,7 +121,17 @@ local CMDS = { bar = true, }, command = function() - api.tree.collapse_all(false) + api.tree.collapse({ 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({ under_cursor = true, keep_buffers = false }) end, }, { @@ -131,7 +141,7 @@ local CMDS = { bar = true, }, command = function() - api.tree.collapse_all(true) + api.tree.collapse({ under_cursor = false, keep_buffers = true }) end, }, { diff --git a/scripts/doc-comments.sh b/scripts/doc-comments.sh index c31bbeaef44..2b49e8099a0 100755 --- a/scripts/doc-comments.sh +++ b/scripts/doc-comments.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash out=$(grep -nr "^--- @" lua) diff --git a/scripts/help-update.sh b/scripts/help-update.sh index 474e259d700..b888e61cd33 100755 --- a/scripts/help-update.sh +++ b/scripts/help-update.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env sh # run after changing nvim-tree.lua DEFAULT_OPTS or keymap.lua M.default_on_attach # scrapes and updates nvim-tree-lua.txt diff --git a/scripts/luals-check.sh b/scripts/luals-check.sh index 0a6de31d2cd..9d1e31f395f 100755 --- a/scripts/luals-check.sh +++ b/scripts/luals-check.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env sh # Performs a lua-language-server check on all files. # luals-out/check.json will be produced on any issues, returning 1.