From 8da4fd95afde2dfd8dc0d834d8c753839383ec51 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sat, 9 Jul 2022 14:30:49 +1000 Subject: [PATCH 1/4] fix(#1406): allow nvim-tree.renderer.icons.show.folder_arrow when not folder --- lua/nvim-tree/renderer/components/padding.lua | 2 +- lua/nvim-tree/renderer/init.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/nvim-tree/renderer/components/padding.lua b/lua/nvim-tree/renderer/components/padding.lua index 9050bff34a7..feac974c1f6 100644 --- a/lua/nvim-tree/renderer/components/padding.lua +++ b/lua/nvim-tree/renderer/components/padding.lua @@ -35,7 +35,7 @@ local function get_padding_indent_markers(depth, idx, nodes_number, _, markers) end function M.reload_padding_function() - if M.config.icons.show.folder and M.config.icons.show.folder_arrow then + if M.config.icons.show.folder_arrow then M.get_padding = get_padding_arrows() end diff --git a/lua/nvim-tree/renderer/init.lua b/lua/nvim-tree/renderer/init.lua index 8f05fae9d65..a246360c855 100644 --- a/lua/nvim-tree/renderer/init.lua +++ b/lua/nvim-tree/renderer/init.lua @@ -41,7 +41,7 @@ function M.render_hl(bufnr, hl) end local function should_show_arrows() - return not M.config.indent_markers.enable and M.config.icons.show.folder and M.config.icons.show.folder_arrow + return not M.config.indent_markers.enable and M.config.icons.show.folder_arrow end local picture_map = { From b8b0529ade2fbe74503c31f4feddf6c74bbb5e69 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sat, 9 Jul 2022 18:31:52 +1000 Subject: [PATCH 2/4] fix(#1406): allow nvim-tree.renderer.icons.show.folder_arrow when indent markers enabled --- doc/nvim-tree-lua.txt | 4 +- lua/nvim-tree/renderer/builder.lua | 7 +--- lua/nvim-tree/renderer/components/padding.lua | 41 ++++++++++--------- lua/nvim-tree/renderer/init.lua | 6 --- 4 files changed, 25 insertions(+), 33 deletions(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 03b947e07ef..18f3aa916f6 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -679,8 +679,8 @@ UI rendering setup Type: `boolean`, Default: `true` *nvim-tree.renderer.icons.show.folder_arrow* - Show a small arrow before the folder icon. - Requires |renderer.icons.show.folder| `= true` and |renderer.indent_markers.enable| `= false` + Show a small arrow before the folder node. Arrow will be a part of the + node when using |renderer.indent_markers|. Type: `boolean`, Default: `true` *nvim-tree.renderer.icons.show.git* diff --git a/lua/nvim-tree/renderer/builder.lua b/lua/nvim-tree/renderer/builder.lua index 627ce6f5987..8db4128b042 100644 --- a/lua/nvim-tree/renderer/builder.lua +++ b/lua/nvim-tree/renderer/builder.lua @@ -10,7 +10,7 @@ Builder.__index = Builder function Builder.new(root_cwd) return setmetatable({ index = 0, - depth = nil, + depth = 0, highlights = {}, lines = {}, markers = {}, @@ -19,11 +19,6 @@ function Builder.new(root_cwd) }, Builder) end -function Builder:configure_initial_depth(show_arrows) - self.depth = show_arrows and 2 or 0 - return self -end - function Builder:configure_root_modifier(root_folder_modifier) self.root_folder_modifier = root_folder_modifier or ":~" return self diff --git a/lua/nvim-tree/renderer/components/padding.lua b/lua/nvim-tree/renderer/components/padding.lua index feac974c1f6..3d7611f85f2 100644 --- a/lua/nvim-tree/renderer/components/padding.lua +++ b/lua/nvim-tree/renderer/components/padding.lua @@ -1,21 +1,8 @@ local M = {} -function M.get_padding(depth) - return string.rep(" ", depth) -end - -local function get_padding_arrows() - return function(depth, _, _, node) - if node.nodes then - local icon = M.config.icons.glyphs.folder[node.open and "arrow_open" or "arrow_closed"] - return string.rep(" ", depth - 2) .. icon .. " " - end - return string.rep(" ", depth) - end -end - -local function get_padding_indent_markers(depth, idx, nodes_number, _, markers) +local function get_padding_indent_markers(depth, idx, nodes_number, markers) local padding = "" + if depth ~= 0 then local rdepth = depth / 2 markers[rdepth] = idx ~= nodes_number @@ -34,14 +21,30 @@ local function get_padding_indent_markers(depth, idx, nodes_number, _, markers) return padding end -function M.reload_padding_function() - if M.config.icons.show.folder_arrow then - M.get_padding = get_padding_arrows() +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 + +function M.get_padding(depth, idx, nodes_number, node, markers) + local padding = "" if M.config.indent_markers.enable then - M.get_padding = get_padding_indent_markers + padding = padding .. get_padding_indent_markers(depth, idx, nodes_number, markers) + else + padding = padding .. string.rep(" ", depth) + end + + if M.config.icons.show.folder_arrow then + padding = padding .. get_padding_arrows(node, not M.config.indent_markers.enable) end + + return padding end function M.setup(opts) diff --git a/lua/nvim-tree/renderer/init.lua b/lua/nvim-tree/renderer/init.lua index a246360c855..31d77e45297 100644 --- a/lua/nvim-tree/renderer/init.lua +++ b/lua/nvim-tree/renderer/init.lua @@ -40,10 +40,6 @@ function M.render_hl(bufnr, hl) end end -local function should_show_arrows() - return not M.config.indent_markers.enable and M.config.icons.show.folder_arrow -end - local picture_map = { jpg = true, jpeg = true, @@ -60,7 +56,6 @@ function M.draw() local ps = log.profile_start "draw" local cursor = api.nvim_win_get_cursor(view.get_winnr()) - _padding.reload_padding_function() icon_component.reset_config() local lines, hl @@ -69,7 +64,6 @@ function M.draw() lines, hl = help.compute_lines() else lines, hl, signs = Builder.new(core.get_cwd()) - :configure_initial_depth(should_show_arrows()) :configure_root_modifier(M.config.root_folder_modifier) :configure_trailing_slash(M.config.add_trailing) :configure_special_files(M.config.special_files) From e697d20cc19073d41f201d938d5b7d76fbf1ea97 Mon Sep 17 00:00:00 2001 From: kiyan Date: Sat, 9 Jul 2022 10:47:17 +0200 Subject: [PATCH 3/4] fix(builder): highlight first iteration for arrow column --- lua/nvim-tree/renderer/builder.lua | 2 +- lua/nvim-tree/view.lua | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lua/nvim-tree/renderer/builder.lua b/lua/nvim-tree/renderer/builder.lua index 8db4128b042..4057bb6a0be 100644 --- a/lua/nvim-tree/renderer/builder.lua +++ b/lua/nvim-tree/renderer/builder.lua @@ -227,7 +227,7 @@ end function Builder:_build_line(node, idx, num_children) local padding = pad.get_padding(self.depth, idx, num_children, node, self.markers) - if self.depth > 0 then + if string.len(padding) > 0 then self:_insert_highlight("NvimTreeIndentMarker", 0, string.len(padding)) end diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 6d4b77c6ee2..041419f7b5c 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -30,8 +30,7 @@ M.View = { "Normal:NvimTreeNormal", "CursorLine:NvimTreeCursorLine", -- #1221 WinSeparator not present in nvim 0.6.1 and some builds of 0.7.0 - pcall(vim.cmd, "silent hi WinSeparator") and "WinSeparator:NvimTreeWinSeparator" - or "VertSplit:NvimTreeWinSeparator", + pcall(vim.cmd, "silent hi WinSeparator") and "WinSeparator:NvimTreeWinSeparator" or "VertSplit:NvimTreeWinSeparator", "StatusLine:NvimTreeStatusLine", "StatusLineNC:NvimTreeStatuslineNC", "SignColumn:NvimTreeSignColumn", From f8d46f6e7adb703f9b0b71e328ae71390ab7b39d Mon Sep 17 00:00:00 2001 From: kiyan Date: Sat, 9 Jul 2022 10:51:54 +0200 Subject: [PATCH 4/4] fix stylua --- lua/nvim-tree/view.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lua/nvim-tree/view.lua b/lua/nvim-tree/view.lua index 041419f7b5c..c189ccd0a4a 100644 --- a/lua/nvim-tree/view.lua +++ b/lua/nvim-tree/view.lua @@ -4,6 +4,12 @@ local M = {} local events = require "nvim-tree.events" +local function get_win_sep_hl() + -- #1221 WinSeparator not present in nvim 0.6.1 and some builds of 0.7.0 + local has_win_sep = pcall(vim.cmd, "silent hi WinSeparator") + return has_win_sep and "WinSeparator:NvimTreeWinSeparator" or "VertSplit:NvimTreeWinSeparator" +end + M.View = { adaptive_size = false, centralize_selection = false, @@ -29,8 +35,7 @@ M.View = { "EndOfBuffer:NvimTreeEndOfBuffer", "Normal:NvimTreeNormal", "CursorLine:NvimTreeCursorLine", - -- #1221 WinSeparator not present in nvim 0.6.1 and some builds of 0.7.0 - pcall(vim.cmd, "silent hi WinSeparator") and "WinSeparator:NvimTreeWinSeparator" or "VertSplit:NvimTreeWinSeparator", + get_win_sep_hl(), "StatusLine:NvimTreeStatusLine", "StatusLineNC:NvimTreeStatuslineNC", "SignColumn:NvimTreeSignColumn",