From 2aaa41d384b92fffa507e9147d5ed04a78b9655c Mon Sep 17 00:00:00 2001 From: Alexander Courtis Date: Sun, 15 Oct 2023 17:33:41 +1100 Subject: [PATCH] chore: normalise colours and enable cterm --- README.md | 2 +- doc/nvim-tree-lua.txt | 120 +++++++++++++++++------------------ lua/nvim-tree/colors.lua | 131 ++++++++++++++++----------------------- 3 files changed, 116 insertions(+), 137 deletions(-) diff --git a/README.md b/README.md index 077afd9bdee..2e2b298430c 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/doc/nvim-tree-lua.txt b/doc/nvim-tree-lua.txt index 35378f54ae7..c8623b43ea6 100644 --- a/doc/nvim-tree-lua.txt +++ b/doc/nvim-tree-lua.txt @@ -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 @@ -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* @@ -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* @@ -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 @@ -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 @@ -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 diff --git a/lua/nvim-tree/colors.lua b/lua/nvim-tree/colors.lua index 517f4736b53..7a6d6983eed 100644 --- a/lua/nvim-tree/colors.lua +++ b/lua/nvim-tree/colors.lua @@ -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", @@ -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