feat(#2316): add NvimTreeFolderArrowClosed NvimTreeFolderArrowOpen (#2408)

This commit is contained in:
Alexander Courtis 2023-09-09 14:21:25 +10:00 committed by GitHub
parent 33c3bc562b
commit 8f48426c88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 52 additions and 36 deletions

View File

@ -2142,27 +2142,29 @@ Icon: >
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
NvimTreeClosedFolderIcon NvimTreeFolderIcon
NvimTreeBookmark
NvimTreeFolderArrowClosed NvimTreeIndentMarker
NvimTreeFolderArrowOpen NvimTreeIndentMarker
<
Indent: >
NvimTreeIndentMarker
<
Standard: >
NvimTreeNormal Normal
NvimTreeNormalFloat NormalFloat
NvimTreeNormalNC NormalFloat
NvimTreeNormal Normal
NvimTreeNormalFloat NormalFloat
NvimTreeNormalNC NormalFloat
NvimTreeLineNr LineNr
NvimTreeWinSeparator WinSeparator
NvimTreeEndOfBuffer EndOfBuffer
NvimTreePopup Normal
NvimTreeSignColumn NvimTreeNormal
NvimTreeLineNr LineNr
NvimTreeWinSeparator WinSeparator
NvimTreeEndOfBuffer EndOfBuffer
NvimTreePopup Normal
NvimTreeSignColumn NvimTreeNormal
NvimTreeCursorColumn CursorColumn
NvimTreeCursorLine CursorLine
NvimTreeCursorLineNr CursorLineNr
NvimTreeCursorColumn CursorColumn
NvimTreeCursorLine CursorLine
NvimTreeCursorLineNr CursorLineNr
NvimTreeStatusLine StatusLine
NvimTreeStatusLineNC StatusLineNC
NvimTreeStatusLine StatusLine
NvimTreeStatusLineNC StatusLineNC
<
Picker: >
NvimTreeWindowPicker

View File

@ -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
@ -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)
@ -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)
@ -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

View File

@ -58,24 +58,14 @@ 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
@ -83,16 +73,38 @@ function M.get_padding(depth, idx, nodes_number, node, markers)
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
if show_arrows then
padding = padding .. get_padding_arrows(node, not show_markers)
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
return { str = padding, hl = "NvimTreeIndentMarker" }
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 = str, hl = hl }
end
function M.setup(opts)