Skip to content

Commit e78b20b

Browse files
authored
chore: normalise colours and enable cterm (#2471)
1 parent 6e89ca3 commit e78b20b

File tree

3 files changed

+116
-137
lines changed

3 files changed

+116
-137
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Setup the plugin in your `init.lua`
5353
vim.g.loaded_netrw = 1
5454
vim.g.loaded_netrwPlugin = 1
5555

56-
-- set termguicolors to enable highlight groups
56+
-- optionally enable 24-bit colour
5757
vim.opt.termguicolors = true
5858

5959
-- empty setup using defaults

doc/nvim-tree-lua.txt

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ Setup the plugin in your `init.lua` >
112112
vim.g.loaded_netrw = 1
113113
vim.g.loaded_netrwPlugin = 1
114114
115-
-- set termguicolors to enable highlight groups
115+
-- optionally enable 24-bit colour
116116
vim.opt.termguicolors = true
117117
118118
-- empty setup using defaults
@@ -899,7 +899,7 @@ Icon sign column precedence:
899899
Type: `boolean`, Default: `true`
900900

901901
*nvim-tree.renderer.icons.web_devicons.file.color*
902-
Use icon colors for files.
902+
Use icon colors for files. Overrides highlight groups.
903903
Type: `boolean`, Default: `true`
904904

905905
*nvim-tree.renderer.icons.web_devicons.folder*
@@ -911,7 +911,7 @@ Icon sign column precedence:
911911
Type: `boolean`, Default: `false`
912912

913913
*nvim-tree.renderer.icons.web_devicons.folder.color*
914-
Use icon colors for folders.
914+
Use icon colors for folders. Overrides highlight groups.
915915
Type: `boolean`, Default: `true`
916916

917917
*nvim-tree.renderer.icons.git_placement*
@@ -2156,42 +2156,13 @@ groups.
21562156
Example |:highlight| >
21572157
:hi NvimTreeSymlink guifg=blue gui=bold,underline
21582158
<
2159-
You should have 'termguicolors' enabled, otherwise, colors will not be
2160-
applied.
2159+
It is recommended to enable 'termguicolors' for the more pleasant 24-bit colours.
21612160

21622161
To view the active highlight groups run `:so $VIMRUNTIME/syntax/hitest.vim`
21632162
as per |:highlight|
21642163

2165-
Default linked group follows name.
2164+
Default linked group or definition follows name.
21662165

2167-
File Text: >
2168-
NvimTreeSymlink
2169-
NvimTreeExecFile
2170-
NvimTreeOpenedFile
2171-
NvimTreeModifiedFile
2172-
NvimTreeSpecialFile
2173-
NvimTreeImageFile
2174-
<
2175-
Folder Text: >
2176-
NvimTreeFolderName Directory
2177-
NvimTreeEmptyFolderName Directory
2178-
NvimTreeOpenedFolderName Directory
2179-
NvimTreeSymlinkFolderName Directory
2180-
NvimTreeRootFolder
2181-
<
2182-
Icon: >
2183-
NvimTreeFileIcon
2184-
NvimTreeOpenedFileIcon NvimTreeOpenedFile
2185-
NvimTreeSymlinkIcon
2186-
NvimTreeFolderIcon
2187-
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
2188-
NvimTreeClosedFolderIcon NvimTreeFolderIcon
2189-
NvimTreeFolderArrowClosed NvimTreeIndentMarker
2190-
NvimTreeFolderArrowOpen NvimTreeIndentMarker
2191-
<
2192-
Indent: >
2193-
NvimTreeIndentMarker
2194-
<
21952166
Standard: >
21962167
NvimTreeNormal Normal
21972168
NvimTreeNormalFloat NormalFloat
@@ -2210,49 +2181,77 @@ Standard: >
22102181
NvimTreeStatusLine StatusLine
22112182
NvimTreeStatusLineNC StatusLineNC
22122183
<
2184+
File Text: >
2185+
NvimTreeExecFile Constant
2186+
NvimTreeImageFile PreProc
2187+
NvimTreeModifiedFile Constant
2188+
NvimTreeOpenedFile Constant
2189+
NvimTreeSpecialFile PreProc
2190+
NvimTreeSymlink Statement
2191+
<
2192+
Folder Text: >
2193+
NvimTreeRootFolder PreProc
2194+
NvimTreeFolderName Directory
2195+
NvimTreeEmptyFolderName Directory
2196+
NvimTreeOpenedFolderName Directory
2197+
NvimTreeSymlinkFolderName Directory
2198+
<
2199+
Icon: >
2200+
NvimTreeFolderIcon "guifg=#8094b4 ctermfg=Blue"
2201+
NvimTreeFileIcon NvimTreeNormal
2202+
NvimTreeSymlinkIcon NvimTreeNormal
2203+
NvimTreeOpenedFileIcon NvimTreeOpenedFile
2204+
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
2205+
NvimTreeClosedFolderIcon NvimTreeFolderIcon
2206+
NvimTreeFolderArrowClosed NvimTreeIndentMarker
2207+
NvimTreeFolderArrowOpen NvimTreeIndentMarker
2208+
<
2209+
Indent: >
2210+
NvimTreeIndentMarker NvimTreeFileIcon
2211+
<
22132212
Clipboard: >
22142213
NvimTreeCopiedHL SpellRare
22152214
NvimTreeCutHL SpellBad
22162215
<
22172216
Bookmark Icon: >
2218-
NvimTreeBookmark
2217+
NvimTreeBookmark Constant
22192218
<
22202219
Bookmark Highlight: >
22212220
NvimTreeBookmarkHL SpellLocal
22222221
<
22232222
Picker: >
2224-
NvimTreeWindowPicker
2223+
NvimTreeWindowPicker "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan"
22252224
<
22262225
Live Filter: >
2227-
NvimTreeLiveFilterPrefix
2228-
NvimTreeLiveFilterValue
2226+
NvimTreeLiveFilterPrefix PreProc
2227+
NvimTreeLiveFilterValue ModeMsg
22292228
<
22302229
Git Icon: >
2231-
NvimTreeGitDirty
2232-
NvimTreeGitStaged
2233-
NvimTreeGitMerge
2234-
NvimTreeGitRenamed
2235-
NvimTreeGitNew
2236-
NvimTreeGitDeleted
2237-
NvimTreeGitIgnored Comment
2230+
NvimTreeGitDeleted Statement
2231+
NvimTreeGitDirty Statement
2232+
NvimTreeGitIgnored Comment
2233+
NvimTreeGitMerge Constant
2234+
NvimTreeGitNew PreProc
2235+
NvimTreeGitRenamed PreProc
2236+
NvimTreeGitStaged Constant
22382237
<
22392238
Git File Text: >
2240-
NvimTreeFileDirty NvimTreeGitDirty
2241-
NvimTreeFileStaged NvimTreeGitStaged
2242-
NvimTreeFileMerge NvimTreeGitMerge
2243-
NvimTreeFileRenamed NvimTreeGitRenamed
2244-
NvimTreeFileNew NvimTreeGitNew
2245-
NvimTreeFileDeleted NvimTreeGitDeleted
2246-
NvimTreeFileIgnored NvimTreeGitIgnored
2239+
NvimTreeFileDirty NvimTreeGitDirty
2240+
NvimTreeFileStaged NvimTreeGitStaged
2241+
NvimTreeFileMerge NvimTreeGitMerge
2242+
NvimTreeFileRenamed NvimTreeGitRenamed
2243+
NvimTreeFileNew NvimTreeGitNew
2244+
NvimTreeFileDeleted NvimTreeGitDeleted
2245+
NvimTreeFileIgnored NvimTreeGitIgnored
22472246
<
22482247
Git Folder Text: >
2249-
NvimTreeFolderDirty NvimTreeFileDirty
2250-
NvimTreeFolderStaged NvimTreeFileStaged
2251-
NvimTreeFolderMerge NvimTreeFileMerge
2252-
NvimTreeFolderRenamed NvimTreeFileRenamed
2253-
NvimTreeFolderNew NvimTreeFileNew
2254-
NvimTreeFolderDeleted NvimTreeFileDeleted
2255-
NvimTreeFolderIgnored NvimTreeFileIgnored
2248+
NvimTreeFolderDirty NvimTreeFileDirty
2249+
NvimTreeFolderStaged NvimTreeFileStaged
2250+
NvimTreeFolderMerge NvimTreeFileMerge
2251+
NvimTreeFolderRenamed NvimTreeFileRenamed
2252+
NvimTreeFolderNew NvimTreeFileNew
2253+
NvimTreeFolderDeleted NvimTreeFileDeleted
2254+
NvimTreeFolderIgnored NvimTreeFileIgnored
22562255
<
22572256
Diagnostics Icon: >
22582257
NvimTreeDiagnosticErrorIcon DiagnosticError
@@ -2278,9 +2277,10 @@ Diagnostics Folder Highlight: >
22782277

22792278
2023/10/XX revision xxxxx made significant highlighting changes, some breaking:
22802279

2281-
- Highlight groups named consistently
2280+
- Full cterm support.
22822281
- Standard vim highlight groups such |DiagnosticUnderlineError| are now the
22832282
defaults.
2283+
- Highlight groups named consistently.
22842284
- All `highlight_xxx` e.g. |nvim-tree.renderer.highlight_git| are granular,
22852285
allowing `"none"`, `"icon"`, `"name"` or `"all"`
22862286
- `highlight_xxx` has highlight groups for both File and Folder

lua/nvim-tree/colors.lua

Lines changed: 55 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,82 @@
11
local M = {}
22

3-
-- nvim-tree default highlight group links
4-
local DEFAULT_LINKS = {
5-
-- File Text
6-
NvimTreeFolderName = "Directory",
7-
NvimTreeEmptyFolderName = "Directory",
8-
NvimTreeOpenedFolderName = "Directory",
9-
NvimTreeSymlinkFolderName = "Directory",
3+
-- directly defined groups, please keep these to an absolute minimum
4+
local DEFAULT_DEFS = {
105

11-
-- Folder Text
12-
NvimTreeOpenedFileIcon = "NvimTreeOpenedFile",
13-
NvimTreeOpenedFolderIcon = "NvimTreeFolderIcon",
14-
NvimTreeClosedFolderIcon = "NvimTreeFolderIcon",
6+
NvimTreeFolderIcon = "guifg=#8094b4 ctermfg=Blue",
7+
NvimTreeWindowPicker = "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan",
8+
}
9+
10+
-- nvim-tree default highlight group links, please attempt to keep in order with help
11+
local DEFAULT_LINKS = {
1512

1613
-- Standard
1714
NvimTreeNormal = "Normal",
1815
NvimTreeNormalFloat = "NormalFloat",
1916
NvimTreeNormalNC = "NvimTreeNormal",
17+
2018
NvimTreeLineNr = "LineNr",
2119
NvimTreeWinSeparator = "WinSeparator",
2220
NvimTreeEndOfBuffer = "EndOfBuffer",
2321
NvimTreePopup = "Normal",
2422
NvimTreeSignColumn = "NvimTreeNormal",
25-
NvimTreeCursorLine = "CursorLine",
23+
2624
NvimTreeCursorColumn = "CursorColumn",
25+
NvimTreeCursorLine = "CursorLine",
2726
NvimTreeCursorLineNr = "CursorLineNr",
27+
2828
NvimTreeStatusLine = "StatusLine",
2929
NvimTreeStatusLineNC = "StatusLineNC",
3030

31+
-- File Text
32+
NvimTreeExecFile = "Constant",
33+
NvimTreeImageFile = "PreProc",
34+
NvimTreeModifiedFile = "Constant",
35+
NvimTreeOpenedFile = "Constant",
36+
NvimTreeSpecialFile = "PreProc",
37+
NvimTreeSymlink = "Statement",
38+
39+
-- Folder Text
40+
NvimTreeRootFolder = "PreProc",
41+
NvimTreeFolderName = "Directory",
42+
NvimTreeEmptyFolderName = "Directory",
43+
NvimTreeOpenedFolderName = "Directory",
44+
NvimTreeSymlinkFolderName = "Directory",
45+
46+
-- Icon
47+
NvimTreeFileIcon = "NvimTreeNormal",
48+
NvimTreeSymlinkIcon = "NvimTreeNormal",
49+
NvimTreeOpenedFileIcon = "NvimTreeOpenedFile",
50+
NvimTreeOpenedFolderIcon = "NvimTreeFolderIcon",
51+
NvimTreeClosedFolderIcon = "NvimTreeFolderIcon",
52+
NvimTreeFolderArrowClosed = "NvimTreeIndentMarker",
53+
NvimTreeFolderArrowOpen = "NvimTreeIndentMarker",
54+
55+
-- Indent
56+
NvimTreeIndentMarker = "NvimTreeFileIcon",
57+
3158
-- Clipboard
3259
NvimTreeCutHL = "SpellBad",
3360
NvimTreeCopiedHL = "SpellRare",
3461

62+
-- Bookmark Icon
63+
NvimTreeBookmark = "Constant",
64+
3565
-- Bookmark Highlight
3666
NvimTreeBookmarkHL = "SpellLocal",
3767

68+
-- LiveFilter
69+
NvimTreeLiveFilterPrefix = "PreProc",
70+
NvimTreeLiveFilterValue = "ModeMsg",
71+
3872
-- Git Icon
73+
NvimTreeGitDeleted = "Statement",
74+
NvimTreeGitDirty = "Statement",
3975
NvimTreeGitIgnored = "Comment",
76+
NvimTreeGitMerge = "Constant",
77+
NvimTreeGitNew = "PreProc",
78+
NvimTreeGitRenamed = "PreProc",
79+
NvimTreeGitStaged = "Constant",
4080

4181
-- Git File Text
4282
NvimTreeFileDirty = "NvimTreeGitDirty",
@@ -91,71 +131,10 @@ local LEGACY_LINKS = {
91131
NvimTreeDiagnosticHintFolderHL = "NvimTreeLspDiagnosticsHintFolderText",
92132
}
93133

94-
local function get_color_from_hl(hl_name, fallback)
95-
local id = vim.api.nvim_get_hl_id_by_name(hl_name)
96-
if not id then
97-
return fallback
98-
end
99-
100-
-- TODO this is unreachable as nvim_get_hl_id_by_name returns a new ID if not present
101-
local foreground = vim.fn.synIDattr(vim.fn.synIDtrans(id), "fg")
102-
if not foreground or foreground == "" then
103-
return fallback
104-
end
105-
106-
return foreground
107-
end
108-
109-
local function get_colors()
110-
return {
111-
red = vim.g.terminal_color_1 or get_color_from_hl("Keyword", "Red"),
112-
green = vim.g.terminal_color_2 or get_color_from_hl("Character", "Green"),
113-
yellow = vim.g.terminal_color_3 or get_color_from_hl("PreProc", "Yellow"),
114-
blue = vim.g.terminal_color_4 or get_color_from_hl("Include", "Blue"),
115-
purple = vim.g.terminal_color_5 or get_color_from_hl("Define", "Purple"),
116-
cyan = vim.g.terminal_color_6 or get_color_from_hl("Conditional", "Cyan"),
117-
dark_red = vim.g.terminal_color_9 or get_color_from_hl("Keyword", "DarkRed"),
118-
orange = vim.g.terminal_color_11 or get_color_from_hl("Number", "Orange"),
119-
}
120-
end
121-
122-
local function get_hl_groups()
123-
local colors = get_colors()
124-
125-
return {
126-
IndentMarker = { fg = "#8094b4" },
127-
Symlink = { gui = "bold", fg = colors.cyan },
128-
FolderIcon = { fg = "#8094b4" },
129-
RootFolder = { fg = colors.purple },
130-
131-
ExecFile = { gui = "bold", fg = colors.green },
132-
SpecialFile = { gui = "bold,underline", fg = colors.yellow },
133-
ImageFile = { gui = "bold", fg = colors.purple },
134-
OpenedFile = { gui = "bold", fg = colors.green },
135-
ModifiedFile = { fg = colors.green },
136-
137-
GitDirty = { fg = colors.dark_red },
138-
GitDeleted = { fg = colors.dark_red },
139-
GitStaged = { fg = colors.green },
140-
GitMerge = { fg = colors.orange },
141-
GitRenamed = { fg = colors.purple },
142-
GitNew = { fg = colors.yellow },
143-
144-
WindowPicker = { gui = "bold", fg = "#ededed", bg = "#4493c8" },
145-
LiveFilterPrefix = { gui = "bold", fg = colors.purple },
146-
LiveFilterValue = { gui = "bold", fg = "#fff" },
147-
148-
Bookmark = { fg = colors.green },
149-
}
150-
end
151-
152134
function M.setup()
153-
local highlight_groups = get_hl_groups()
154-
for k, d in pairs(highlight_groups) do
155-
local gui = d.gui and " gui=" .. d.gui or ""
156-
local fg = d.fg and " guifg=" .. d.fg or ""
157-
local bg = d.bg and " guibg=" .. d.bg or ""
158-
vim.api.nvim_command("hi def NvimTree" .. k .. gui .. fg .. bg)
135+
-- non-linked
136+
for k, d in pairs(DEFAULT_DEFS) do
137+
vim.api.nvim_command("hi " .. k .. " " .. d)
159138
end
160139

161140
-- hard link override when legacy only is present

0 commit comments

Comments
 (0)