diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 65c6bba89c8..5bc23a4d693 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -362,7 +362,16 @@ applying configuration. }, }, icons = { - webdev_colors = true, + web_devicons = { + file = { + enable = true, + color = true, + }, + folder = { + enable = false, + color = true, + }, + }, git_placement = "before", modified_placement = "after", padding = " ", @@ -970,9 +979,32 @@ UI rendering setup *nvim-tree.renderer.icons* Configuration options for icons. - *nvim-tree.renderer.icons.webdev_colors* - Use the webdev icon colors, otherwise `NvimTreeFileIcon`. - Type: `boolean`, Default: `true` + *nvim-tree.renderer.icons.web_devicons* + Configure optional plugin `"nvim-tree/nvim-web-devicons"` + + *nvim-tree.renderer.icons.web_devicons.file* + File icons. + + *nvim-tree.renderer.icons.web_devicons.file.enable* + Show icons on files. + Overrides |nvim-tree.renderer.icons.glyphs.default| + Type: `boolean`, Default: `true` + + *nvim-tree.renderer.icons.web_devicons.file.color* + Use icon colors for files. + Type: `boolean`, Default: `true` + + *nvim-tree.renderer.icons.web_devicons.folder* + Folder icons. + + *nvim-tree.renderer.icons.web_devicons.folder.enable* + Show icons on folders. + Overrides |nvim-tree.renderer.icons.glyphs.folder| + Type: `boolean`, Default: `false` + + *nvim-tree.renderer.icons.web_devicons.folder.color* + Use icon colors for folders. + Type: `boolean`, Default: `true` *nvim-tree.renderer.icons.git_placement* Place where the git icons will be rendered. @@ -999,7 +1031,7 @@ UI rendering setup Configuration options for showing icon types. *nvim-tree.renderer.icons.show.file* - Show an icon before the file name. `nvim-web-devicons` will be used if available. + Show an icon before the file name. Type: `boolean`, Default: `true` *nvim-tree.renderer.icons.show.folder* @@ -1027,7 +1059,8 @@ UI rendering setup to appear in the signcolumn. *nvim-tree.renderer.icons.glyphs.default* - Glyph for files. Will be overridden by `nvim-web-devicons` if available. + Glyph for files. + Overridden by |nvim-tree.renderer.icons.web_devicons| if available. Type: `string`, Default: `""` *nvim-tree.renderer.icons.glyphs.symlink* @@ -1040,6 +1073,7 @@ UI rendering setup *nvim-tree.renderer.icons.glyphs.folder* Glyphs for directories. + Overridden by |nvim-tree.renderer.icons.web_devicons| if available. Type: `table`, Default: `{` `arrow_closed = "",` diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index 3d27d068f0f..ec14dbc9a86 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -426,7 +426,16 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS }, }, icons = { - webdev_colors = true, + web_devicons = { + file = { + enable = true, + color = true, + }, + folder = { + enable = false, + color = true, + }, + }, git_placement = "before", modified_placement = "after", padding = " ", diff --git a/lua/nvim-tree/legacy.lua b/lua/nvim-tree/legacy.lua index 58a6a035073..1832044f178 100644 --- a/lua/nvim-tree/legacy.lua +++ b/lua/nvim-tree/legacy.lua @@ -38,6 +38,17 @@ local function refactored(opts) -- 2023/07/16 utils.move_missing_val(opts, "git", "ignore", opts, "filters", "git_ignored", true) + + -- 2023/08/26 + utils.move_missing_val( + opts, + "renderer.icons", + "webdev_colors", + opts, + "renderer.icons.web_devicons.file", + "color", + true + ) end local function deprecated(opts) diff --git a/lua/nvim-tree/renderer/builder.lua b/lua/nvim-tree/renderer/builder.lua index 4478afd1ca5..5dca0dcc536 100644 --- a/lua/nvim-tree/renderer/builder.lua +++ b/lua/nvim-tree/renderer/builder.lua @@ -130,11 +130,10 @@ end ---@return HighlightedString icon, HighlightedString name function Builder:_build_folder(node) local has_children = #node.nodes ~= 0 or node.has_children - local icon = icons.get_folder_icon(node.open, node.link_to ~= nil, has_children) + local icon, icon_hl = icons.get_folder_icon(node, has_children) local foldername = get_folder_name(node) .. self.trailing_slash - local icon_hl - if #icon > 0 then + if #icon > 0 and icon_hl == nil then if node.open then icon_hl = "NvimTreeOpenedFolderIcon" else diff --git a/lua/nvim-tree/renderer/components/icons.lua b/lua/nvim-tree/renderer/components/icons.lua index 5cf1940815a..ab0d327bc21 100644 --- a/lua/nvim-tree/renderer/components/icons.lua +++ b/lua/nvim-tree/renderer/components/icons.lua @@ -9,13 +9,14 @@ local function empty() return "" end -local function get_folder_icon(open, is_symlink, has_children) +local function get_folder_icon_default(node, has_children) + local is_symlink = node.links_to ~= nil local n - if is_symlink and open then + if is_symlink and node.open then n = M.config.glyphs.folder.symlink_open elseif is_symlink then n = M.config.glyphs.folder.symlink - elseif open then + elseif node.open then if has_children then n = M.config.glyphs.folder.open else @@ -28,7 +29,19 @@ local function get_folder_icon(open, is_symlink, has_children) n = M.config.glyphs.folder.empty end end - return n + return n, nil +end + +local function get_folder_icon_webdev(node, has_children) + local icon, hl_group = M.devicons.get_icon(node.name, node.extension) + if not M.config.web_devicons.folder.color then + hl_group = nil + end + if icon ~= nil then + return icon, hl_group + else + return get_folder_icon_default(node, has_children) + end end local function get_file_icon_default() @@ -43,7 +56,7 @@ end local function get_file_icon_webdev(fname, extension) local icon, hl_group = M.devicons.get_icon(fname, extension) - if not M.config.webdev_colors then + if not M.config.web_devicons.file.color then hl_group = "NvimTreeFileIcon" end if icon and hl_group ~= "DevIconDefault" then @@ -58,7 +71,7 @@ end local function config_file_icon() if M.config.show.file then - if M.devicons then + if M.devicons and M.config.web_devicons.file.enable then M.get_file_icon = get_file_icon_webdev else M.get_file_icon = get_file_icon_default @@ -70,7 +83,11 @@ end local function config_folder_icon() if M.config.show.folder then - M.get_folder_icon = get_folder_icon + if M.devicons and M.config.web_devicons.folder.enable then + M.get_folder_icon = get_folder_icon_webdev + else + M.get_folder_icon = get_folder_icon_default + end else M.get_folder_icon = empty end