Skip to content

Commit c380ea4

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

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

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

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

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

926926
*nvim-tree.renderer.icons.git_placement*
@@ -2214,42 +2214,13 @@ groups.
22142214
Example |:highlight| >
22152215
:hi NvimTreeSymlink guifg=blue gui=bold,underline
22162216
<
2217-
You should have 'termguicolors' enabled, otherwise, colors will not be
2218-
applied.
2217+
It is recommended to enable 'termguicolors' for the more pleasant 24-bit colours.
22192218

22202219
To view the active highlight groups run `:so $VIMRUNTIME/syntax/hitest.vim`
22212220
as per |:highlight|
22222221

2223-
Default linked group follows name.
2222+
Default linked group or definition follows name.
22242223

2225-
File Text: >
2226-
NvimTreeSymlink
2227-
NvimTreeExecFile
2228-
NvimTreeOpenedFile
2229-
NvimTreeModifiedFile
2230-
NvimTreeSpecialFile
2231-
NvimTreeImageFile
2232-
<
2233-
Folder Text: >
2234-
NvimTreeFolderName Directory
2235-
NvimTreeEmptyFolderName Directory
2236-
NvimTreeOpenedFolderName Directory
2237-
NvimTreeSymlinkFolderName Directory
2238-
NvimTreeRootFolder
2239-
<
2240-
Icon: >
2241-
NvimTreeFileIcon
2242-
NvimTreeOpenedFileIcon NvimTreeOpenedFile
2243-
NvimTreeSymlinkIcon
2244-
NvimTreeFolderIcon
2245-
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
2246-
NvimTreeClosedFolderIcon NvimTreeFolderIcon
2247-
NvimTreeFolderArrowClosed NvimTreeIndentMarker
2248-
NvimTreeFolderArrowOpen NvimTreeIndentMarker
2249-
<
2250-
Indent: >
2251-
NvimTreeIndentMarker
2252-
<
22532224
Standard: >
22542225
NvimTreeNormal Normal
22552226
NvimTreeNormalFloat NormalFloat
@@ -2268,49 +2239,77 @@ Standard: >
22682239
NvimTreeStatusLine StatusLine
22692240
NvimTreeStatusLineNC StatusLineNC
22702241
<
2242+
File Text: >
2243+
NvimTreeExecFile Constant
2244+
NvimTreeImageFile PreProc
2245+
NvimTreeModifiedFile Constant
2246+
NvimTreeOpenedFile Constant
2247+
NvimTreeSpecialFile PreProc
2248+
NvimTreeSymlink Statement
2249+
<
2250+
Folder Text: >
2251+
NvimTreeRootFolder PreProc
2252+
NvimTreeFolderName Directory
2253+
NvimTreeEmptyFolderName Directory
2254+
NvimTreeOpenedFolderName Directory
2255+
NvimTreeSymlinkFolderName Directory
2256+
<
2257+
Icon: >
2258+
NvimTreeFolderIcon "guifg=#8094b4 ctermfg=Blue"
2259+
NvimTreeFileIcon NvimTreeNormal
2260+
NvimTreeSymlinkIcon NvimTreeNormal
2261+
NvimTreeOpenedFileIcon NvimTreeOpenedFile
2262+
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
2263+
NvimTreeClosedFolderIcon NvimTreeFolderIcon
2264+
NvimTreeFolderArrowClosed NvimTreeIndentMarker
2265+
NvimTreeFolderArrowOpen NvimTreeIndentMarker
2266+
<
2267+
Indent: >
2268+
NvimTreeIndentMarker NvimTreeFileIcon
2269+
<
22712270
Clipboard: >
22722271
NvimTreeCopiedHL SpellRare
22732272
NvimTreeCutHL SpellBad
22742273
<
22752274
Bookmark Icon: >
2276-
NvimTreeBookmark
2275+
NvimTreeBookmark Constant
22772276
<
22782277
Bookmark Highlight: >
22792278
NvimTreeBookmarkHL SpellLocal
22802279
<
22812280
Picker: >
2282-
NvimTreeWindowPicker
2281+
NvimTreeWindowPicker "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan"
22832282
<
22842283
Live Filter: >
2285-
NvimTreeLiveFilterPrefix
2286-
NvimTreeLiveFilterValue
2284+
NvimTreeLiveFilterPrefix PreProc
2285+
NvimTreeLiveFilterValue ModeMsg
22872286
<
22882287
Git Icon: >
2289-
NvimTreeGitDirty
2290-
NvimTreeGitStaged
2291-
NvimTreeGitMerge
2292-
NvimTreeGitRenamed
2293-
NvimTreeGitNew
2294-
NvimTreeGitDeleted
2295-
NvimTreeGitIgnored Comment
2288+
NvimTreeGitDeleted Statement
2289+
NvimTreeGitDirty Statement
2290+
NvimTreeGitIgnored Comment
2291+
NvimTreeGitMerge Constant
2292+
NvimTreeGitNew PreProc
2293+
NvimTreeGitRenamed PreProc
2294+
NvimTreeGitStaged Constant
22962295
<
22972296
Git File Text: >
2298-
NvimTreeFileDirty NvimTreeGitDirty
2299-
NvimTreeFileStaged NvimTreeGitStaged
2300-
NvimTreeFileMerge NvimTreeGitMerge
2301-
NvimTreeFileRenamed NvimTreeGitRenamed
2302-
NvimTreeFileNew NvimTreeGitNew
2303-
NvimTreeFileDeleted NvimTreeGitDeleted
2304-
NvimTreeFileIgnored NvimTreeGitIgnored
2297+
NvimTreeFileDirty NvimTreeGitDirty
2298+
NvimTreeFileStaged NvimTreeGitStaged
2299+
NvimTreeFileMerge NvimTreeGitMerge
2300+
NvimTreeFileRenamed NvimTreeGitRenamed
2301+
NvimTreeFileNew NvimTreeGitNew
2302+
NvimTreeFileDeleted NvimTreeGitDeleted
2303+
NvimTreeFileIgnored NvimTreeGitIgnored
23052304
<
23062305
Git Folder Text: >
2307-
NvimTreeFolderDirty NvimTreeFileDirty
2308-
NvimTreeFolderStaged NvimTreeFileStaged
2309-
NvimTreeFolderMerge NvimTreeFileMerge
2310-
NvimTreeFolderRenamed NvimTreeFileRenamed
2311-
NvimTreeFolderNew NvimTreeFileNew
2312-
NvimTreeFolderDeleted NvimTreeFileDeleted
2313-
NvimTreeFolderIgnored NvimTreeFileIgnored
2306+
NvimTreeFolderDirty NvimTreeFileDirty
2307+
NvimTreeFolderStaged NvimTreeFileStaged
2308+
NvimTreeFolderMerge NvimTreeFileMerge
2309+
NvimTreeFolderRenamed NvimTreeFileRenamed
2310+
NvimTreeFolderNew NvimTreeFileNew
2311+
NvimTreeFolderDeleted NvimTreeFileDeleted
2312+
NvimTreeFolderIgnored NvimTreeFileIgnored
23142313
<
23152314
Diagnostics Icon: >
23162315
NvimTreeDiagnosticErrorIcon DiagnosticError
@@ -2336,9 +2335,10 @@ Diagnostics Folder Highlight: >
23362335

23372336
2023/10/XX revision xxxxx made significant highlighting changes, some breaking:
23382337

2339-
- Highlight groups named consistently
2338+
- Full cterm support.
23402339
- Standard vim highlight groups such |DiagnosticUnderlineError| are now the
23412340
defaults.
2341+
- Highlight groups named consistently.
23422342
- All `highlight_xxx` e.g. |nvim-tree.renderer.highlight_git| are granular,
23432343
allowing `"none"`, `"icon"`, `"name"` or `"all"`
23442344
- `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)