Skip to content

Commit e389c55

Browse files
committed
chore: normalise colours and enable cterm (#2471)
1 parent e7f69c1 commit e389c55

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
@@ -114,7 +114,7 @@ Setup the plugin in your `init.lua` >
114114
vim.g.loaded_netrw = 1
115115
vim.g.loaded_netrwPlugin = 1
116116
117-
-- set termguicolors to enable highlight groups
117+
-- optionally enable 24-bit colour
118118
vim.opt.termguicolors = true
119119
120120
-- empty setup using defaults
@@ -909,7 +909,7 @@ Icon sign column precedence:
909909
Type: `boolean`, Default: `true`
910910

911911
*nvim-tree.renderer.icons.web_devicons.file.color*
912-
Use icon colors for files.
912+
Use icon colors for files. Overrides highlight groups.
913913
Type: `boolean`, Default: `true`
914914

915915
*nvim-tree.renderer.icons.web_devicons.folder*
@@ -921,7 +921,7 @@ Icon sign column precedence:
921921
Type: `boolean`, Default: `false`
922922

923923
*nvim-tree.renderer.icons.web_devicons.folder.color*
924-
Use icon colors for folders.
924+
Use icon colors for folders. Overrides highlight groups.
925925
Type: `boolean`, Default: `true`
926926

927927
*nvim-tree.renderer.icons.git_placement*
@@ -2239,42 +2239,13 @@ groups.
22392239
Example |:highlight| >
22402240
:hi NvimTreeSymlink guifg=blue gui=bold,underline
22412241
<
2242-
You should have 'termguicolors' enabled, otherwise, colors will not be
2243-
applied.
2242+
It is recommended to enable 'termguicolors' for the more pleasant 24-bit colours.
22442243

22452244
To view the active highlight groups run `:so $VIMRUNTIME/syntax/hitest.vim`
22462245
as per |:highlight|
22472246

2248-
Default linked group follows name.
2247+
Default linked group or definition follows name.
22492248

2250-
File Text: >
2251-
NvimTreeSymlink
2252-
NvimTreeExecFile
2253-
NvimTreeOpenedFile
2254-
NvimTreeModifiedFile
2255-
NvimTreeSpecialFile
2256-
NvimTreeImageFile
2257-
<
2258-
Folder Text: >
2259-
NvimTreeFolderName Directory
2260-
NvimTreeEmptyFolderName Directory
2261-
NvimTreeOpenedFolderName Directory
2262-
NvimTreeSymlinkFolderName Directory
2263-
NvimTreeRootFolder
2264-
<
2265-
Icon: >
2266-
NvimTreeFileIcon
2267-
NvimTreeOpenedFileIcon NvimTreeOpenedFile
2268-
NvimTreeSymlinkIcon
2269-
NvimTreeFolderIcon
2270-
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
2271-
NvimTreeClosedFolderIcon NvimTreeFolderIcon
2272-
NvimTreeFolderArrowClosed NvimTreeIndentMarker
2273-
NvimTreeFolderArrowOpen NvimTreeIndentMarker
2274-
<
2275-
Indent: >
2276-
NvimTreeIndentMarker
2277-
<
22782249
Standard: >
22792250
NvimTreeNormal Normal
22802251
NvimTreeNormalFloat NormalFloat
@@ -2293,49 +2264,77 @@ Standard: >
22932264
NvimTreeStatusLine StatusLine
22942265
NvimTreeStatusLineNC StatusLineNC
22952266
<
2267+
File Text: >
2268+
NvimTreeExecFile Constant
2269+
NvimTreeImageFile PreProc
2270+
NvimTreeModifiedFile Constant
2271+
NvimTreeOpenedFile Constant
2272+
NvimTreeSpecialFile PreProc
2273+
NvimTreeSymlink Statement
2274+
<
2275+
Folder Text: >
2276+
NvimTreeRootFolder PreProc
2277+
NvimTreeFolderName Directory
2278+
NvimTreeEmptyFolderName Directory
2279+
NvimTreeOpenedFolderName Directory
2280+
NvimTreeSymlinkFolderName Directory
2281+
<
2282+
Icon: >
2283+
NvimTreeFolderIcon "guifg=#8094b4 ctermfg=Blue"
2284+
NvimTreeFileIcon NvimTreeNormal
2285+
NvimTreeSymlinkIcon NvimTreeNormal
2286+
NvimTreeOpenedFileIcon NvimTreeOpenedFile
2287+
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
2288+
NvimTreeClosedFolderIcon NvimTreeFolderIcon
2289+
NvimTreeFolderArrowClosed NvimTreeIndentMarker
2290+
NvimTreeFolderArrowOpen NvimTreeIndentMarker
2291+
<
2292+
Indent: >
2293+
NvimTreeIndentMarker NvimTreeFileIcon
2294+
<
22962295
Clipboard: >
22972296
NvimTreeCopiedHL SpellRare
22982297
NvimTreeCutHL SpellBad
22992298
<
23002299
Bookmark Icon: >
2301-
NvimTreeBookmark
2300+
NvimTreeBookmark Constant
23022301
<
23032302
Bookmark Highlight: >
23042303
NvimTreeBookmarkHL SpellLocal
23052304
<
23062305
Picker: >
2307-
NvimTreeWindowPicker
2306+
NvimTreeWindowPicker "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan"
23082307
<
23092308
Live Filter: >
2310-
NvimTreeLiveFilterPrefix
2311-
NvimTreeLiveFilterValue
2309+
NvimTreeLiveFilterPrefix PreProc
2310+
NvimTreeLiveFilterValue ModeMsg
23122311
<
23132312
Git Icon: >
2314-
NvimTreeGitDirty
2315-
NvimTreeGitStaged
2316-
NvimTreeGitMerge
2317-
NvimTreeGitRenamed
2318-
NvimTreeGitNew
2319-
NvimTreeGitDeleted
2320-
NvimTreeGitIgnored Comment
2313+
NvimTreeGitDeleted Statement
2314+
NvimTreeGitDirty Statement
2315+
NvimTreeGitIgnored Comment
2316+
NvimTreeGitMerge Constant
2317+
NvimTreeGitNew PreProc
2318+
NvimTreeGitRenamed PreProc
2319+
NvimTreeGitStaged Constant
23212320
<
23222321
Git File Text: >
2323-
NvimTreeFileDirty NvimTreeGitDirty
2324-
NvimTreeFileStaged NvimTreeGitStaged
2325-
NvimTreeFileMerge NvimTreeGitMerge
2326-
NvimTreeFileRenamed NvimTreeGitRenamed
2327-
NvimTreeFileNew NvimTreeGitNew
2328-
NvimTreeFileDeleted NvimTreeGitDeleted
2329-
NvimTreeFileIgnored NvimTreeGitIgnored
2322+
NvimTreeFileDirty NvimTreeGitDirty
2323+
NvimTreeFileStaged NvimTreeGitStaged
2324+
NvimTreeFileMerge NvimTreeGitMerge
2325+
NvimTreeFileRenamed NvimTreeGitRenamed
2326+
NvimTreeFileNew NvimTreeGitNew
2327+
NvimTreeFileDeleted NvimTreeGitDeleted
2328+
NvimTreeFileIgnored NvimTreeGitIgnored
23302329
<
23312330
Git Folder Text: >
2332-
NvimTreeFolderDirty NvimTreeFileDirty
2333-
NvimTreeFolderStaged NvimTreeFileStaged
2334-
NvimTreeFolderMerge NvimTreeFileMerge
2335-
NvimTreeFolderRenamed NvimTreeFileRenamed
2336-
NvimTreeFolderNew NvimTreeFileNew
2337-
NvimTreeFolderDeleted NvimTreeFileDeleted
2338-
NvimTreeFolderIgnored NvimTreeFileIgnored
2331+
NvimTreeFolderDirty NvimTreeFileDirty
2332+
NvimTreeFolderStaged NvimTreeFileStaged
2333+
NvimTreeFolderMerge NvimTreeFileMerge
2334+
NvimTreeFolderRenamed NvimTreeFileRenamed
2335+
NvimTreeFolderNew NvimTreeFileNew
2336+
NvimTreeFolderDeleted NvimTreeFileDeleted
2337+
NvimTreeFolderIgnored NvimTreeFileIgnored
23392338
<
23402339
Diagnostics Icon: >
23412340
NvimTreeDiagnosticErrorIcon DiagnosticError
@@ -2361,9 +2360,10 @@ Diagnostics Folder Highlight: >
23612360

23622361
2023/10/XX revision xxxxx made significant highlighting changes, some breaking:
23632362

2364-
- Highlight groups named consistently
2363+
- Full cterm support.
23652364
- Standard vim highlight groups such |DiagnosticUnderlineError| are now the
23662365
defaults.
2366+
- Highlight groups named consistently.
23672367
- All `highlight_xxx` e.g. |nvim-tree.renderer.highlight_git| are granular,
23682368
allowing `"none"`, `"icon"`, `"name"` or `"all"`
23692369
- `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)