From 8b4dbc57e4987f3794f1c9d4bfc5c40af2c7b833 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sat, 21 Oct 2023 13:54:25 +1100 Subject: [PATCH 1/2] docs: update CONTRIBUTING.md (#2485) --- CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 51bb45776d2..ceeec034747 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,8 @@ Thank you for contributing. +See [Development](https://github.com/nvim-tree/nvim-tree.lua/wiki/Development) for environment setup, tips and tools. + ## Styling and formatting Code is formatted using luacheck, and linted using stylua. @@ -24,7 +26,7 @@ Once you did, you should run the `scripts/update-help.sh`. When adding new options, you should declare the defaults in the main `nvim-tree.lua` file. Once you did, you should run the `scripts/update-help.sh`. -Documentation for options should also be added, see how this is done after `nvim-tree.disable_netrw` in the `nvim-tree-lua.txt` file. +Documentation for options should also be added to `nvim-tree-opts` in `doc/nvim-tree-lua.txt` ## Pull Request From 85cdbecfecd9fea7035acf1e995611e00da11e73 Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sat, 21 Oct 2023 16:20:02 +1100 Subject: [PATCH 2/2] feat(#2415): granular highlight_git, normalise git groups --- doc/nvim-tree-lua.txt | 90 +++++++----- lua/nvim-tree.lua | 2 +- lua/nvim-tree/colors.lua | 76 ++++++---- lua/nvim-tree/legacy.lua | 11 +- lua/nvim-tree/renderer/builder.lua | 7 +- .../renderer/components/bookmarks.lua | 2 +- .../renderer/components/diagnostics.lua | 2 +- lua/nvim-tree/renderer/components/git.lua | 139 +++++++++--------- 8 files changed, 189 insertions(+), 140 deletions(-) diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 69913a1c4ae..de479c58d95 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -385,7 +385,7 @@ Following is the default configuration. See |nvim-tree-opts| for details. indent_width = 2, special_files = { "Cargo.toml", "Makefile", "README.md", "readme.md" }, symlink_destination = true, - highlight_git = false, + highlight_git = "none", highlight_diagnostics = "none", highlight_opened_files = "none", highlight_modified = "none", @@ -822,12 +822,13 @@ Whether to show the destination of the symlink. Type: `boolean`, Default: `true` *nvim-tree.renderer.highlight_git* -Enable highlight for git attributes using `NvimTreeGit*` highlight groups. +Enable highlight for git attributes using `NvimTreeGit*HL` highlight groups. Requires |nvim-tree.git.enable| - Type: `boolean`, Default: `false` +Value can be `"none"`, `"icon"`, `"name"` or `"all"`. + Type: `string`, Default: `"none"` *nvim-tree.renderer.highlight_diagnostics* -Enable highlight for diagnostics using `NvimTreeDiagnostic*HL` highlight groups. +Enable highlight for diagnostics using `NvimTreeDiagnostic*HL` highlight groups. Requires |nvim-tree.diagnostics.enable| Value can be `"none"`, `"icon"`, `"name"` or `"all"`. Type: `string`, Default: `"none"` @@ -2195,7 +2196,7 @@ Folder Text: > NvimTreeSymlinkFolderName Directory < Icon: > - NvimTreeFolderIcon "guifg=#8094b4 ctermfg=Blue" + NvimTreeFolderIcon guifg=#8094b4 ctermfg=Blue NvimTreeFileIcon NvimTreeNormal NvimTreeSymlinkIcon NvimTreeNormal NvimTreeOpenedFileIcon NvimTreeOpenedFile @@ -2218,38 +2219,38 @@ Bookmark Highlight: > NvimTreeBookmarkHL SpellLocal < Picker: > - NvimTreeWindowPicker "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan" + NvimTreeWindowPicker guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan < Live Filter: > NvimTreeLiveFilterPrefix PreProc NvimTreeLiveFilterValue ModeMsg < Git Icon: > - NvimTreeGitDeleted Statement - NvimTreeGitDirty Statement - NvimTreeGitIgnored Comment - NvimTreeGitMerge Constant - NvimTreeGitNew PreProc - NvimTreeGitRenamed PreProc - NvimTreeGitStaged Constant + NvimTreeGitDeletedIcon Statement + NvimTreeGitDirtyIcon Statement + NvimTreeGitIgnoredIcon Comment + NvimTreeGitMergeIcon Constant + NvimTreeGitNewIcon PreProc + NvimTreeGitRenamedIcon PreProc + NvimTreeGitStagedIcon Constant < Git File Text: > - NvimTreeFileDirty NvimTreeGitDirty - NvimTreeFileStaged NvimTreeGitStaged - NvimTreeFileMerge NvimTreeGitMerge - NvimTreeFileRenamed NvimTreeGitRenamed - NvimTreeFileNew NvimTreeGitNew - NvimTreeFileDeleted NvimTreeGitDeleted - NvimTreeFileIgnored NvimTreeGitIgnored + NvimTreeGitFileDeletedHL NvimTreeGitDeletedIcon + NvimTreeGitFileDirtyHL NvimTreeGitDirtyIcon + NvimTreeGitFileIgnoredHL NvimTreeGitIgnoredIcon + NvimTreeGitFileMergeHL NvimTreeGitMergeIcon + NvimTreeGitFileNewHL NvimTreeGitNewIcon + NvimTreeGitFileRenamedHL NvimTreeGitRenamedIcon + NvimTreeGitFileStagedHL NvimTreeGitStagedIcon < Git Folder Text: > - NvimTreeFolderDirty NvimTreeFileDirty - NvimTreeFolderStaged NvimTreeFileStaged - NvimTreeFolderMerge NvimTreeFileMerge - NvimTreeFolderRenamed NvimTreeFileRenamed - NvimTreeFolderNew NvimTreeFileNew - NvimTreeFolderDeleted NvimTreeFileDeleted - NvimTreeFolderIgnored NvimTreeFileIgnored + NvimTreeGitFolderDeletedHL NvimTreeGitFileDeletedHL + NvimTreeGitFolderDirtyHL NvimTreeGitFileDirtyHL + NvimTreeGitFolderIgnoredHL NvimTreeGitFileIgnoredHL + NvimTreeGitFolderMergeHL NvimTreeGitFileMergeHL + NvimTreeGitFolderNewHL NvimTreeGitFileNewHL + NvimTreeGitFolderRenamedHL NvimTreeGitFileRenamedHL + NvimTreeGitFolderStagedHL NvimTreeGitFileStagedHL < Diagnostics Icon: > NvimTreeDiagnosticErrorIcon DiagnosticError @@ -2264,12 +2265,11 @@ Diagnostics File Highlight: > NvimTreeDiagnosticHintFileHL DiagnosticUnderlineHint < Diagnostics Folder Highlight: > - NvimTreeDiagnosticErrorFolderHL DiagnosticUnderlineError - NvimTreeDiagnosticWarnFolderHL DiagnosticUnderlineWarn - NvimTreeDiagnosticInfoFolderHL DiagnosticUnderlineInfo - NvimTreeDiagnosticHintFolderHL DiagnosticUnderlineHint + NvimTreeDiagnosticErrorFolderHL NvimTreeDiagnosticErrorFileHL + NvimTreeDiagnosticWarnFolderHL NvimTreeDiagnosticWarnFileHL + NvimTreeDiagnosticInfoFolderHL NvimTreeDiagnosticInfoFileHL + NvimTreeDiagnosticHintFolderHL NvimTreeDiagnosticHintFileHL < - ============================================================================== 8.1 HIGHLIGHT OVERHAUL *nvim-tree-highlight-overhaul* @@ -2285,7 +2285,7 @@ Diagnostics Folder Highlight: > - `highlight_xxx` is additive instead of overwriting. See |nvim-tree-opts-renderer| for precedence. -Legacy style may be applied: > +Legacy diagnostic HL style may be applied: > :hi link NvimTreeDiagnosticErrorFileHL DiagnosticError :hi link NvimTreeDiagnosticWarnFileHL DiagnosticWarn @@ -2300,6 +2300,30 @@ Legacy style may be applied: > Legacy highlight group are still obeyed when they are defined and the current highlight group is not, hard linking as follows: > + NvimTreeGitDeletedIcon NvimTreeGitDeleted + NvimTreeGitDirtyIcon NvimTreeGitDirty + NvimTreeGitIgnoredIcon NvimTreeGitIgnored + NvimTreeGitMergeIcon NvimTreeGitMerge + NvimTreeGitNewIcon NvimTreeGitNew + NvimTreeGitRenamedIcon NvimTreeGitRenamed + NvimTreeGitStagedIcon NvimTreeGitStaged + + NvimTreeGitFileDeletedHL NvimTreeFileDeleted + NvimTreeGitFileDirtyHL NvimTreeFileDirty + NvimTreeGitFileIgnoredHL NvimTreeFileIgnored + NvimTreeGitFileMergeHL NvimTreeFileMerge + NvimTreeGitFileNewHL NvimTreeFileNew + NvimTreeGitFileRenamedHL NvimTreeFileRenamed + NvimTreeGitFileStagedHL NvimTreeFileStaged + + NvimTreeGitFolderDeletedHL NvimTreeFolderDeleted + NvimTreeGitFolderDirtyHL NvimTreeFolderDirty + NvimTreeGitFolderIgnoredHL NvimTreeFolderIgnored + NvimTreeGitFolderMergeHL NvimTreeFolderMerge + NvimTreeGitFolderNewHL NvimTreeFolderNew + NvimTreeGitFolderRenamedHL NvimTreeFolderRenamed + NvimTreeGitFolderStagedHL NvimTreeFolderStaged + NvimTreeLspDiagnosticsError NvimTreeDiagnosticErrorIcon NvimTreeLspDiagnosticsWarning NvimTreeDiagnosticWarnIcon NvimTreeLspDiagnosticsInformation NvimTreeDiagnosticInfoIcon diff --git a/lua/nvim-tree.lua b/lua/nvim-tree.lua index 918926b2e96..d84025f130e 100644 --- a/lua/nvim-tree.lua +++ b/lua/nvim-tree.lua @@ -407,7 +407,7 @@ local DEFAULT_OPTS = { -- BEGIN_DEFAULT_OPTS indent_width = 2, special_files = { "Cargo.toml", "Makefile", "README.md", "readme.md" }, symlink_destination = true, - highlight_git = false, + highlight_git = "none", highlight_diagnostics = "none", highlight_opened_files = "none", highlight_modified = "none", diff --git a/lua/nvim-tree/colors.lua b/lua/nvim-tree/colors.lua index 7a6d6983eed..3c91153c539 100644 --- a/lua/nvim-tree/colors.lua +++ b/lua/nvim-tree/colors.lua @@ -70,31 +70,31 @@ local DEFAULT_LINKS = { NvimTreeLiveFilterValue = "ModeMsg", -- Git Icon - NvimTreeGitDeleted = "Statement", - NvimTreeGitDirty = "Statement", - NvimTreeGitIgnored = "Comment", - NvimTreeGitMerge = "Constant", - NvimTreeGitNew = "PreProc", - NvimTreeGitRenamed = "PreProc", - NvimTreeGitStaged = "Constant", + NvimTreeGitDeletedIcon = "Statement", + NvimTreeGitDirtyIcon = "Statement", + NvimTreeGitIgnoredIcon = "Comment", + NvimTreeGitMergeIcon = "Constant", + NvimTreeGitNewIcon = "PreProc", + NvimTreeGitRenamedIcon = "PreProc", + NvimTreeGitStagedIcon = "Constant", -- Git File Text - NvimTreeFileDirty = "NvimTreeGitDirty", - NvimTreeFileStaged = "NvimTreeGitStaged", - NvimTreeFileMerge = "NvimTreeGitMerge", - NvimTreeFileRenamed = "NvimTreeGitRenamed", - NvimTreeFileNew = "NvimTreeGitNew", - NvimTreeFileDeleted = "NvimTreeGitDeleted", - NvimTreeFileIgnored = "NvimTreeGitIgnored", + NvimTreeGitFileDeletedHL = "NvimTreeGitDeletedIcon", + NvimTreeGitFileDirtyHL = "NvimTreeGitDirtyIcon", + NvimTreeGitFileIgnoredHL = "NvimTreeGitIgnoredIcon", + NvimTreeGitFileMergeHL = "NvimTreeGitMergeIcon", + NvimTreeGitFileNewHL = "NvimTreeGitNewIcon", + NvimTreeGitFileRenamedHL = "NvimTreeGitRenamedIcon", + NvimTreeGitFileStagedHL = "NvimTreeGitStagedIcon", -- Git Folder Text - NvimTreeFolderDirty = "NvimTreeFileDirty", - NvimTreeFolderStaged = "NvimTreeFileStaged", - NvimTreeFolderMerge = "NvimTreeFileMerge", - NvimTreeFolderRenamed = "NvimTreeFileRenamed", - NvimTreeFolderNew = "NvimTreeFileNew", - NvimTreeFolderDeleted = "NvimTreeFileDeleted", - NvimTreeFolderIgnored = "NvimTreeFileIgnored", + NvimTreeGitFolderDeletedHL = "NvimTreeGitFileDeletedHL", + NvimTreeGitFolderDirtyHL = "NvimTreeGitFileDirtyHL", + NvimTreeGitFolderIgnoredHL = "NvimTreeGitFileIgnoredHL", + NvimTreeGitFolderMergeHL = "NvimTreeGitFileMergeHL", + NvimTreeGitFolderNewHL = "NvimTreeGitFileNewHL", + NvimTreeGitFolderRenamedHL = "NvimTreeGitFileRenamedHL", + NvimTreeGitFolderStagedHL = "NvimTreeGitFileStagedHL", -- Diagnostics Icon NvimTreeDiagnosticErrorIcon = "DiagnosticError", @@ -109,22 +109,48 @@ local DEFAULT_LINKS = { NvimTreeDiagnosticHintFileHL = "DiagnosticUnderlineHint", -- Diagnostics Folder Highlight - NvimTreeDiagnosticErrorFolderHL = "DiagnosticUnderlineError", - NvimTreeDiagnosticWarnFolderHL = "DiagnosticUnderlineWarn", - NvimTreeDiagnosticInfoFolderHL = "DiagnosticUnderlineInfo", - NvimTreeDiagnosticHintFolderHL = "DiagnosticUnderlineHint", + NvimTreeDiagnosticErrorFolderHL = "NvimTreeDiagnosticErrorFileHL", + NvimTreeDiagnosticWarnFolderHL = "NvimTreeDiagnosticWarnFileHL", + NvimTreeDiagnosticInfoFolderHL = "NvimTreeDiagnosticInfoFileHL", + NvimTreeDiagnosticHintFolderHL = "NvimTreeDiagnosticHintFileHL", } -- nvim-tree highlight groups to legacy local LEGACY_LINKS = { + NvimTreeGitDeletedIcon = "NvimTreeGitDeleted", + NvimTreeGitDirtyIcon = "NvimTreeGitDirty", + NvimTreeGitIgnoredIcon = "NvimTreeGitIgnored", + NvimTreeGitMergeIcon = "NvimTreeGitMerge", + NvimTreeGitNewIcon = "NvimTreeGitNew", + NvimTreeGitRenamedIcon = "NvimTreeGitRenamed", + NvimTreeGitStagedIcon = "NvimTreeGitStaged", + + NvimTreeGitFileDeletedHL = "NvimTreeFileDeleted", + NvimTreeGitFileDirtyHL = "NvimTreeFileDirty", + NvimTreeGitFileIgnoredHL = "NvimTreeFileIgnored", + NvimTreeGitFileMergeHL = "NvimTreeFileMerge", + NvimTreeGitFileNewHL = "NvimTreeFileNew", + NvimTreeGitFileRenamedHL = "NvimTreeFileRenamed", + NvimTreeGitFileStagedHL = "NvimTreeFileStaged", + + NvimTreeGitFolderDeletedHL = "NvimTreeFolderDeleted", + NvimTreeGitFolderDirtyHL = "NvimTreeFolderDirty", + NvimTreeGitFolderIgnoredHL = "NvimTreeFolderIgnored", + NvimTreeGitFolderMergeHL = "NvimTreeFolderMerge", + NvimTreeGitFolderNewHL = "NvimTreeFolderNew", + NvimTreeGitFolderRenamedHL = "NvimTreeFolderRenamed", + NvimTreeGitFolderStagedHL = "NvimTreeFolderStaged", + NvimTreeDiagnosticErrorIcon = "NvimTreeLspDiagnosticsError", NvimTreeDiagnosticWarnIcon = "NvimTreeLspDiagnosticsWarning", NvimTreeDiagnosticInfoIcon = "NvimTreeLspDiagnosticsInformation", NvimTreeDiagnosticHintIcon = "NvimTreeLspDiagnosticsHint", + NvimTreeDiagnosticErrorFileHL = "NvimTreeLspDiagnosticsErrorText", NvimTreeDiagnosticWarnFileHL = "NvimTreeLspDiagnosticsWarningText", NvimTreeDiagnosticInfoFileHL = "NvimTreeLspDiagnosticsInformationText", NvimTreeDiagnosticHintFileHL = "NvimTreeLspDiagnosticsHintText", + NvimTreeDiagnosticErrorFolderHL = "NvimTreeLspDiagnosticsErrorFolderText", NvimTreeDiagnosticWarnFolderHL = "NvimTreeLspDiagnosticsWarningFolderText", NvimTreeDiagnosticInfoFolderHL = "NvimTreeLspDiagnosticsInformationFolderText", diff --git a/lua/nvim-tree/legacy.lua b/lua/nvim-tree/legacy.lua index 2d6dd9f9582..9d95da69326 100644 --- a/lua/nvim-tree/legacy.lua +++ b/lua/nvim-tree/legacy.lua @@ -44,11 +44,12 @@ local function refactored(opts) -- 2023/10/08 if type(opts.renderer) == "table" and type(opts.renderer.highlight_diagnostics) == "boolean" then - if opts.renderer.highlight_diagnostics then - opts.renderer.highlight_diagnostics = "name" - else - opts.renderer.highlight_diagnostics = "none" - end + opts.renderer.highlight_diagnostics = opts.renderer.highlight_diagnostics and "name" or "none" + end + + -- 2023/10/21 + if type(opts.renderer) == "table" and type(opts.renderer.highlight_git) == "boolean" then + opts.renderer.highlight_git = opts.renderer.highlight_git and "name" or "none" end end diff --git a/lua/nvim-tree/renderer/builder.lua b/lua/nvim-tree/renderer/builder.lua index 0fb9bd8229d..a83b3bce3b8 100644 --- a/lua/nvim-tree/renderer/builder.lua +++ b/lua/nvim-tree/renderer/builder.lua @@ -285,12 +285,6 @@ end function Builder:_get_highlight_override(node, unloaded_bufnr) local name_hl, icon_hl - -- git - local git_highlight = git.get_highlight(node) - if git_highlight then - name_hl = git_highlight - end - -- opened file if self.highlight_opened_files and vim.fn.bufloaded(node.absolute_path) > 0 and vim.fn.bufnr(node.absolute_path) ~= unloaded_bufnr then if self.highlight_opened_files == "all" or self.highlight_opened_files == "name" then @@ -427,6 +421,7 @@ function Builder:_build_line(node, idx, num_children, unloaded_bufnr) end -- extra highighting + self:_append_highlight(node, git.get_highlight, icon.hl, name.hl) self:_append_highlight(node, bookmarks.get_highlight, icon.hl, name.hl) self:_append_highlight(node, diagnostics.get_highlight, icon.hl, name.hl) self:_append_highlight(node, copy_paste.get_highlight, icon.hl, name.hl) diff --git a/lua/nvim-tree/renderer/components/bookmarks.lua b/lua/nvim-tree/renderer/components/bookmarks.lua index d9dfb7297d5..4d13881e8a3 100644 --- a/lua/nvim-tree/renderer/components/bookmarks.lua +++ b/lua/nvim-tree/renderer/components/bookmarks.lua @@ -7,7 +7,7 @@ local M = { hl_pos = HL_POSITION.none, } ----Bookmark highlight group and position when highlight_bookmark. +---Bookmark highlight group and position when highlight_bookmark ---@param node table ---@return HL_POSITION position none when clipboard empty ---@return string|nil group only when node present in clipboard diff --git a/lua/nvim-tree/renderer/components/diagnostics.lua b/lua/nvim-tree/renderer/components/diagnostics.lua index 958172ce68a..1a98f758409 100644 --- a/lua/nvim-tree/renderer/components/diagnostics.lua +++ b/lua/nvim-tree/renderer/components/diagnostics.lua @@ -12,7 +12,7 @@ local M = { HL_POS = HL_POSITION.none, } ----Diagnostics text highlight group when highlight_diagnostics. +---Diagnostics highlight group and position when highlight_diagnostics. ---@param node table ---@return HL_POSITION position none when no status ---@return string|nil group only when status diff --git a/lua/nvim-tree/renderer/components/git.lua b/lua/nvim-tree/renderer/components/git.lua index 04a59d76a66..65bf0e41041 100644 --- a/lua/nvim-tree/renderer/components/git.lua +++ b/lua/nvim-tree/renderer/components/git.lua @@ -1,17 +1,22 @@ local notify = require "nvim-tree.notify" local explorer_node = require "nvim-tree.explorer.node" -local M = {} +local HL_POSITION = require("nvim-tree.enum").HL_POSITION + +local M = { + -- position for HL + HL_POS = HL_POSITION.none, +} local function build_icons_table(i) local icons = { - staged = { str = i.staged, hl = { "NvimTreeGitStaged" }, ord = 1 }, - unstaged = { str = i.unstaged, hl = { "NvimTreeGitDirty" }, ord = 2 }, - renamed = { str = i.renamed, hl = { "NvimTreeGitRenamed" }, ord = 3 }, - deleted = { str = i.deleted, hl = { "NvimTreeGitDeleted" }, ord = 4 }, - unmerged = { str = i.unmerged, hl = { "NvimTreeGitMerge" }, ord = 5 }, - untracked = { str = i.untracked, hl = { "NvimTreeGitNew" }, ord = 6 }, - ignored = { str = i.ignored, hl = { "NvimTreeGitIgnored" }, ord = 7 }, + staged = { str = i.staged, hl = { "NvimTreeGitStagedIcon" }, ord = 1 }, + unstaged = { str = i.unstaged, hl = { "NvimTreeGitDirtyIcon" }, ord = 2 }, + renamed = { str = i.renamed, hl = { "NvimTreeGitRenamedIcon" }, ord = 3 }, + deleted = { str = i.deleted, hl = { "NvimTreeGitDeletedIcon" }, ord = 4 }, + unmerged = { str = i.unmerged, hl = { "NvimTreeGitMergeIcon" }, ord = 5 }, + untracked = { str = i.untracked, hl = { "NvimTreeGitNewIcon" }, ord = 6 }, + ignored = { str = i.ignored, hl = { "NvimTreeGitIgnoredIcon" }, ord = 7 }, } return { ["M "] = { icons.staged }, @@ -51,35 +56,35 @@ end local function build_hl_table() local file = { - ["M "] = "NvimTreeFileStaged", - ["C "] = "NvimTreeFileStaged", - ["AA"] = "NvimTreeFileStaged", - ["AD"] = "NvimTreeFileStaged", - ["MD"] = "NvimTreeFileStaged", - ["T "] = "NvimTreeFileStaged", - ["TT"] = "NvimTreeFileStaged", - [" M"] = "NvimTreeFileDirty", - ["CM"] = "NvimTreeFileDirty", - [" C"] = "NvimTreeFileDirty", - [" T"] = "NvimTreeFileDirty", - ["MM"] = "NvimTreeFileDirty", - ["AM"] = "NvimTreeFileDirty", - dirty = "NvimTreeFileDirty", - ["A "] = "NvimTreeFileNew", - ["??"] = "NvimTreeFileNew", - ["AU"] = "NvimTreeFileMerge", - ["UU"] = "NvimTreeFileMerge", - ["UD"] = "NvimTreeFileMerge", - ["DU"] = "NvimTreeFileMerge", - ["UA"] = "NvimTreeFileMerge", - [" D"] = "NvimTreeFileDeleted", - ["DD"] = "NvimTreeFileDeleted", - ["RD"] = "NvimTreeFileDeleted", - ["D "] = "NvimTreeFileDeleted", - ["R "] = "NvimTreeFileRenamed", - ["RM"] = "NvimTreeFileRenamed", - [" R"] = "NvimTreeFileRenamed", - ["!!"] = "NvimTreeFileIgnored", + ["M "] = "NvimTreeGitFileStagedHL", + ["C "] = "NvimTreeGitFileStagedHL", + ["AA"] = "NvimTreeGitFileStagedHL", + ["AD"] = "NvimTreeGitFileStagedHL", + ["MD"] = "NvimTreeGitFileStagedHL", + ["T "] = "NvimTreeGitFileStagedHL", + ["TT"] = "NvimTreeGitFileStagedHL", + [" M"] = "NvimTreeGitFileDirtyHL", + ["CM"] = "NvimTreeGitFileDirtyHL", + [" C"] = "NvimTreeGitFileDirtyHL", + [" T"] = "NvimTreeGitFileDirtyHL", + ["MM"] = "NvimTreeGitFileDirtyHL", + ["AM"] = "NvimTreeGitFileDirtyHL", + dirty = "NvimTreeGitFileDirtyHL", + ["A "] = "NvimTreeGitFileNewHL", + ["??"] = "NvimTreeGitFileNewHL", + ["AU"] = "NvimTreeGitFileMergeHL", + ["UU"] = "NvimTreeGitFileMergeHL", + ["UD"] = "NvimTreeGitFileMergeHL", + ["DU"] = "NvimTreeGitFileMergeHL", + ["UA"] = "NvimTreeGitFileMergeHL", + [" D"] = "NvimTreeGitFileDeletedHL", + ["DD"] = "NvimTreeGitFileDeletedHL", + ["RD"] = "NvimTreeGitFileDeletedHL", + ["D "] = "NvimTreeGitFileDeletedHL", + ["R "] = "NvimTreeGitFileRenamedHL", + ["RM"] = "NvimTreeGitFileRenamedHL", + [" R"] = "NvimTreeGitFileRenamedHL", + ["!!"] = "NvimTreeGitFileIgnoredHL", [" A"] = "none", } @@ -91,7 +96,15 @@ local function build_hl_table() return file, folder end -local function nil_() end +local function setup_signs(i) + vim.fn.sign_define("NvimTreeGitDirtyIcon", { text = i.unstaged, texthl = "NvimTreeGitDirtyIcon" }) + vim.fn.sign_define("NvimTreeGitStagedIcon", { text = i.staged, texthl = "NvimTreeGitStagedIcon" }) + vim.fn.sign_define("NvimTreeGitMergeIcon", { text = i.unmerged, texthl = "NvimTreeGitMergeIcon" }) + vim.fn.sign_define("NvimTreeGitRenamedIcon", { text = i.renamed, texthl = "NvimTreeGitRenamedIcon" }) + vim.fn.sign_define("NvimTreeGitNewIcon", { text = i.untracked, texthl = "NvimTreeGitNewIcon" }) + vim.fn.sign_define("NvimTreeGitDeletedIcon", { text = i.deleted, texthl = "NvimTreeGitDeletedIcon" }) + vim.fn.sign_define("NvimTreeGitIgnoredIcon", { text = i.ignored, texthl = "NvimTreeGitIgnoredIcon" }) +end local function warn_status(git_status) notify.warn(string.format("Unrecognized git state '%s'", git_status)) @@ -99,7 +112,11 @@ end ---@param node table ---@return HighlightedString[]|nil -local function get_icons_(node) +function M.get_icons(node) + if not M.config.icons.show.git then + return nil + end + local git_status = explorer_node.get_git_status(node) if git_status == nil then return nil @@ -139,26 +156,24 @@ local function get_icons_(node) return iconss end -function M.setup_signs(i) - vim.fn.sign_define("NvimTreeGitDirty", { text = i.unstaged, texthl = "NvimTreeGitDirty" }) - vim.fn.sign_define("NvimTreeGitStaged", { text = i.staged, texthl = "NvimTreeGitStaged" }) - vim.fn.sign_define("NvimTreeGitMerge", { text = i.unmerged, texthl = "NvimTreeGitMerge" }) - vim.fn.sign_define("NvimTreeGitRenamed", { text = i.renamed, texthl = "NvimTreeGitRenamed" }) - vim.fn.sign_define("NvimTreeGitNew", { text = i.untracked, texthl = "NvimTreeGitNew" }) - vim.fn.sign_define("NvimTreeGitDeleted", { text = i.deleted, texthl = "NvimTreeGitDeleted" }) - vim.fn.sign_define("NvimTreeGitIgnored", { text = i.ignored, texthl = "NvimTreeGitIgnored" }) -end +---Git highlight group and position when highlight_git +---@param node table +---@return HL_POSITION position none when no status +---@return string|nil group only when status +function M.get_highlight(node) + if not node or M.HL_POS == HL_POSITION.none then + return HL_POSITION.none, nil + end -local function get_highlight_(node) local git_status = explorer_node.get_git_status(node) - if git_status == nil then - return + if not git_status then + return HL_POSITION.none, nil end if node.nodes then - return M.folder_hl[git_status[1]] + return M.HL_POS, M.folder_hl[git_status[1]] else - return M.file_hl[git_status[1]] + return M.HL_POS, M.file_hl[git_status[1]] end end @@ -169,23 +184,11 @@ function M.setup(opts) M.file_hl, M.folder_hl = build_hl_table() - if opts.renderer.icons.git_placement == "signcolumn" then - M.setup_signs(opts.renderer.icons.glyphs.git) - end + setup_signs(opts.renderer.icons.glyphs.git) - if opts.renderer.icons.show.git then - M.get_icons = get_icons_ - else - M.get_icons = nil_ + if opts.git.enable and opts.renderer.highlight_git then + M.HL_POS = HL_POSITION[opts.renderer.highlight_git] end - - if opts.renderer.highlight_git then - M.get_highlight = get_highlight_ - else - M.get_highlight = nil_ - end - - M.git_show_on_open_dirs = opts.git.show_on_open_dirs end return M