diff --git a/lua/nvim-tree/renderer.lua b/lua/nvim-tree/renderer/init.lua similarity index 93% rename from lua/nvim-tree/renderer.lua rename to lua/nvim-tree/renderer/init.lua index 5fcc6ee0..f228c44e 100644 --- a/lua/nvim-tree/renderer.lua +++ b/lua/nvim-tree/renderer/init.lua @@ -1,6 +1,7 @@ local config = require'nvim-tree.config' local utils = require'nvim-tree.utils' local view = require'nvim-tree.view' +local _padding = require'nvim-tree.renderer.padding' local api = vim.api @@ -241,40 +242,6 @@ if icon_state.show_git_icon then end end -local get_padding = function(depth) - return string.rep(' ', depth) -end - -if icon_state.show_folder_icon and icon_state.show_folder_arrows then - get_padding = function(depth, _, _, node) - if node.entries then - local icon = icon_state.icons.folder_icons[node.open and 'arrow_open' or 'arrow_closed'] - return string.rep(' ', depth - 2)..icon..' ' - end - return string.rep(' ', depth) - end -end - -if vim.g.nvim_tree_indent_markers == 1 then - get_padding = function(depth, idx, tree, _, markers) - local padding = "" - if depth ~= 0 then - local rdepth = depth/2 - markers[rdepth] = idx ~= #tree.entries - for i=1,rdepth do - if idx == #tree.entries and i == rdepth then - padding = padding..'└ ' - elseif markers[i] then - padding = padding..'│ ' - else - padding = padding..' ' - end - end - end - return padding - end -end - local picture = { jpg = true, jpeg = true, @@ -303,7 +270,7 @@ local function update_draw_data(tree, depth, markers) end for idx, node in ipairs(tree.entries) do - local padding = get_padding(depth, idx, tree, node, markers) + local padding = _padding.get_padding(depth, idx, tree, node, markers) local offset = string.len(padding) if depth > 0 then table.insert(hl, { 'NvimTreeIndentMarker', index, 0, offset }) @@ -443,6 +410,8 @@ function M.draw(tree, reload) hl = {} local show_arrows = icon_state.show_folder_icon and icon_state.show_folder_arrows + _padding.reload_padding_function() + icon_state = config.get_icon_state() update_draw_data(tree, show_arrows and 2 or 0, {}) end diff --git a/lua/nvim-tree/renderer/padding.lua b/lua/nvim-tree/renderer/padding.lua new file mode 100644 index 00000000..aa13a505 --- /dev/null +++ b/lua/nvim-tree/renderer/padding.lua @@ -0,0 +1,47 @@ +local M = {} + +function M.get_padding(depth) + return string.rep(' ', depth) +end + +local function get_padding_arrows(icon_state) + return function(depth, _, _, node) + if node.entries then + local icon = icon_state.icons.folder_icons[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, tree, _, markers) + local padding = "" + if depth ~= 0 then + local rdepth = depth/2 + markers[rdepth] = idx ~= #tree.entries + for i=1,rdepth do + if idx == #tree.entries and i == rdepth then + padding = padding..'└ ' + elseif markers[i] then + padding = padding..'│ ' + else + padding = padding..' ' + end + end + end + return padding +end + +function M.reload_padding_function() + local icon_state = require'nvim-tree.config'.get_icon_state() + + if icon_state.show_folder_icon and icon_state.show_folder_arrows then + M.get_padding = get_padding_arrows(icon_state) + end + + if vim.g.nvim_tree_indent_markers == 1 then + M.get_padding = get_padding_indent_markers + end +end + +return M