From cc5c5e841127b1b0bfd5f0cbf1adb5f5460ae29d Mon Sep 17 00:00:00 2001 From: Antonio Sarosi Date: Mon, 14 Aug 2023 23:41:53 +0200 Subject: [PATCH 1/7] Add `webdev_colors_folder` option --- lua/nvim-tree.lua | 1 + lua/nvim-tree/renderer/builder.lua | 5 ++--- lua/nvim-tree/renderer/components/icons.lua | 16 ++++++++++++---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index e5ffef507ec..3faeb586ecb 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -426,6 +426,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS }, icons = { webdev_colors = true, + webdev_colors_folder = false, git_placement = "before", modified_placement = "after", padding = " ", 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..b3422016d02 100644 --- a/lua/nvim-tree/renderer/components/icons.lua +++ b/lua/nvim-tree/renderer/components/icons.lua @@ -9,13 +9,21 @@ local function empty() return "" end -local function get_folder_icon(open, is_symlink, has_children) +local function get_folder_icon(node, has_children) + if M.config.webdev_colors_folder then + local icon, icon_hl = M.devicons.get_icon(node.name, node.extension) + if icon ~= nil then + return icon, icon_hl + end + end + + 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 +36,7 @@ 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_file_icon_default() From 5d261217889386279aa1b0ec6adade5394c3bd71 Mon Sep 17 00:00:00 2001 From: Antonio Sarosi Date: Tue, 15 Aug 2023 15:48:16 +0200 Subject: [PATCH 2/7] Check if `M.devicons` exists --- lua/nvim-tree/renderer/components/icons.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/nvim-tree/renderer/components/icons.lua b/lua/nvim-tree/renderer/components/icons.lua index b3422016d02..ae984b5908b 100644 --- a/lua/nvim-tree/renderer/components/icons.lua +++ b/lua/nvim-tree/renderer/components/icons.lua @@ -10,7 +10,7 @@ local function empty() end local function get_folder_icon(node, has_children) - if M.config.webdev_colors_folder then + if M.devicons and M.config.webdev_colors_folder then local icon, icon_hl = M.devicons.get_icon(node.name, node.extension) if icon ~= nil then return icon, icon_hl From f5c7207d3a03466f0edb8c11ff90d523016d0b06 Mon Sep 17 00:00:00 2001 From: Antonio Sarosi Date: Tue, 15 Aug 2023 16:03:36 +0200 Subject: [PATCH 3/7] Refactor `get_folder_icon` --- lua/nvim-tree/renderer/components/icons.lua | 24 +++++++++++++-------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/lua/nvim-tree/renderer/components/icons.lua b/lua/nvim-tree/renderer/components/icons.lua index ae984b5908b..d38b9bb04e4 100644 --- a/lua/nvim-tree/renderer/components/icons.lua +++ b/lua/nvim-tree/renderer/components/icons.lua @@ -9,14 +9,7 @@ local function empty() return "" end -local function get_folder_icon(node, has_children) - if M.devicons and M.config.webdev_colors_folder then - local icon, icon_hl = M.devicons.get_icon(node.name, node.extension) - if icon ~= nil then - return icon, icon_hl - end - end - +local function get_folder_icon_default(node, has_children) local is_symlink = node.links_to ~= nil local n if is_symlink and node.open then @@ -39,6 +32,15 @@ local function get_folder_icon(node, has_children) return n, nil end +local function get_folder_icon_webdev(node, has_children) + local icon, icon_hl = M.devicons.get_icon(node.name, node.extension) + if icon ~= nil then + return icon, icon_hl + end + + return get_folder_icon_default(node, has_children) +end + local function get_file_icon_default() local hl_group = "NvimTreeFileIcon" local icon = M.config.glyphs.default @@ -78,7 +80,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.webdev_colors_folder 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 From 4d596b3d62ee6b01c3a0cd9e93b151cebedcad84 Mon Sep 17 00:00:00 2001 From: Antonio Sarosi Date: Mon, 21 Aug 2023 23:16:17 +0200 Subject: [PATCH 4/7] Add configuration options for both files and folders --- doc/nvim-tree-lua.txt | 46 ++++++++++++++++++--- lua/nvim-tree.lua | 12 +++++- lua/nvim-tree/renderer/components/icons.lua | 17 ++++---- 3 files changed, 60 insertions(+), 15 deletions(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 4e30ae840ed..c41fff77226 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -361,7 +361,16 @@ applying configuration. }, }, icons = { - webdev_colors = true, + web_devicons = { + file = { + enabled = true, + color = true, + }, + folder = { + enabled = false, + color = true, + }, + }, git_placement = "before", modified_placement = "after", padding = " ", @@ -964,9 +973,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.enabled* + 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.enabled* + 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. @@ -993,7 +1025,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* @@ -1021,7 +1053,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* @@ -1034,6 +1067,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 3faeb586ecb..0954a1c0ded 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -425,8 +425,16 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS }, }, icons = { - webdev_colors = true, - webdev_colors_folder = false, + web_devicons = { + file = { + enabled = true, + color = true, + }, + folder = { + enabled = false, + color = true, + }, + }, git_placement = "before", modified_placement = "after", padding = " ", diff --git a/lua/nvim-tree/renderer/components/icons.lua b/lua/nvim-tree/renderer/components/icons.lua index d38b9bb04e4..39247e339c9 100644 --- a/lua/nvim-tree/renderer/components/icons.lua +++ b/lua/nvim-tree/renderer/components/icons.lua @@ -33,12 +33,15 @@ local function get_folder_icon_default(node, has_children) end local function get_folder_icon_webdev(node, has_children) - local icon, icon_hl = M.devicons.get_icon(node.name, node.extension) + 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, icon_hl + return icon, hl_group + else + return get_folder_icon_default(node, has_children) end - - return get_folder_icon_default(node, has_children) end local function get_file_icon_default() @@ -53,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 @@ -68,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.enabled then M.get_file_icon = get_file_icon_webdev else M.get_file_icon = get_file_icon_default @@ -80,7 +83,7 @@ end local function config_folder_icon() if M.config.show.folder then - if M.devicons and M.config.webdev_colors_folder then + if M.devicons and M.config.web_devicons.folder.enabled then M.get_folder_icon = get_folder_icon_webdev else M.get_folder_icon = get_folder_icon_default From 6a04a25b79bad43f0cdf6dc750cea1d216c33689 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sat, 26 Aug 2023 14:32:39 +1000 Subject: [PATCH 5/7] web_devicons.*.enabled -> enable --- doc/nvim-tree-lua.txt | 8 ++++---- lua/nvim-tree.lua | 4 ++-- lua/nvim-tree/renderer/components/icons.lua | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 3e0f4a4459c..5bc23a4d693 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -364,11 +364,11 @@ applying configuration. icons = { web_devicons = { file = { - enabled = true, + enable = true, color = true, }, folder = { - enabled = false, + enable = false, color = true, }, }, @@ -985,7 +985,7 @@ UI rendering setup *nvim-tree.renderer.icons.web_devicons.file* File icons. - *nvim-tree.renderer.icons.web_devicons.file.enabled* + *nvim-tree.renderer.icons.web_devicons.file.enable* Show icons on files. Overrides |nvim-tree.renderer.icons.glyphs.default| Type: `boolean`, Default: `true` @@ -997,7 +997,7 @@ UI rendering setup *nvim-tree.renderer.icons.web_devicons.folder* Folder icons. - *nvim-tree.renderer.icons.web_devicons.folder.enabled* + *nvim-tree.renderer.icons.web_devicons.folder.enable* Show icons on folders. Overrides |nvim-tree.renderer.icons.glyphs.folder| Type: `boolean`, Default: `false` diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index 7c08f0d2982..ec14dbc9a86 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -428,11 +428,11 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS icons = { web_devicons = { file = { - enabled = true, + enable = true, color = true, }, folder = { - enabled = false, + enable = false, color = true, }, }, diff --git a/lua/nvim-tree/renderer/components/icons.lua b/lua/nvim-tree/renderer/components/icons.lua index 39247e339c9..ab0d327bc21 100644 --- a/lua/nvim-tree/renderer/components/icons.lua +++ b/lua/nvim-tree/renderer/components/icons.lua @@ -71,7 +71,7 @@ end local function config_file_icon() if M.config.show.file then - if M.devicons and M.config.web_devicons.file.enabled 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 @@ -83,7 +83,7 @@ end local function config_folder_icon() if M.config.show.folder then - if M.devicons and M.config.web_devicons.folder.enabled then + 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 From 67e0e3cb3b4206865808228baeeec5a663cc5019 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sat, 26 Aug 2023 14:39:09 +1000 Subject: [PATCH 6/7] silent migration: renderer.icons.webdev_colors -> renderer.icons.web_devicons.file.color --- lua/nvim-tree/legacy.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lua/nvim-tree/legacy.lua b/lua/nvim-tree/legacy.lua index 58a6a035073..4fdd9c1ef31 100644 --- a/lua/nvim-tree/legacy.lua +++ b/lua/nvim-tree/legacy.lua @@ -38,6 +38,9 @@ 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) From 37182ed7f9f920c2e5abb006629f86f69aaf0301 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sat, 26 Aug 2023 14:40:42 +1000 Subject: [PATCH 7/7] silent migration: renderer.icons.webdev_colors -> renderer.icons.web_devicons.file.color --- lua/nvim-tree/legacy.lua | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lua/nvim-tree/legacy.lua b/lua/nvim-tree/legacy.lua index 4fdd9c1ef31..1832044f178 100644 --- a/lua/nvim-tree/legacy.lua +++ b/lua/nvim-tree/legacy.lua @@ -40,7 +40,15 @@ local function refactored(opts) 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) + utils.move_missing_val( + opts, + "renderer.icons", + "webdev_colors", + opts, + "renderer.icons.web_devicons.file", + "color", + true + ) end local function deprecated(opts)