Skip to content

feat(#2316): add NvimTreeFolderArrowClosed NvimTreeFolderArrowOpen #2408

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 1 commit into from
Sep 9, 2023
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
34 changes: 18 additions & 16 deletions doc/nvim-tree-lua.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2142,27 +2142,29 @@ Icon: >
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
NvimTreeClosedFolderIcon NvimTreeFolderIcon
NvimTreeBookmark
NvimTreeFolderArrowClosed NvimTreeIndentMarker
NvimTreeFolderArrowOpen NvimTreeIndentMarker
<
Indent: >
NvimTreeIndentMarker
<
Standard: >
NvimTreeNormal Normal
NvimTreeNormalFloat NormalFloat
NvimTreeNormalNC NormalFloat

NvimTreeLineNr LineNr
NvimTreeWinSeparator WinSeparator
NvimTreeEndOfBuffer EndOfBuffer
NvimTreePopup Normal
NvimTreeSignColumn NvimTreeNormal

NvimTreeCursorColumn CursorColumn
NvimTreeCursorLine CursorLine
NvimTreeCursorLineNr CursorLineNr

NvimTreeStatusLine StatusLine
NvimTreeStatusLineNC StatusLineNC
NvimTreeNormal Normal
NvimTreeNormalFloat NormalFloat
NvimTreeNormalNC NormalFloat

NvimTreeLineNr LineNr
NvimTreeWinSeparator WinSeparator
NvimTreeEndOfBuffer EndOfBuffer
NvimTreePopup Normal
NvimTreeSignColumn NvimTreeNormal

NvimTreeCursorColumn CursorColumn
NvimTreeCursorLine CursorLine
NvimTreeCursorLineNr CursorLineNr

NvimTreeStatusLine StatusLine
NvimTreeStatusLineNC StatusLineNC
<
Picker: >
NvimTreeWindowPicker
Expand Down
12 changes: 7 additions & 5 deletions lua/nvim-tree/renderer/builder.lua
Original file line number Diff line number Diff line change
Expand Up @@ -290,14 +290,15 @@ function Builder:_get_highlight_override(node, unloaded_bufnr)
return icon_hl, name_hl
end

---@param padding HighlightedString
---@param indent_markers HighlightedString[]
---@param arrows HighlightedString[]|nil
---@param icon HighlightedString
---@param name HighlightedString
---@param git_icons HighlightedString[]|nil
---@param diagnostics_icon HighlightedString|nil
---@param modified_icon HighlightedString|nil
---@return HighlightedString[]
function Builder:_format_line(padding, icon, name, git_icons, diagnostics_icon, modified_icon)
function Builder:_format_line(indent_markers, arrows, icon, name, git_icons, diagnostics_icon, modified_icon)
local added_len = 0
local function add_to_end(t1, t2)
for _, v in ipairs(t2) do
Expand All @@ -315,7 +316,7 @@ function Builder:_format_line(padding, icon, name, git_icons, diagnostics_icon,
end
end

local line = { padding }
local line = { indent_markers, arrows }
add_to_end(line, { icon })
if git_icons and self.git_placement == "before" then
add_to_end(line, git_icons)
Expand Down Expand Up @@ -344,7 +345,8 @@ end

function Builder:_build_line(node, idx, num_children, unloaded_bufnr)
-- various components
local padding = pad.get_padding(self.depth, idx, num_children, node, self.markers)
local indent_markers = pad.get_indent_markers(self.depth, idx, num_children, node, self.markers)
local arrows = pad.get_arrows(node)
local git_icons = self:_get_git_icons(node)
local modified_icon = self:_get_modified_icon(node)
local diagnostics_icon = self:_get_diagnostics_icon(node)
Expand All @@ -370,7 +372,7 @@ function Builder:_build_line(node, idx, num_children, unloaded_bufnr)
name.hl = name_hl
end

local line = self:_format_line(padding, icon, name, git_icons, diagnostics_icon, modified_icon)
local line = self:_format_line(indent_markers, arrows, icon, name, git_icons, diagnostics_icon, modified_icon)
self:_insert_line(self:_unwrap_highlighted_strings(line))

self.index = self.index + 1
Expand Down
48 changes: 30 additions & 18 deletions lua/nvim-tree/renderer/components/padding.lua
Original file line number Diff line number Diff line change
Expand Up @@ -58,41 +58,53 @@ local function get_padding_indent_markers(depth, idx, nodes_number, markers, wit
return padding
end

local function get_padding_arrows(node, indent)
if node.nodes then
return M.config.icons.glyphs.folder[node.open and "arrow_open" or "arrow_closed"] .. " "
elseif indent then
return " "
else
return ""
end
end

---@param depth integer
---@param idx integer
---@param nodes_number integer
---@param node table
---@param markers table
---@return HighlightedString
function M.get_padding(depth, idx, nodes_number, node, markers)
local padding = ""
---@return HighlightedString[]
function M.get_indent_markers(depth, idx, nodes_number, node, markers)
local str = ""

local show_arrows = M.config.icons.show.folder_arrow
local show_markers = M.config.indent_markers.enable
local inline_arrows = M.config.indent_markers.inline_arrows
local indent_width = M.config.indent_width

if show_markers then
padding = padding .. get_padding_indent_markers(depth, idx, nodes_number, markers, show_arrows, inline_arrows, node)
str = str .. get_padding_indent_markers(depth, idx, nodes_number, markers, show_arrows, inline_arrows, node)
else
padding = padding .. string.rep(" ", depth * indent_width)
str = str .. string.rep(" ", depth * indent_width)
end

return { str = str, hl = "NvimTreeIndentMarker" }
end

---@param node table
---@return HighlightedString[]|nil
function M.get_arrows(node)
if not M.config.icons.show.folder_arrow then
return
end

if show_arrows then
padding = padding .. get_padding_arrows(node, not show_markers)
local str
local hl = "NvimTreeFolderArrowClosed"

if node.nodes then
if node.open then
str = M.config.icons.glyphs.folder["arrow_open"] .. " "
hl = "NvimTreeFolderArrowOpen"
else
str = M.config.icons.glyphs.folder["arrow_closed"] .. " "
end
elseif M.config.indent_markers.enable then
str = ""
else
str = " "
end

return { str = padding, hl = "NvimTreeIndentMarker" }
return { str = str, hl = hl }
end

function M.setup(opts)
Expand Down