Skip to content

chore: normalise colours and enable cterm #2471

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Oct 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Setup the plugin in your `init.lua`
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1

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

-- empty setup using defaults
Expand Down
120 changes: 60 additions & 60 deletions doc/nvim-tree-lua.txt
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ Setup the plugin in your `init.lua` >
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1

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

-- empty setup using defaults
Expand Down Expand Up @@ -899,7 +899,7 @@ Icon sign column precedence:
Type: `boolean`, Default: `true`

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

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

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

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

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

Default linked group follows name.
Default linked group or definition follows name.

File Text: >
NvimTreeSymlink
NvimTreeExecFile
NvimTreeOpenedFile
NvimTreeModifiedFile
NvimTreeSpecialFile
NvimTreeImageFile
<
Folder Text: >
NvimTreeFolderName Directory
NvimTreeEmptyFolderName Directory
NvimTreeOpenedFolderName Directory
NvimTreeSymlinkFolderName Directory
NvimTreeRootFolder
<
Icon: >
NvimTreeFileIcon
NvimTreeOpenedFileIcon NvimTreeOpenedFile
NvimTreeSymlinkIcon
NvimTreeFolderIcon
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
NvimTreeClosedFolderIcon NvimTreeFolderIcon
NvimTreeFolderArrowClosed NvimTreeIndentMarker
NvimTreeFolderArrowOpen NvimTreeIndentMarker
<
Indent: >
NvimTreeIndentMarker
<
Standard: >
NvimTreeNormal Normal
NvimTreeNormalFloat NormalFloat
Expand All @@ -2210,49 +2181,77 @@ Standard: >
NvimTreeStatusLine StatusLine
NvimTreeStatusLineNC StatusLineNC
<
File Text: >
NvimTreeExecFile Constant
NvimTreeImageFile PreProc
NvimTreeModifiedFile Constant
NvimTreeOpenedFile Constant
NvimTreeSpecialFile PreProc
NvimTreeSymlink Statement
<
Folder Text: >
NvimTreeRootFolder PreProc
NvimTreeFolderName Directory
NvimTreeEmptyFolderName Directory
NvimTreeOpenedFolderName Directory
NvimTreeSymlinkFolderName Directory
<
Icon: >
NvimTreeFolderIcon "guifg=#8094b4 ctermfg=Blue"
NvimTreeFileIcon NvimTreeNormal
NvimTreeSymlinkIcon NvimTreeNormal
NvimTreeOpenedFileIcon NvimTreeOpenedFile
NvimTreeOpenedFolderIcon NvimTreeFolderIcon
NvimTreeClosedFolderIcon NvimTreeFolderIcon
NvimTreeFolderArrowClosed NvimTreeIndentMarker
NvimTreeFolderArrowOpen NvimTreeIndentMarker
<
Indent: >
NvimTreeIndentMarker NvimTreeFileIcon
<
Clipboard: >
NvimTreeCopiedHL SpellRare
NvimTreeCutHL SpellBad
<
Bookmark Icon: >
NvimTreeBookmark
NvimTreeBookmark Constant
<
Bookmark Highlight: >
NvimTreeBookmarkHL SpellLocal
<
Picker: >
NvimTreeWindowPicker
NvimTreeWindowPicker "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan"
<
Live Filter: >
NvimTreeLiveFilterPrefix
NvimTreeLiveFilterValue
NvimTreeLiveFilterPrefix PreProc
NvimTreeLiveFilterValue ModeMsg
<
Git Icon: >
NvimTreeGitDirty
NvimTreeGitStaged
NvimTreeGitMerge
NvimTreeGitRenamed
NvimTreeGitNew
NvimTreeGitDeleted
NvimTreeGitIgnored Comment
NvimTreeGitDeleted Statement
NvimTreeGitDirty Statement
NvimTreeGitIgnored Comment
NvimTreeGitMerge Constant
NvimTreeGitNew PreProc
NvimTreeGitRenamed PreProc
NvimTreeGitStaged Constant
<
Git File Text: >
NvimTreeFileDirty NvimTreeGitDirty
NvimTreeFileStaged NvimTreeGitStaged
NvimTreeFileMerge NvimTreeGitMerge
NvimTreeFileRenamed NvimTreeGitRenamed
NvimTreeFileNew NvimTreeGitNew
NvimTreeFileDeleted NvimTreeGitDeleted
NvimTreeFileIgnored NvimTreeGitIgnored
NvimTreeFileDirty NvimTreeGitDirty
NvimTreeFileStaged NvimTreeGitStaged
NvimTreeFileMerge NvimTreeGitMerge
NvimTreeFileRenamed NvimTreeGitRenamed
NvimTreeFileNew NvimTreeGitNew
NvimTreeFileDeleted NvimTreeGitDeleted
NvimTreeFileIgnored NvimTreeGitIgnored
<
Git Folder Text: >
NvimTreeFolderDirty NvimTreeFileDirty
NvimTreeFolderStaged NvimTreeFileStaged
NvimTreeFolderMerge NvimTreeFileMerge
NvimTreeFolderRenamed NvimTreeFileRenamed
NvimTreeFolderNew NvimTreeFileNew
NvimTreeFolderDeleted NvimTreeFileDeleted
NvimTreeFolderIgnored NvimTreeFileIgnored
NvimTreeFolderDirty NvimTreeFileDirty
NvimTreeFolderStaged NvimTreeFileStaged
NvimTreeFolderMerge NvimTreeFileMerge
NvimTreeFolderRenamed NvimTreeFileRenamed
NvimTreeFolderNew NvimTreeFileNew
NvimTreeFolderDeleted NvimTreeFileDeleted
NvimTreeFolderIgnored NvimTreeFileIgnored
<
Diagnostics Icon: >
NvimTreeDiagnosticErrorIcon DiagnosticError
Expand All @@ -2278,9 +2277,10 @@ Diagnostics Folder Highlight: >

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

- Highlight groups named consistently
- Full cterm support.
- Standard vim highlight groups such |DiagnosticUnderlineError| are now the
defaults.
- Highlight groups named consistently.
- All `highlight_xxx` e.g. |nvim-tree.renderer.highlight_git| are granular,
allowing `"none"`, `"icon"`, `"name"` or `"all"`
- `highlight_xxx` has highlight groups for both File and Folder
Expand Down
131 changes: 55 additions & 76 deletions lua/nvim-tree/colors.lua
Original file line number Diff line number Diff line change
@@ -1,42 +1,82 @@
local M = {}

-- nvim-tree default highlight group links
local DEFAULT_LINKS = {
-- File Text
NvimTreeFolderName = "Directory",
NvimTreeEmptyFolderName = "Directory",
NvimTreeOpenedFolderName = "Directory",
NvimTreeSymlinkFolderName = "Directory",
-- directly defined groups, please keep these to an absolute minimum
local DEFAULT_DEFS = {

-- Folder Text
NvimTreeOpenedFileIcon = "NvimTreeOpenedFile",
NvimTreeOpenedFolderIcon = "NvimTreeFolderIcon",
NvimTreeClosedFolderIcon = "NvimTreeFolderIcon",
NvimTreeFolderIcon = "guifg=#8094b4 ctermfg=Blue",
NvimTreeWindowPicker = "guifg=#ededed guibg=#4493c8 gui=bold ctermfg=White ctermbg=Cyan",
}

-- nvim-tree default highlight group links, please attempt to keep in order with help
local DEFAULT_LINKS = {

-- Standard
NvimTreeNormal = "Normal",
NvimTreeNormalFloat = "NormalFloat",
NvimTreeNormalNC = "NvimTreeNormal",

NvimTreeLineNr = "LineNr",
NvimTreeWinSeparator = "WinSeparator",
NvimTreeEndOfBuffer = "EndOfBuffer",
NvimTreePopup = "Normal",
NvimTreeSignColumn = "NvimTreeNormal",
NvimTreeCursorLine = "CursorLine",

NvimTreeCursorColumn = "CursorColumn",
NvimTreeCursorLine = "CursorLine",
NvimTreeCursorLineNr = "CursorLineNr",

NvimTreeStatusLine = "StatusLine",
NvimTreeStatusLineNC = "StatusLineNC",

-- File Text
NvimTreeExecFile = "Constant",
NvimTreeImageFile = "PreProc",
NvimTreeModifiedFile = "Constant",
NvimTreeOpenedFile = "Constant",
NvimTreeSpecialFile = "PreProc",
NvimTreeSymlink = "Statement",

-- Folder Text
NvimTreeRootFolder = "PreProc",
NvimTreeFolderName = "Directory",
NvimTreeEmptyFolderName = "Directory",
NvimTreeOpenedFolderName = "Directory",
NvimTreeSymlinkFolderName = "Directory",

-- Icon
NvimTreeFileIcon = "NvimTreeNormal",
NvimTreeSymlinkIcon = "NvimTreeNormal",
NvimTreeOpenedFileIcon = "NvimTreeOpenedFile",
NvimTreeOpenedFolderIcon = "NvimTreeFolderIcon",
NvimTreeClosedFolderIcon = "NvimTreeFolderIcon",
NvimTreeFolderArrowClosed = "NvimTreeIndentMarker",
NvimTreeFolderArrowOpen = "NvimTreeIndentMarker",

-- Indent
NvimTreeIndentMarker = "NvimTreeFileIcon",

-- Clipboard
NvimTreeCutHL = "SpellBad",
NvimTreeCopiedHL = "SpellRare",

-- Bookmark Icon
NvimTreeBookmark = "Constant",

-- Bookmark Highlight
NvimTreeBookmarkHL = "SpellLocal",

-- LiveFilter
NvimTreeLiveFilterPrefix = "PreProc",
NvimTreeLiveFilterValue = "ModeMsg",

-- Git Icon
NvimTreeGitDeleted = "Statement",
NvimTreeGitDirty = "Statement",
NvimTreeGitIgnored = "Comment",
NvimTreeGitMerge = "Constant",
NvimTreeGitNew = "PreProc",
NvimTreeGitRenamed = "PreProc",
NvimTreeGitStaged = "Constant",

-- Git File Text
NvimTreeFileDirty = "NvimTreeGitDirty",
Expand Down Expand Up @@ -91,71 +131,10 @@ local LEGACY_LINKS = {
NvimTreeDiagnosticHintFolderHL = "NvimTreeLspDiagnosticsHintFolderText",
}

local function get_color_from_hl(hl_name, fallback)
local id = vim.api.nvim_get_hl_id_by_name(hl_name)
if not id then
return fallback
end

-- TODO this is unreachable as nvim_get_hl_id_by_name returns a new ID if not present
local foreground = vim.fn.synIDattr(vim.fn.synIDtrans(id), "fg")
if not foreground or foreground == "" then
return fallback
end

return foreground
end

local function get_colors()
return {
red = vim.g.terminal_color_1 or get_color_from_hl("Keyword", "Red"),
green = vim.g.terminal_color_2 or get_color_from_hl("Character", "Green"),
yellow = vim.g.terminal_color_3 or get_color_from_hl("PreProc", "Yellow"),
blue = vim.g.terminal_color_4 or get_color_from_hl("Include", "Blue"),
purple = vim.g.terminal_color_5 or get_color_from_hl("Define", "Purple"),
cyan = vim.g.terminal_color_6 or get_color_from_hl("Conditional", "Cyan"),
dark_red = vim.g.terminal_color_9 or get_color_from_hl("Keyword", "DarkRed"),
orange = vim.g.terminal_color_11 or get_color_from_hl("Number", "Orange"),
}
end

local function get_hl_groups()
local colors = get_colors()

return {
IndentMarker = { fg = "#8094b4" },
Symlink = { gui = "bold", fg = colors.cyan },
FolderIcon = { fg = "#8094b4" },
RootFolder = { fg = colors.purple },

ExecFile = { gui = "bold", fg = colors.green },
SpecialFile = { gui = "bold,underline", fg = colors.yellow },
ImageFile = { gui = "bold", fg = colors.purple },
OpenedFile = { gui = "bold", fg = colors.green },
ModifiedFile = { fg = colors.green },

GitDirty = { fg = colors.dark_red },
GitDeleted = { fg = colors.dark_red },
GitStaged = { fg = colors.green },
GitMerge = { fg = colors.orange },
GitRenamed = { fg = colors.purple },
GitNew = { fg = colors.yellow },

WindowPicker = { gui = "bold", fg = "#ededed", bg = "#4493c8" },
LiveFilterPrefix = { gui = "bold", fg = colors.purple },
LiveFilterValue = { gui = "bold", fg = "#fff" },

Bookmark = { fg = colors.green },
}
end

function M.setup()
local highlight_groups = get_hl_groups()
for k, d in pairs(highlight_groups) do
local gui = d.gui and " gui=" .. d.gui or ""
local fg = d.fg and " guifg=" .. d.fg or ""
local bg = d.bg and " guibg=" .. d.bg or ""
vim.api.nvim_command("hi def NvimTree" .. k .. gui .. fg .. bg)
-- non-linked
for k, d in pairs(DEFAULT_DEFS) do
vim.api.nvim_command("hi " .. k .. " " .. d)
end

-- hard link override when legacy only is present
Expand Down