{"id":28625777,"url":"https://github.com/tadaa/vimade","last_synced_at":"2025-06-12T08:11:27.417Z","repository":{"id":53779382,"uuid":"164469375","full_name":"TaDaa/vimade","owner":"TaDaa","description":"Vimade let's you dim, fade, tint, animate, and customize colors in your windows and buffers for (Neo)vim","archived":false,"fork":false,"pushed_at":"2025-06-08T18:44:32.000Z","size":677,"stargazers_count":615,"open_issues_count":8,"forks_count":11,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-06-08T19:32:51.799Z","etag":null,"topics":["neovim","neovim-plugin","plugin","vim-plugin"],"latest_commit_sha":null,"homepage":"","language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TaDaa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-01-07T17:47:35.000Z","updated_at":"2025-06-08T18:44:36.000Z","dependencies_parsed_at":"2024-08-27T05:45:47.271Z","dependency_job_id":"270343e2-312b-4895-9d06-e675ff5d5b7c","html_url":"https://github.com/TaDaa/vimade","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/TaDaa/vimade","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TaDaa%2Fvimade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TaDaa%2Fvimade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TaDaa%2Fvimade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TaDaa%2Fvimade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TaDaa","download_url":"https://codeload.github.com/TaDaa/vimade/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TaDaa%2Fvimade/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259427070,"owners_count":22855564,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["neovim","neovim-plugin","plugin","vim-plugin"],"created_at":"2025-06-12T08:11:26.530Z","updated_at":"2025-06-12T08:11:27.330Z","avatar_url":"https://github.com/TaDaa.png","language":"Lua","readme":"\n\n\n\u003ctable\u003e\n\u003ctbody\u003e\n  \u003ctr\u003e\u003ctd align=\"center\"\u003e\n \n\u003cpicture\u003e\n  \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://tadaa.github.io/images/logo-transformed%20(1).png\"\u003e\n  \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://tadaa.github.io/images/logo-transformed-inv.png#gh-dark-mode-only\"\u003e\n  \u003cimg width=\"400\" alt=\"\" src=\"https://tadaa.github.io/images/logo-transformed%20(1).png#gh-light-mode-only\"\u003e\n\u003c/picture\u003e\n\n\n  \u003c/td\u003e\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n    \n**Dim, Fade, Tint, and Customize (Neo)vim**\n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n  \u003ctd\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/minimalist_full.gif\"\u003e\u003c/img\u003e      \n  \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\n\n## What is this?\n\n**Vimade** helps you maintain focus on the active part of the screen, especially when working with many\nopen windows. It let's you dim, fade, tint, animate, and customize colors in your windows and\nbuffers.  You can also fade around the active scope and mark areas that won't be faded.\n\n\n## What is required?\n\n\u003e [!IMPORTANT]\n\u003e `focus` features require **Neovim 0.10.+**\n\n\u003e **Neovim 0.8.0+**: This plugin supports a lua-only code path, you are all set!\n  \n\u003e **Vim7.4+** and **Neovim \u003c 0.8.0**: Python or Python3 support is required. If using these older versions of Neovim, you'll need to install `pynvim`.\n\n## Features\n\n\u003e [!IMPORTANT]\n\u003e #### New Features:\n\u003e \u003csub\u003e Neovim 0.10+ only\u003c/sub\u003e\n\u003e   - `:VimadeFocus`\n\u003e       \n\u003e     New command that provides Limelight, but with syntax highlighting!?\n\u003e   - `:VimadeMark`\n\u003e \n\u003e      New command that prevent certain areas within a window from being faded!\n\u003e   - `ncmode='focus'` \n\u003e   \n\u003e      A new config mode that instructs Vimade to only highlight when `:VimadeFocus` is active.\n\u003e   - `paradox`\n\u003e      \n\u003e      A new recipe that inverts colors in the active window by a low percentage.  Makes low-contrast colorschemes more readable.  Looks beautiful when combined with `Ayu`!\n\n- [X] Fade or highlight windows or buffers.\n- [X] Fade colors around the cursor (limelight w/ syntax highlighting - Neovim 0.10+)\n- [X] Mark areas that won't fade (Neovim 0.10+)\n- [X] Link windows so they change together (e.g. diffsplit)\n- [X] Blocklist specific windows or buffers from customization.\n- [X] Set Custom tints for a unique visual experience.\n- [X] Prebuilt recipes for quick and easy customization.\n- [X] Fully customizable (styles, recipes, and more).\n- [X] Animated transitions for a smooth visual experience.\n- [X] Automatically adjust to configuration changes.\n- [X] Helpers to make inactive built-in highlights look better\n- [X] Supports 256 color terminals and termguicolors.\n- [X] Sub-milliscond Lua performance and highly optimized Python logic for Vim.\n- [X] Preconfigured commands (VimadeEnable, VimadeDisable, VimadeRedraw, etc)\n- [X] Supports all versions of Neovim and Vim 7.4+\n- [X] Vim Documentation/Help\n\n#### Whats coming?\n- [ ] More awesome features and improvements! (details to be added later)\n\n\n\n\n## Getting started:\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eInstallation\u003c/ins\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\n- Any plugin manager will work.\n  You can also call `vimade.setup({...})` at any time to change any value without restarting (Neo)vim:\n\n  \u003cdetails open\u003e\n  \u003csummary\u003e\n    \u003cins\u003eFor Lua users:\u003c/ins\u003e\n    \u003c/summary\n \n  \n  *\u003csub\u003e::lua::lazy.nvim::\u003c/sub\u003e*\n  ```lua\n    {{\n      'tadaa/vimade',\n      -- default opts (you can partially set these or configure them however you like)\n      opts = {\n        -- Recipe can be any of 'default', 'minimalist', 'duo', and 'ripple'\n        -- Set animate = true to enable animations on any recipe.\n        -- See the docs for other config options.\n        recipe = {'default', {animate=false}},\n        -- ncmode = 'windows' will fade inactive windows.\n        -- ncmode = 'focus' will only fade after you activate the `:VimadeFocus` command.\n        ncmode = 'buffers',\n        fadelevel = 0.4, -- any value between 0 and 1. 0 is hidden and 1 is opaque.\n        -- Changes the real or theoretical background color. basebg can be used to give\n        -- transparent terminals accurating dimming.  See the 'Preparing a transparent terminal'\n        -- section in the README.md for more info.\n        -- basebg = [23,23,23],\n        basebg = '',\n        tint = {\n          -- bg = {rgb={0,0,0}, intensity=0.3}, -- adds 30% black to background\n          -- fg = {rgb={0,0,255}, intensity=0.3}, -- adds 30% blue to foreground\n          -- fg = {rgb={120,120,120}, intensity=1}, -- all text will be gray\n          -- sp = {rgb={255,0,0}, intensity=0.5}, -- adds 50% red to special characters\n          -- you can also use functions for tint or any value part in the tint object\n          -- to create window-specific configurations\n          -- see the `Tinting` section of the README for more details.\n        },\n        -- prevent a window or buffer from being styled. You \n        blocklist = {\n          default = {\n            highlights = {\n              laststatus_3 = function(win, active)\n                -- Global statusline, laststatus=3, is currently disabled as multiple windows take\n                -- ownership of the StatusLine highlight (see #85).\n                if vim.go.laststatus == 3 then\n                    -- you can also return tables (e.g. {'StatusLine', 'StatusLineNC'})\n                    return 'StatusLine'\n                end\n              end,\n              -- Prevent ActiveTabs from highlighting.\n              'TabLineSel',\n              'Pmenu',\n              'PmenuSel',\n              'PmenuKind',\n              'PmenuKindSel',\n              'PmenuExtra',\n              'PmenuExtraSel',\n              'PmenuSbar',\n              'PmenuThumb',\n              -- Lua patterns are supported, just put the text between / symbols:\n              -- '/^StatusLine.*/' -- will match any highlight starting with \"StatusLine\"\n            },\n            buf_opts = { buftype = {'prompt'} },\n            -- buf_name = {'name1','name2', name3'},\n            -- buf_vars = { variable = {'match1', 'match2'} },\n            -- win_opts = { option = {'match1', 'match2' } },\n            -- win_vars = { variable = {'match1', 'match2'} },\n            -- win_type = {'name1','name2', name3'},\n            -- win_config = { variable = {'match1', 'match2'} },\n          },\n          default_block_floats = function (win, active)\n            return win.win_config.relative ~= '' and\n              (win ~= active or win.buf_opts.buftype =='terminal') and true or false\n          end,\n          -- any_rule_name1 = {\n          --   buf_opts = {}\n          -- },\n          -- only_behind_float_windows = {\n          --   buf_opts = function(win, current)\n          --     if (win.win_config.relative == '')\n          --       and (current and current.win_config.relative ~= '') then\n          --         return false\n          --     end\n          --     return true\n          --   end\n          -- },\n        },\n        -- Link connects windows so that they style or unstyle together.\n        -- Properties are matched against the active window. Same format as blocklist above\n        link = {},\n        groupdiff = true, -- links diffs so that they style together\n        groupscrollbind = false, -- link scrollbound windows so that they style together.\n        -- enable to bind to FocusGained and FocusLost events. This allows fading inactive\n        -- tmux panes.\n        enablefocusfading = false,\n        -- Time in milliseconds before re-checking windows. This is only used when usecursorhold\n        -- is set to false.\n        checkinterval = 1000,\n        -- enables cursorhold event instead of using an async timer.  This may make Vimade\n        -- feel more performant in some scenarios. See h:updatetime.\n        usecursorhold = false,\n        -- when nohlcheck is disabled the highlight tree will always be recomputed. You may\n        -- want to disable this if you have a plugin that creates dynamic highlights in\n        -- inactive windows. 99% of the time you shouldn't need to change this value.\n        nohlcheck = true,\n        focus = {\n           providers = {\n              filetypes = {\n                default = {\n                  -- If you use mini.indentscope, snacks.indent, or hlchunk, you can also highlight\n                  -- using the same indent scope!\n                  -- {'snacks', {}},\n                  -- {'mini', {}},\n                  -- {'hlchunk', {}},\n                  {'treesitter', {\n                    min_node_size = 2, \n                    min_size = 1,\n                    max_size = 0,\n                    -- exclude types either too large and/or mundane\n                    exclude = {\n                      'script_file',\n                      'stream',\n                      'document',\n                      'source_file',\n                      'translation_unit',\n                      'chunk',\n                      'module',\n                      'stylesheet',\n                      'statement_block',\n                      'block',\n                      'pair',\n                      'program',\n                      'switch_case',\n                      'catch_clause',\n                      'finally_clause',\n                      'property_signature',\n                      'dictionary',\n                      'assignment',\n                      'expression_statement',\n                      'compound_statement',\n                    }\n                  }},\n                  -- if treesitter fails or there isn't a good match, fallback to blanks\n                  -- (similar to limelight)\n                  {'blanks', {\n                    min_size = 1,\n                    max_size = '35%'\n                  }},\n                  -- if blanks fails to find a good match, fallback to static 35%\n                  {'static', {\n                    size = '35%'\n                  }},\n                },\n                -- You can make custom configurations for any filetype.  Here are some examples.\n                -- markdown ={{'blanks', {min_size=0, max_size='50%'}}, {'static', {max_size='50%'}}}\n                -- javascript = {\n                  -- -- only use treesitter (no fallbacks)\n                --   {'treesitter', { min_node_size = 2, include = {'if_statement', ...}}},\n                -- },\n                -- typescript = {\n                --   {'treesitter', { min_node_size = 2, exclude = {'if_statement'}}}, \n                --   {'static', {size = '35%'}}\n                -- },\n                -- java = {\n                  -- -- mini with a fallback to blanks\n                  -- {'mini', {min_size = 1, max_size = 20}},\n                  -- {'blanks', {min_size = 1, max_size = '100%' }}, \n                -- },\n              },\n            }\n          },\n      }\n    }}\n  ```\n  \u003c/details\u003e\n\n  *\u003csub\u003e::lua::packer::\u003c/sub\u003e*\n  ```lua\n  require('packer').startup(function()\n    use({\n      'TaDaa/vimade',\n      config = function ()\n        require('vimade').setup({\n          recipe = {'default', {animate = false}},\n          ncmode = 'buffers',\n          fadelevel = 0.4,\n          tint = {},\n          -- see the lazy.nvim config above or `Lua defaults` for full breakdown\n        })\n      end,\n    })\n  end)\n  ```\n\n  *\u003csub\u003e::lua::paq::\u003c/sub\u003e*\n  ```lua\n  require 'paq' { 'TaDaa/vimade' }\n\n  require('vimade').setup({\n    recipe = {'default', {animate = false}},\n    ncmode = 'buffers',\n    fadelevel = 0.4,\n    tint = {},\n    -- see the lazy.nvim config above or `Lua defaults` for full breakdown\n  })\n  ```\n\n  *\u003csub\u003e::vimscript::vim-plug::\u003c/sub\u003e*\n  ```lua\n    Plug 'TaDaa/vimade'\n    lua \u003c\u003c EOF\n    require('vimade').setup({\n      recipe = {'default', {animate = false}},\n      ncmode = 'buffers',\n      fadelevel = 0.4,\n      tint = {},\n      -- see the lazy.nvim config above or `Lua defaults` for full breakdown\n    })\n    EOF\n  ```\n\n  \u003cdetails open\u003e\n  \u003csummary\u003e\n    \u003cins\u003eFor Python users:\u003c/ins\u003e\n    \n    \n  If you are using **vim** or older versions of **neovim** and want to configure using **python**, you need to bind your setup to `Vimade#PythonReady`.\n  This ensures that **Vimade** has been added to the python path before your configuration runs.\n    \n  \u003c/summary\u003e\n\n  ```vim\n  function! SetupMyVimadeConfig()\n  python \u003c\u003c EOF\n  from vimade import vimade\n  vimade.setup(\n    recipe = ['default', {'animate':False}],\n    ncmode = 'buffers',\n    fadelevel = 0.4,\n    tint = {},\n    enablefocusfading = False,\n    basebg = '',\n    # all options listed in `Python defaults` section of README.md\n   )\n  EOF\n  endfunction\n  au! User Vimade#PythonReady call SetupMyVimadeConfig()\n  ```\n  \u003c/details\u003e\n  \n---\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eLazy loading\u003c/ins\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003c/summary\u003e\n\u003cbr\u003e\n\n- In **Neovim** 0.8.0+, use **lazy.nvim** or similar plugin manager and the event of choice:\n\n    *\u003csub\u003e::lua::lazy::\u003c/sub\u003e*\n    ```lua\n    require('lazy').setup({spec = {'tadaa/vimade', event = 'VeryLazy'}})\n    ```\n\n- For **Vim** or more granular control, enable `vimade.lazy` and call `vimade#Load()`:\n\n  \u0026nbsp;  *\u003csub\u003e::vimscript::\u003c/sub\u003e*\n     ```vim\n     let g:vimade = {}\n     let g:vimade.lazy = 1\n     \n     au WinEnter * ++once call vimade#Load()\n     ```\n\n  \n---\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eConfiguring Vimade (a basic guide)\u003c/ins\u003e\u003c/a\u003e\n \n\u003c/summary\u003e\n\u003cbr\u003e\n\n**Vimade** works by just installing it and no configuration is required.  However, it also offers extensive\ncustomizations.  Most users may want to adjust the fadelevel and tint. You can configure **Vimade**\nusing Vimscript, Lua, or Python.\n\nIf you prefer a general configuration compatible with both Neovim and Vim, Vimscript is a good option.\nYou can also apply the Lua and Python-specific parts on top of these options, so nothing is \nmutually exclusive.\n\n*\u003csub\u003e::vimscript::\u003c/sub\u003e*\n```vim\nlet g:vimade = {}\n```\n\nThis initializes a `vimade` object for configuration.  **Vimade** will automatically extend it with\n default values.\n \n Now let's start adding changes:\n\n\n*\u003csub\u003e::vimscript::\u003c/sub\u003e*\n```vim\nlet g:vimade.fadelevel = 0.5\n```\n\nThis code changes the opacity of inactive windows.  You can choose any value between `0` (completely faded)\nand `1` (fully opaque).\n\nLet's add a blue tint:\n\n\n*\u003csub\u003e::vimscript::\u003c/sub\u003e*\n```vim\nlet g:vimade.tint = {'fg':{'rgb':[0,0,255], 'intensity': 0.5}}\n```\n\n\nYou should notice that your text color has changed. The *tint* option can manipulate `fg`, `bg`, and `sp` attributes. Changing `vimade.tint.bg`\nlets you customize the background color of inactive windows.\n\n\nLet's try something a bit more complicated, suppose we have a filetree that we don't want to dim as extremely as our other windows.\nYou may remember that I said we need to configure functions directly in **python** or **lua**, so let's take a look:\n\n\n \u003csub\u003e ::lua:: \u003c/sub\u003e\n```lua\nrequire('vimade').setup{\n  fadelevel = function(style, state)\n    if style.win.buf_opts.syntax == 'nerdtree' then\n      return 0.8\n    else\n      return 0.4\n    end\n  end}\n```\n \n \u003csub\u003e ::python:: \u003c/sub\u003e\n```python\nfrom vimade import vimade\nvimade.setup(\n  fadelevel = lambda style, state:\n    0.8 if style.win.buf_opts['syntax'] == 'nerdtree'\n    else 0.4)\n```\n\nBoth languages use almost identitical syntax for configuration.\n\n\nAdvanced configurations in **python** and **lua** are treated as overlays, whatever you pass through the **setup** functions will overlay\non top of your **vimscript** configuration. This means you won't be able to do an advanced configuration, then override it with\na **vimscript** configuration after.  You'll need to unset the advanced configuration first, which can be done as seen below\n \n \u003csub\u003e ::lua:: \u003c/sub\u003e\n```lua\n-- sets the overlay back to empty\nrequire('vimade').setup{}\n```\n \n \u003csub\u003e ::python:: \u003c/sub\u003e\n```python\nfrom vimade import vimade\n# sets the overlay back to empty\nvimade.setup()\n```\n\nYou now know the basics for configuring **Vimade**!\n\n---\n\n\u003c/details\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca\u003e\u003cins\u003eVimscript defaults\u003c/ins\u003e\u003c/a\u003e\u003c/summary\u003e\n\n\u003csub\u003e::vimscript::\u003c/sub\u003e\n```vim\nlet g:vimade = {\n\\   \" common options below\n\\   'renderer': 'auto',\n\\   'ncmode': 'buffers',\n\\   'fadelevel': 0.4,\n\\   'tint': '',\n\\   'basebg': '',\n\\   'blocklist': {\n\\     'default': {\n\\       'buf_opts': {\n\\         'buftype': g:vimade_features.has_nvim ? ['prompt'] : ['popup', 'prompt']\n\\       },\n\\       'win_config':{\n\\         'relative': v:true\n\\       },\n\\     }\n\\   },\n\\   'link': {},\n\\   'groupdiff': 1,\n\\   'groupscrollbind': 0,\n\\   'checkinterval': 1000,\n\\   'usecursorhold': g:vimade_features.has_gui_running \u0026\u0026 !g:vimade_features.has_nvim \u0026\u0026 g:vimade_features.has_gui_version,\n\\   'enablefocusfading': 0,\n\\   'normalid': '',\n\\   'normalncid': '',\n\\   'lazy': 0,\n\\   \" python-only options below\n\\   'basegroups': ['Folded', 'Search', 'SignColumn', 'CursorLine', 'CursorLineNr', 'DiffAdd', 'DiffChange', 'DiffDelete', 'DiffText', 'FoldColumn', 'Whitespace', 'NonText', 'SpecialKey', 'Conceal', 'EndOfBuffer', 'WinSeparator', 'LineNr', 'LineNrAbove', 'LineNrBelow'],\n\\   'enablebasegroups': 1,\n\\   'enablesigns': 1,\n\\   'signsid': 13100,\n\\   'signsretentionperiod': 4000,\n\\   'signspriority': 31,\n\\   'fademinimap': 1,\n\\   'matchpriority': 10,\n\\   'disablebatch': 0,\n\\   \" lua only options below\n\\   'nohlcheck': 1,\n\\ }\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca\u003e\u003cins\u003eLua defaults\u003c/ins\u003e\u003c/a\u003e\u003c/summary\u003e\n\n\u003csub\u003e::lua::\u003c/sub\u003e\n```lua\nvimade.setup{\n  -- Recipe can be any of 'default', 'minimalist', 'duo', and 'ripple'\n  -- Set animate = true to enable animations on any recipe.\n  -- See the docs for other config options.\n  recipe = {'default', {animate=false}},\n  -- ncmode = 'windows' will fade inactive windows.\n  -- ncmode = 'focus' will only fade after you activate the `:VimadeFocus` command.\n  ncmode = 'buffers',\n  fadelevel = 0.4, -- any value between 0 and 1. 0 is hidden and 1 is opaque.\n  tint = {\n    -- bg = {rgb={0,0,0}, intensity=0.3}, -- adds 30% black to background\n    -- fg = {rgb={0,0,255}, intensity=0.3}, -- adds 30% blue to foreground\n    -- fg = {rgb={120,120,120}, intensity=1}, -- all text will be gray\n    -- sp = {rgb={255,0,0}, intensity=0.5}, -- adds 50% red to special characters\n    -- you can also use functions for tint or any value part in the tint object\n    -- to create window-specific configurations\n    -- see the `Tinting` section of the README for more details.\n  },\n\n  -- Changes the real or theoretical background color. basebg can be used to give\n  -- transparent terminals accurating dimming.  See the 'Preparing a transparent terminal'\n  -- section in the README.md for more info.\n  -- basebg = [23,23,23],\n  basebg = '',\n  -- prevent a window or buffer from being styled. You \n  blocklist = {\n    default = {\n      highlights = {\n        laststatus_3 = function(win, active)\n          -- Global statusline, laststatus=3, is currently disabled as multiple windows take ownership\n          -- of the StatusLine highlight (see #85).\n          if vim.go.laststatus == 3 then\n              -- you can also return tables (e.g. {'StatusLine', 'StatusLineNC'})\n              return 'StatusLine'\n          end\n        end,\n        -- Prevent ActiveTabs from highlighting.\n        'TabLineSel',\n        'Pmenu',\n        'PmenuSel',\n        'PmenuKind',\n        'PmenuKindSel',\n        'PmenuExtra',\n        'PmenuExtraSel',\n        'PmenuSbar',\n        'PmenuThumb',\n        -- Lua patterns are supported, just put the text between / symbols:\n        -- '/^StatusLine.*/' -- will match any highlight starting with \"StatusLine\"\n      },\n      buf_opts = { buftype = {'prompt'} },\n      -- buf_name = {'name1','name2', name3'},\n      -- buf_vars = { variable = {'match1', 'match2'} },\n      -- win_opts = { option = {'match1', 'match2' } },\n      -- win_vars = { variable = {'match1', 'match2'} },\n      -- win_type = {'name1','name2', name3'},\n      -- win_config = { variable = {'match1', 'match2'} },\n    },\n    default_block_floats = function (win, active)\n      return win.win_config.relative ~= '' and\n        (win ~= active or win.buf_opts.buftype =='terminal') and true or false\n    end,\n    -- any_rule_name1 = {\n    --   buf_opts = {}\n    -- },\n    -- only_behind_float_windows = {\n    --   buf_opts = function(win, current)\n    --     if (win.win_config.relative == '')\n    --       and (current and current.win_config.relative ~= '') then\n    --         return false\n    --     end\n    --     return true\n    --   end\n    -- },\n  },\n  -- Link connects windows so that they style or unstyle together.\n  -- Properties are matched against the active window. Same format as blocklist above\n  link = {},\n  groupdiff = true, -- links diffs so that they style together\n  groupscrollbind = false, -- link scrollbound windows so that they style together.\n  -- enable to bind to FocusGained and FocusLost events. This allows fading inactive\n  -- tmux panes.\n  enablefocusfading = false,\n  -- Time in milliseconds before re-checking windows. This is only used when usecursorhold\n  -- is set to false.\n  checkinterval = 1000,\n  -- enables cursorhold event instead of using an async timer.  This may make Vimade\n  -- feel more performant in some scenarios. See h:updatetime.\n  usecursorhold = false,\n  -- when nohlcheck is disabled the highlight tree will always be recomputed. You may\n  -- want to disable this if you have a plugin that creates dynamic highlights in\n  -- inactive windows. 99% of the time you shouldn't need to change this value.\n  nohlcheck = true,\n}\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca\u003e\u003cins\u003ePython defaults\u003c/ins\u003e\u003c/a\u003e\u003c/summary\u003e\n\n\u003csub\u003e::python::\u003c/sub\u003e\n```python\nfrom vimade import vimade\nfrom vimade.recipe.default import Default\nvimade.setup(\n  # Recipe can be any of 'default', 'minimalist', 'duo', and 'ripple'\n  # Set animate = true to enable animations on any recipe.\n  # See the docs for other config options.\n  recipe = ['default', {'animate': False}],\n  ncmode = 'buffers', # use 'windows' to fade inactive windows\n  fadelevel = 0.4, # any value between 0 and 1. 0 is hidden and 1 is opaque.\n  tint = {\n    # 'bg': {'rgb':[0,0,0], 'intensity':0.3}, # adds 30% black to background\n    # 'fg': {'rgb':[0,0,255], 'intensity':0.3}, # adds 30% blue to foreground\n    # 'fg': {'rgb':[120,120,120], 'intensity':1}, # all text will be gray\n    # 'sp': {'rgb':[255,0,0], 'intensity':0.5}, # adds 50% red to special characters\n  },\n  # changes the real or theoretical background color. basebg can be used to give\n  # transparent terminals accurating dimming.  See the 'Preparing a transparent terminal'\n  # section in the README.md for more info\n  basebg = '',\n  blocklist = {\n    'default': {\n      'buf_opts': { 'buftype': ['popup', 'prompt'] },\n      'win_config': { 'relative': True },\n      # buf_name = ['name1','name2', name3'],\n      # buf_vars = { 'variable': ['match1', 'match2'] },\n      # win_opts = { 'option': ['match1', 'match2' ] },\n      # win_vars = { 'variable': ['match1', 'match2'] },\n    },\n    # 'any_rule_name1': {\n    #   'buf_opts': {}\n    # },\n  },\n  # Link connects windows so that they style or unstyle together.\n  # Properties are matched against the active window. Same format as blocklist above\n  link = {},\n  groupdiff = True, # links diffs so that they style together\n  groupscrollbind = False, # link scrollbound windows so that they style together.\n  # enable to bind to FocusGained and FocusLost events. This allows fading inactive\n  # tmux panes.\n  enablefocusfading = False,\n  # Time in milliseconds before re-checking windows. This is only used when usecursorhold\n  # is set to false.\n  checkinterval = 1000,\n  # enables cursorhold event instead of using an async timer.  This may make Vimade\n  # feel more performant in some scenarios. See h:updatetime.\n  usecursorhold = false,\n  # Basegroups are extra highlights that are faded using winhl (neovim only)\n  basegroups = ['Folded', 'Search', 'SignColumn', 'CursorLine', 'CursorLineNr', 'DiffAdd', 'DiffChange', 'DiffDelete', 'DiffText', 'FoldColumn', 'Whitespace', 'NonText', 'SpecialKey', 'Conceal', 'EndOfBuffer', 'WinSeparator', 'LineNr', 'LineNrAbove', 'LineNrBelow'],\n  enablebasegroups = True,\n  # Enable sign highlighting\n  enablesigns = True,\n  # Create signs starting at the following id.\n  signsid = 13100,\n  # How long in ms to check for sign updates after the buffer is faded.\n  signsretentionperiod = 4000,\n  # Priority that will be used for faded signs\n  signspriority = 31,\n  # Special handling for `severin-lemaignan/vim-minimap`\n  fademinimap = True,\n  # Priority to be used for matchaddpos highlights. Set to 0 to show search in inactive windows. \n  matchpriority = 10,\n  # Set to True to disable IPC batch for debugging purposes. Enabling this will negatively\n  # impact performance.\n  disablebatch = False,\n)\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eOption docs \u0026 descriptions\u003c/ins\u003e\u003c/a\u003e\n \n\u003c/summary\u003e\n\u003cbr\u003e\n\n**Options for Lua, Python, and Vimscript**\n\n\n| option | values/type | default | description |\n| -      | -           | -       | -           |\n| `renderer` | `'auto'` `'python'` `'lua'` \u003cbr\u003e | `'auto'` | `auto` automatically assigns **vim** users to **python** and detects if **neovim**  users have the requires features for **lua**.  For **neovim** users on **lua** mode, the **python** logic is never run. **Neovim** users with missing features will be set to **python** and need **pynvim** installed.\n| `ncmode` | `'windows'` `'buffers'` `'focus'` | `'buffers'` | highlight or unhighlight `buffers` or `windows` together.  `focus` only highlights when `:VimadeFocus` is activated (`focus` currently neovim only).\n| `fadelevel` | `float [0-1]` `function(style,state)=\u003efloat` | `0.4` | The amount of fade opacity that should be applied to fg-text (`0` is invisible and `1` is no fading)\n| `tint` | \u003csub\u003eWhen set via **lua** or **python**, each object or number can also be a function that returns the corresponding value component\u003c/sub\u003e\u003cbr\u003e\u003cbr\u003e\u003csub\u003e`{'fg':{'rgb':[255,255,255], 'intensity':1, 'bg':{'rgb':[0,0,0], 'intensity':1}, 'sp':{'fg':[0,0,255], 'intensity':0.5}}}`\u003c/sub\u003e | `nil` | The amount of tint that can be applied against each highlight component (fg, bg, sp). Intensity is a float value [0-1], where 1 is the most intense and 0 is not tinted.  See the tinting tutorial for more details.\n| `basebg` | \u003csub\u003e `'#FFFFFF'` `[255,255,255]` `0xFFFFFF` \u003c/sub\u003e | `nil` | This value manipulates the target background color. This is most useful for transparent windows, where the *Normal* bg is *NONE*.  Set this value to a good target value to improve fading accuracy.\n| `blocklist` | \u003csub\u003eWhen set via **lua** or **python**, the top level named object can be a `function(win)=\u003ebool`. Each nested object or value can also be a `function(relative_config)=\u003ebool`.  `True` indicates blocked, `False` not linked, `nil` indeterminate.\u003c/sub\u003e\u003cbr\u003e\u003cbr\u003e\u003csub\u003e`{[key:string]: {'buf_opts': {[key]:string: value}, 'buf_vars': {...}, 'win_opts': {...}, 'win_vars': 'win_config': {...}}}`\u003c/sub\u003e | \u003csub\u003e ```{'default':{'buf_opts': {'buftype':['prompt']}, 'win_config': {'relative': 1}}}```\u003c/sub\u003e | If the window is determined to be blocked, **Vimade** highlights will be removed and it will skip the styling process. See the block and linking section for more details.\n| `link` | \u003csub\u003eWhen set via **lua** or **python**, the top level named object can be a `function(win, active_win)=\u003ebool`. Each nested object or value can also be a `function(relative_win_obj,active_win_obj)=\u003ebool`.  `True` indicates linked, `False` not linked, `nil` indeterminate.\u003c/sub\u003e\u003cbr\u003e\u003cbr\u003e | `nil` | Determines whether the current window should be linked and unhighlighted with the active window.  `groupdiff` and `groupscrollbind` tie into the default behavior of this object behind the scenes to unlink diffs.  See the block and linking section for more details.\n| `groupdiff` | `0` `1` `bool` | `1` | highlights and unhighlights diff windows together.\n| `groupscrollbind` | `0` `1` `bool` | `0` | highlights and unhighlights scrolllbound windows together.\n| `checkinterval` | `int` | `1000` | Time in milliseconds before re-checking windows.\n| `usecursorhold` | `0` `1` `bool` | `0` | Whether to use cursorhold events instead of async timer. Setting this option **disables the timer**. This option defaults to `0` for most editor versions.  **gvim** defaults to `1` due to async timers breaking visual selections.  If you use this value, remember to set `:set updatetime` appropriately.\n| `enablefocusfading` | `0` `1` `bool` | `0` | Highlight the active window on application focus and blur events.  This can be desirable when switching applications, but requires additional setup for terminal and tmux.  See enablefocusfading section for more details (TODO link)\n| `normalid` | `int` | nil | The id of the Normal highlight.  **Vimade** will automatically set this, so you don't need to worry about it. You can override it though if you just want to play around.\n| `normalncid` | `int` | nil | The id of the NormalNC highlight.  **Vimade** will automatically set this, so you don't need to worry about it. You can override it though if you just want to play around.\n| `lazy` | `1` `0` | nil | When set to `1` **Vimade** is disabled at startup. You will need to manually call `vimade#Load()`.  See lazy loading section for more details.\n\n\n**Options only for Lua**\n\n| option      | values/type | default | description                                                                                                                                                                                                                                                                                                                                         |\n| -           | -           | -       | -                                                                                                                                                                                                                                                                                                                                                   |\n| `recipe` | `arraylike[name, recipe_options]` \u003csub\u003e\u003cbr\u003eExample:\u003cbr\u003e `{'Minimalist',{'animate':true}}`\u003c/sub\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; | '`{'Default'}`' | Recipe and recipe-specific options that will be imported and used. Any other configuration will overlay the recipe config.\n| `nohlcheck` | `bool`      | `true`  | When set to `false`, **Vimade** will recompute namespaces each frame.  This is useful if you have a plugin that dynamically changes highlights periodically.  When to `true` **Vimade** only recomputes namespaces when you switch between buffers/windows.  Performance isn't an issue either way as the recomputation process is sub-millisecond. |\n\n\n**Options only for python**\n \n\n| option        | values/type    | default | description                                                                                                                                                                                                                                                                                                                                         |\n| -             | -              | -       | -                                                                                                                                                                                                                                                                                                                                                   |\n| `recipe` | `arraylike[name, recipe_options]` \u003csub\u003e\u003cbr\u003eExample:\u003cbr\u003e `['Minimalist',{'animate':True}]`\u003c/sub\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; | '`['Default']`' | Recipe and recipe-specific options that will be imported and used. Any other configuration will overlay the recipe config.\n| `enablesigns`   | `0` `1` `bool`       | `True`    | Whether or not to fade signs.  For **python** this has to be performed per-buffer.  If you want per-window signs, you will need to link your sign highlights to **Normal**.\n| `signsid`       | `int`            | `13100`   | The id that should be used to generate sign.  This is required to avoid collisions with other plugins.\n| `signsretentionperiod` | `int`     | `4000`    | The amount of time after a window becomes inactive to check for sign updates.  Many plugins asynchronously update the buffer after switching windows, this helps ensure signs stay faded.\n| `fademinimap`   | `0` `1` `bool`       | `1`       | Enables a special fade effect for `severin-lemaignan/vim-minimap`.  Setting vimade.fademinimap to 0 disables the special fade.\n| `matchpriority` | `int`            | `10`      | Controls the highlighting priority.  You may want to tweak this value to make Vimade play nicely with other highlighting plugins and behaviors.  For example, if you want hlsearch to show results on all buffers, you may want to lower this value to 0.\n| `linkwincolor`  | `string[]`       | `[]`      | **Vim only** option when **wincolor** is supported. List of highlights that will be linked to `Normal`. `Normal` is highlighted using `setlocal wincolor`, which gives **Vim** some flexibility to target highlight groups (see minimalist recipe).\n| `disablebatch`  | `0` `1` `bool`       | `0`       | Disables IPC batching. Enabling this will greatly reduce performance, but allow you debug issues.\n| `enablebasegroups` | `0` `1` `bool`    | `true`    | Only old **Neovim**. Allows winlocal winhl for the basegroups listed below.\n| `basegroups`    | `string[]`       | \u003csub\u003e**every built-in highlight**\u003c/sub\u003e  | Only old **Neovim**. Fades the listed highlights in addition to the buffer text.\n| `enabletreesitter` | `0` `1` `bool`    | `0`       | Only old **Neovim**. Uses treesitter to directly query highlight groups instead of relying on `synID`.\n\n\u003c/details\u003e\n  \n\n\u003cdetails\u003e\n\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003ePreparing a transparent terminal\u003c/ins\u003e\u003c/a\u003e\n\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\nWhen using a transparent terminal, your *Normal* highlight is set to `NONE`.  Plugins like **Vimade** don't know the real\ncolor. **Vimade** will assume that your background is either `black` or `white` depending on the value of `echo \u0026background`.\nFor better color accuracy:\n\n1. Prepare a pure `white` background (it must be exactly `#FFFFFF`).\n2. Place your terminal over the background\n3. Use a color picker tool to obtain the exact color value.  This value is typically a good starting point.\n4. Set `basebg` to whatever the color value is in your **Vimade** config. For example:\n \n    \u003csub\u003e::vimscript::\u003c/sub\u003e\n    ```vim\n    let g:vimade.basebg=[11,11,11]\n    ```\n    \u003csub\u003e::lua::\u003c/sub\u003e\n    ```vim\n    require('vimade').setup{basebg={11,11,11}}\n    ```\n    \u003csub\u003e::python::\u003c/sub\u003e\n    ```vim\n    from vimade import vimade\n    vimade.setup(basebg=[11,11,11])\n    ```\n5. Repeat step 4, but darken `basebg` until you find a value that suits your preferences.\n\n6. Once you have a good result it should look like this.  The example below uses the **Minimalist** recipe, which completely fades out\n   *EndOfBuffer* and *LineNr* highlights, notice how they aren't visible!\n\n    ![transparent_with_hlchunks](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/transparent_with_hlchunks.png)\n\n\u003cbr\u003e\n\n---\n\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eBuffers or windows\u003c/ins\u003e\u003c/a\u003e\n \n\u003c/summary\u003e\n\u003cbr\u003e\n\nThe primary and legacy behavior of **Vimade** is to fade and tint inactive buffers.  You can also enable window fading if you prefer!\n\n\n*\u003csub\u003e::vimscript::\u003c/sub\u003e*\n  ```vim\n  let g:vimade.ncmode = 'buffers'\n  ```\n\n  ```vim\n  let g:vimade.ncmode = 'windows'\n  ```\n\n\nMost users should try each option to see what they like best. For most, there are inherit benefits to fading based on buffers\nas its easier to see which windows are impacted by your edits or which windows you can cleanup.\n\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eTinting\u003c/ins\u003e\u003c/a\u003e\n \n\u003c/summary\u003e\n\u003cbr\u003e\n\nTinting influences the color of `fg`, `bg`, and `sp` for every highlight group. Every option allows you specify `intensity`,\nwhich determines how much color to add.\n\nChanging the `fg` alters the text color. Let's give our inactive windows some yoda spunk:\n\n*\u003csub\u003e::vimscript::\u003c/sub\u003e*\n```vim\nlet g:vimade.tint = {'fg':{'rgb':[0,255,0], 'intensity': 0.3}}\n```\n\n![tint_fg_green](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/tint_section_fg_green.png)\n\nThe more that you raise the intensity, the closer each highlight will be the specified `rgb` value.  So let's say you want to disable\n`syntax` highlighting on inactive windows, all you need to do is set the `intensity` to the value `1`.\n\n\n*\u003csub\u003e::vimscript::\u003c/sub\u003e*\n```vim\nlet g:vimade.tint = {'fg':{'rgb':[200,200,200], 'intensity': 1}}\n```\n\n![tint_fg_full_intensity](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/tint_section_fg_full_intensity.png)\n\n\n`bg` directly impacts the window background color. It also indirectly impacts the `fg` color if you have fading enabled because\nfades are performed against the background color.\n\n*\u003csub\u003e::vimscript::\u003c/sub\u003e*\n```vim\nlet g:vimade.tint = {'bg':{'rgb':[0,0,0], 'intensity': 0.15}}\n```\n\n![tint_bg_black](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/tint_section_bg_black.png)\n\n `bg` and all `tint` attributes have different effects depending on the value of `vimade.ncmode`.  When using `let g:vimade.ncmode='buffers'`,\n tints only impact inactive *buffers*.  When using `let g:vimade.ncmode='windows'` they affect windows, see the screenshots below for a\n comparison that also combines our changes above.\n \n\u003csub\u003e::vimscript::\u003c/sub\u003e\n``` vimscript\nlet g:vimade.ncmode = 'buffers'\nlet g:vimade.tint = {\n  \\ 'fg': { 'rgb': [0,255,0], 'intensity': 0.3 },\n  \\ 'bg': { 'rgb': [0,0,0], 'intensity': 0.15 }}\n```\n\n![tint_buffer_mode](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/tint_section_combined_buffers.png)\n\n\u003csub\u003e::vimscript::\u003c/sub\u003e\n``` vimscript\nlet g:vimade.ncmode = 'windows'\nlet g:vimade.tint = {\n  \\ 'fg': {'rgb': [0,255,0], 'intensity': 0.3 },\n  \\ 'bg': {'rgb': [0,0,0], 'intensity': 0.15 }}\n```\n\n![tint_windows_mode](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/tint_section_combined_windows.png)\n\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eBlocklists and linking\u003c/ins\u003e\u003c/a\u003e\n \n\u003c/summary\u003e\n\u003cbr\u003e\n\n*Blocklists* and *linking* are conceptually similar processes. Blocklists prevent a window from being **styled**.  Linking\non the other hand lets you bind other windows to the *active* window so that they **style** and **unstyle** together.\n\nYou can specific any property in the following objects, or use a function that returns **true** when a condition is met.\n\n``` vim\nlet g:vimade.blocklist = {\n \\ 'rule_name': {\n \\   'buf_names': [], \" list of strings and/or functions to evaluate string comparison\n \\   'buf_opts': {}, \" any buffer scoped option (e.g. buftype)\n \\   'buf_vars': {}, \" any buffer variable (i.e. `let b:...`)\n \\   'win_opts': {}, \" any window scoped option\n \\   'win_vars': {}, \" any window variable (i.e `let w:...`)\n \\   'win_config': {}, \" any window config item (see `help nvim_win_get_config`)\n \\ }\n}\nlet g:vimade.link = {\n \\ 'rule_name': {\n \\   'buf_names': [], \" list of strings and/or functions to evaluate string comparison\n \\   'buf_opts': {}, \" any buffer scoped option (e.g. buftype)\n \\   'buf_vars': {}, \" any buffer variable (i.e. `let b:...`)\n \\   'win_opts': {}, \" any window scoped option\n \\   'win_vars': {}, \" any window variable (i.e `let w:...`)\n \\   'win_config': {}, \" any window config item (see `help nvim_win_get_config`)\n \\ }\n}\n```\n\nThe `rule_name` in the config above is arbitrary, but don't use **`default`** unless you want to override **Vimade**'s\ndefault settings.\n\nFor **lua** `defaults` are:\n```lua\n  blocklist = {\n    default = {\n      highlights = {\n        laststatus_3 = function(win, active)\n          if vim.go.laststatus == 3 then\n              return 'StatusLine'\n          end\n        end,\n        'TabLineSel',\n        'Pmenu',\n        'PmenuSel',\n        'PmenuKind',\n        'PmenuKindSel',\n        'PmenuExtra',\n        'PmenuExtraSel',\n        'PmenuSbar',\n        'PmenuThumb',\n      },\n      buf_opts = {buftype = {'prompt'}},\n    },\n    default_block_floats = function (win, active)\n      return win.win_config.relative ~= '' and\n        (win ~= active or win.buf_opts.buftype =='terminal') and true or false\n    end,\n  },\n\n```\n\nand **python**:\n```python\n'blocklist': {\n  'default': {\n    'buf_opts': {\n      'buftype': ['popup', 'prompt']\n    },\n    'win_config': {\n      'relative': True #block all floating windows # TODO we can make this more customized soon\n     },\n  }\n},\n```\n\nEach value for a property is a considered a value-matcher, you can use an *array-like* or exact value type.\n*Array-like* indicates that any value in the array is a match. Using boolean (true) indicates that any *truthy*\nvalue will match.\n\nLet's put this to the test and block all window variables with `'cool'` equal to `1` or `2`\n\n```vim\nlet w:cool = 2\nlet g:vimade.blocklist = {\n\\  'demo_tutorial': {\n\\    'win_vars': { 'cool': [1,2] },\n\\  }\n\\ }\n```\n\nNow when you navigate off the window, nothing happens.\n\n\nLet's replace the previous rule with a function that blocks everything except when a floating window is open:\n\n\u003csub\u003e::lua::\u003c/sub\u003e\n```lua\nrequire('vimade').setup({\n  blocklist = {\n    demo_tutorial = function (win, current)\n      -- current can be nil\n      if (win.win_config.relative == '') and (current and current.win_config.relative ~= '') then\n        return false\n      end\n      return true\n    end\n  }\n})\n```\n\n\u003csub\u003e::python::\u003c/sub\u003e\n```python\ndef only_behind_float_windows (win, current):\n  # current can be None\n  if (win.win_config['relative'] == '') and (current and current.win_config['relative'] != ''):\n    return False\n  return True\n\nvimade.setup(blocklist = {\n    'demo_tutorial': only_behind_float_windows,\n})\n```\n\nNow nothing is faded except when you open a floating window, voilà!\n\n![block_unless_floating](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/only_when_floating.png)\n\n\nFor a final step let's apply the same concepts to linking\n\n```vim\nlet w:linked_window = 1\nlet g:vimade.blocklist = {\n\\  'demo_tutorial': {\n\\    'win_vars': { 'linked_window': 1 },\n\\  }\n\\ }\n```\n\nNavigate to another window and also apply\n```\nlet w:linked_window = 1\n```\n\nThe windows are now bound together and will **style** and **unstyle** together. This is an extremely useful concept\nand **Vimade** uses it behind the scenes to ensure that diffs are visible in unison.\n\n---\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eStyle modifiers\u003c/ins\u003e\u003c/a\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\n**Styles** are the core functions that drive **Vimade**.  Each **style** decides how to manipulate the highlights based on their own input.\n**Styles** can be combined, nested, or transpose each other, the process itself is configurable and its up to you to decide how to use\nthem. This section is intended for advanced customizations or users who want to build their own recipes. You are also more than welcome to\nbuild your own style and add it into **Vimade**.\n\n  \u003cdetails\u003e\n  \u003csummary\u003e\n  \u003cins\u003eFade\u003c/ins\u003e\n  \n  Fades each window based on the `value` (also referred to as `fadelevel`). Colors are modified against the\n  background color.\n  \u003c/summary\u003e\n\n  \u003csub\u003e*::lua::*\u003c/sub\u003e\n  ```lua\n  local Fade = require('vimade.style.fade').Fade\n  vimade.setup{\n    style = {\n      Fade{value = 0.4}\n    }\n  }\n  ```\n  \u003csub\u003e*::python::*\u003c/sub\u003e\n  ```python\n  from vimade import vimade\n  from vimade.style.fade import Fade\n  vimade.setup(style = [\n    Fade(value = 0.4)\n  ])\n  ```\n  | option | values/type | default | description |\n  | -      | -           | -       | -           |\n  | `value` | `number` `function(style,state)=\u003enumber` | `nil` |  The target fadelevel. Value ranges from `0 to 1`, where `0` is completely faded and `1` is unfaded.\n  | `tick` | `function()=\u003evoid` | `nil` |  A function that is run once per frame. Useful if you need to do expensive pre-computation that shouldn't occur once per-window.\n\n  \u003c/details\u003e\n\n  \u003cdetails\u003e\n  \u003csummary\u003e\n  \u003cins\u003eTint\u003c/ins\u003e\n  \n  Tints each window based on `fg`, `bg`, and `sp` inputs.\n  \u003c/summary\u003e\n\n  \u003csub\u003e*::lua::*\u003c/sub\u003e\n  ```lua\n  local Tint = require('vimade.style.tint').Tint\n  vimade.setup{\n    style = {\n      Tint{\n        value = {\n          fg = {rgb = {0,0,0}, intensity = 0.5},\n          bg = {rgb = {0,0,0}, intensity = 0.5},\n          sp = {rgb = {0,0,0}, intensity = 0.5},\n        }\n      }\n    }\n  }\n  ```\n  \u003csub\u003e*::python::*\u003c/sub\u003e\n  ```python\n  from vimade import vimade\n  from vimade.style.tint import Tint\n  vimade.setup(style = [\n    Tint(value = {\n      'fg': { 'rgb': [0,0,0], 'intensity': 0.5 },\n      'bg': { 'rgb': [0,0,0], 'intensity': 0.5 },\n      'sp': { 'rgb': [0,0,0], 'intensity': 0.5 },\n    })\n  ])\n  ```\n  \n  | option | values/type | default | description |\n  | -      | -           | -       | -           |\n  | `value` | \u003cpre\u003e\u003csub\u003e`{fg:{rgb:[num,num,num],intensity:num},`\u003cbr\u003e` bg:{rgb:[num,num,num],intensity:num},`\u003c/sub\u003e\u003cbr\u003e\u003csub\u003e` sp:{rgb:[num,num,num],intensity:num}}`\u003c/sub\u003e\u003c/pre\u003e \u003csub\u003e`function(style,state)=any`\u003cbr\u003e*functions can be used for any part of the tint config object*\u003c/sub\u003e | `nil` |  The target tint colors. Intensity is the inverse of fadelevel. `1` is full intensity, while `0` is not applied.\n  | `tick` | `function()=\u003evoid` | `nil` |  A function that is run once per frame. Useful if you need to do expensive pre-computation that shouldn't occur once per-window.\n\n  \u003c/details\u003e\n\n  \u003cdetails\u003e\n  \u003csummary\u003e\n  \u003cins\u003eInvert\u003c/ins\u003e\n  \n  Invert the colors in each window by a percentage.\n  \u003c/summary\u003e\n\n  \u003csub\u003e*::lua::*\u003c/sub\u003e\n  ```lua\n  local Tint = require('vimade.style.invert').Invert\n  vimade.setup{\n    style = {\n      Invert{\n        value = {\n          fg = 0.5,\n          bg = 0.5,\n          sp = 0.5,\n        }\n        -- alternatively use\n        -- value = 0.5 (applies 0.5 to fg, bg, and sp)\n      }\n    }\n  }\n  ```\n  \u003csub\u003e*::python::*\u003c/sub\u003e\n  ```python\n  from vimade import vimade\n  from vimade.style.invert import Invert\n  vimade.setup(style = [\n    Invert(value = {\n      'fg': 0.5,\n      'bg': 0.5,\n      'sp': 0.5,\n      # alternatively use\n      # value = 0.5 (applies 0.5 to fg, bg, and sp)\n    })\n  ])\n  ```\n  \n  | option | values/type | default | description |\n  | -      | -           | -       | -           |\n  | `value` | \u003cpre\u003e\u003csub\u003e`number\\|{fg:number,bg:number,sp:number}`\u003c/sub\u003e\u003c/pre\u003e \u003csub\u003e`function(style,state)=any`\u003cbr\u003e*functions can be used for any part of the invert config object*\u003c/sub\u003e | `nil` |  The target inversion level. `1` is full inversion, while `0` is not applied.\n  | `tick` | `function()=\u003evoid` | `nil` |  A function that is run once per frame. Useful if you need to do expensive pre-computation that shouldn't occur once per-window.\n\n  \u003c/details\u003e\n\n  \u003cdetails\u003e\n  \u003csummary\u003e\n  \u003cins\u003eInclude\u003c/ins\u003e\n  \n  Runs nested style modifiers when the highlight is included in the `value`.\n  \u003c/summary\u003e\n\n  \u003csub\u003e*::lua::*\u003c/sub\u003e\n  ```lua\n  local Fade = require('vimade.style.fade').Fade\n  local Include = require('vimade.style.include').Include\n  vimade.setup{\n    style = {\n      Include{\n        value = ['WinSeparator', 'VertSplit', 'LineNr', 'LineNrAbove', 'LineNrBelow'],\n        style = {\n          Fade { value = 0.4 }\n        }\n      }\n    }\n  }\n  ```\n  \u003csub\u003e*::python::*\u003c/sub\u003e\n  ```python\n  from vimade import vimade\n  from vimade.style.fade import Fade\n  from vimade.style.include import Include\n  vimade.setup(style = [\n    Include(\n      value = ['Normal', 'Comment'],\n      style = [\n        Fade(value = 0.4)\n      ]\n    )\n  ])\n  ```\n  \n  | option | values/type | default | description |\n  | -      | -           | -       | -           |\n  | `value` | `string[]` | `nil` |  The list of highlight names that the nested styles will execute modifies on.\n  | `style` | `Style[]` | `nil` |  The list of styles that are run when highlights are included.\n  | `tick` | `function()=\u003evoid` | `nil` |  A function that is run once per frame. Useful if you need to do expensive pre-computation that shouldn't occur once per-window.\n\n  \u003c/details\u003e\n\n  \u003cdetails\u003e\n  \u003csummary\u003e\n  \u003cins\u003eExclude\u003c/ins\u003e\n  \n  Runs nested style modifiers when the highlight is **not** included in the `value`.\n  \u003c/summary\u003e\n\n  \u003csub\u003e*::lua::*\u003c/sub\u003e\n  ```lua\n  local Fade = require('vimade.style.fade').Fade\n  local Exclude = require('vimade.style.exclude').Exclude\n  vimade.setup{\n    style = {\n      Exclude{\n        value = ['WinSeparator', 'VertSplit', 'LineNr', 'LineNrAbove', 'LineNrBelow'],\n        style = {\n          Fade { value = 0.4 }\n        }\n      }\n    }\n  }\n  ```\n  \u003csub\u003e*::python::*\u003c/sub\u003e\n  ```python\n  from vimade import vimade\n  from vimade.style.fade import Fade\n  from vimade.style.exclude import Exclude\n  vimade.setup(style = [\n    Exclude(\n      value = ['Normal', 'Comment'],\n      style = [\n        Fade(value = 0.4)\n      ]\n    )\n  ])\n  ```\n  \n  | option | values/type | default | description |\n  | -      | -           | -       | -           |\n  | `value` | `string[]` | `nil` |  The list of highlight names that the nested styles will execute modifies on.\n  | `style` | `Style[]` | `nil` |  The list of styles that are run when highlights are included.\n  | `tick` | `function()=\u003evoid` | `nil` |  A function that is run once per frame. Useful if you need to do expensive pre-computation that shouldn't occur once per-window.\n\n  \u003c/details\u003e\n  \n  \u003cdetails open\u003e\n  \u003csummary\u003e\n  \u003cins\u003eCombining styles\u003c/ins\u003e\n  \n  This section is not ready yet!\n  \u003c/summary\u003e\n  \u003c/details\u003e\n\n---\n\u003c/details\u003e\n\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eAnimations\u003c/ins\u003e\u003c/a\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\nThe section below will look at using a custom animation value within a **style**, so please read the **style** section before proceeding!\n\n\nAnimations are functions that mutate values over time.  **Vimade** includes a number of helpers that alter the interpolation process. \n\n\u003e [!NOTE]\n\u003e Animations can only be added using **lua** or **python**. \n\n Let's look at an example:\n\n\u003csub\u003e::lua:: \n```lua\nlocal Fade = require('vimade.style.fade').Fade\nlocal animate = require('vimade.style.value.animate')\nrequire('vimade').setup{style = {\n  Fade {\n    value = animate.Number {\n      start = 1,\n      to = 0.2\n    }\n  }\n}}\n```\n\n\u003csub\u003e::python::\n```python\nfrom vimade import vimade\nfrom vimade.style import fade\nfrom vimade.style.value import animate\nvimade.setup(style = [\n  Fade(value = animate.Number(\n    start = 1,\n    to = 0.2,\n  )),\n])\n```\n\nThe example above uses `animate.Number` to fade inactive windows from no-fade `start = 1` to almost completely faded `to = 0.2`.\n\nThe animation can be further customized by overriding any of the default values:\n\n\u003csub\u003e::lua:: \n```lua\nlocal Fade = require('vimade.style.fade').Fade\nlocal direction = require('vimade.style.value.direction')\nlocal ease = require('vimade.style.value.ease')\nlocal animate = require('vimade.style.value.animate')\nrequire('vimade').setup{style = {\n  Fade {\n    value = animate.Number {\n      start = 1,\n      to = 0.2,\n      direction = direction.IN_OUT,\n      ease = ease.OUT_BOUNCE,\n      duration = 1000,\n      delay = 100,\n    }\n  }\n}}\n```\n\n\u003csub\u003e::python::\n```python\nfrom vimade import vimade\nfrom vimade.style import fade\nfrom vimade.style.value import animate\nfrom vimade style.value import direction\nfrom vimade style.value import ease\nvimade.setup(style = [\n  Fade(value = animate.Number(\n    start = 1,\n    to = 0.2,\n    direction = direction.IN_OUT,\n    ease = ease.OUT_BOUNCE,\n    duration = 1000,\n    delay = 100,\n  )),\n])\n```\n\nEvery value type can be animated included tints and nested values in complex objects.  See the recipe source for more examples.\n\n\n\n| option | values/type | default | description |\n| -      | -           | -       | -           |\n| `start` | `any` `function(style,state)=\u003eany` | `nil` |  The starting value that the animation begins at.  If `direction=IN_OUT`, then the starting value is only used one time when the value is uninitialized.\n| `to` | `any` `function(style,state)=\u003eany` | `nil` |  The ending value that the animation ends at. \n| `direction` | `IN` `OUT` `IN_OUT` | `OUT` |  These are specialized functions and **MUST** be used from the exported `vimade.style.value.direction` enum.  `OUT` is a outward animation, which should typically be associated with \"leaving\" something. `IN` is an inward animation that should be associated with \"entering\".  `IN_OUT` tracks the value and performs both `IN` and `OUT` behaviors.\n| `ease` | `LINEAR` `OUT_QUART` `IN_QUART` `IN_OUT_QUART` `IN_CUBIC` `OUT_CUBIC` ... | `OUT_QUART` |  These are functions and **can** be used from `vimade.style.value.ease`.  You can also use your own custom `function(time)=\u003epercent_time`.  Easing functions change the animation behavior by mutating `percent_time`.  See source for examples: [lua](https://github.com/TaDaa/vimade/blob/master/lua/vimade/style/value/ease.lua) \\| [python](https://github.com/TaDaa/vimade/blob/master/lib/vimade/style/value/ease.py).\n| `duration` | `number` `function(state,state)=\u003enumber`   | `300` |  The duration of the animation in milliseconds.\n| `delay` | `number` `function(style,state)=\u003enumber` | `0` |  How long to wait before starting the animation.\n\n\n\n---\n\u003c/details\u003e\n\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eRecipe: Default\u003c/ins\u003e\u003c/a\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\nEnabled by default, but you can re-apply this recipe with additional customizations (e.g. animations).\nYou can only enable **recipes** through a configuration overlay (**no vimscript**).\n\n*\u003csub\u003e::lua:: [source](https://github.com/TaDaa/vimade/tree/master/lua/vimade/recipe/default.lua) (see here for additional params)\u003c/sub\u003e*\n\n```lua\nrequire('vimade').setup({recipe = {'default', {animate = true}}})\n```\n\n\n*\u003csub\u003e::python:: [source](https://github.com/TaDaa/vimade/tree/master/lua/vimade/recipe/default.lua) (see here for additional params)\u003c/sub\u003e*\n```python\nfrom vimade import vimade\nvimade.setup(recipe = ['default', {'animate': True}])\n```\n\n![default_recipe](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/default_recipe_animate.gif)\n---\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eRecipe: Minimalist\u003c/ins\u003e\u003c/a\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\nThis recipe hides low value built-in highlights on inactive windows such as number column and end of buffer highlights.  Greatly reduces visibility of WinSeparator on inactive windows. \n\n*\u003csub\u003e::lua:: [source](https://github.com/TaDaa/vimade/tree/master/lua/vimade/recipe/minimalist.lua) (see here for additional params)\u003c/sub\u003e*\n\n```lua\nrequire('vimade').setup({recipe = {'minimalist', {animate = true}}})\n```\n\n*\u003csub\u003e::python:: [source](https://github.com/TaDaa/vimade/tree/master/lib/vimade/recipe/minimalist.py) (see here for additional params)\u003c/sub\u003e*\n\n\u003csub\u003eNOTE: For **vim** users with wincolor, minimalist will link the `no_visibility_highlights` to `Normal` so that they can completely fade-out per-window.\u003csub\u003e\n```python\nfrom vimade import vimade\nvimade.setup(recipe = ['minimalist', {'animate': True}])\n```\n\n![minimalist_recipe](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/minimalist_recipe_animate2.gif)\n---\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eRecipe: Duo\u003c/ins\u003e\u003c/a\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\nLooking for a balanced approach between *window* and *buffer* styles?  Duo applies full `fadelevel` and `tint` to inactive *buffers*\nand a fraction of the values to same-split *buffers*.\n\n*\u003csub\u003e::lua:: [source](https://github.com/TaDaa/vimade/tree/master/lua/vimade/recipe/duo.lua) (see here for additional params)\u003c/sub\u003e*\n\n```lua\nrequire('vimade').setup({recipe = {'duo', {animate = true}}})\n```\n\n*\u003csub\u003e::python:: [source](https://github.com/TaDaa/vimade/tree/master/lib/vimade/recipe/duo.py) (see here for additional params)\u003c/sub\u003e*\n\n```python\nfrom vimade import vimade\nvimade.setup(recipe = ['duo', {'animate': True}])\n```\n\n![duo_recipe](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/duo-reduced.gif)\n\nTo make it look exactly like the screenshot above, you will want to combine the recipe with some background tint:\n\n*\u003csub\u003e::lua::\u003c/sub\u003e*\n```lua\nrequire('vimade').setup({\n  recipe = {'duo', {animate = true}},\n  tint = {bg = {rgb={0,0,0}, intensity = 0.3}}\n})\n```\n\n*\u003csub\u003e::python::\u003c/sub\u003e*\n\n```python\nfrom vimade import vimade\nvimade.setup(\n  recipe = ['duo', {'animate': True}],\n  tint = {'bg': {'rgb':[0,0,0], 'intensity': 0.3}})\n```\n\n---\n\u003c/details\u003e\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eRecipe: Paradox\u003c/ins\u003e\u003c/a\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\nManipulate contrast to match your insanity. Paradox flips your colorscheme on its head and adds some inversion to the active window. This\nrecipe is mostly useful for improving contrast on some colorschemes.\n\n*\u003csub\u003e::lua:: [source](https://github.com/TaDaa/vimade/tree/master/lua/vimade/recipe/paradox.lua) (see here for additional params)\u003c/sub\u003e*\n\n```lua\nrequire('vimade').setup({recipe = {'paradox', {animate = true}}})\n```\n\n![paradox_recipe](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/paradox.gif)\n\nFor the truly insane (full inversion):\n\n*\u003csub\u003e::lua::\u003c/sub\u003e*\n```lua\nrequire('vimade').setup({\n  recipe = {'paradox', {\n      animate = true,\n      invert = {\n        start = 0,\n        to = 1,\n      }\n  }},\n})\n```\n\n** *Python support to follow*\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eRecipe: Ripple\u003c/ins\u003e\u003c/a\u003e\n\u003c/summary\u003e\n\n\u003cbr\u003e\n\nGradually increases the fade and tint level based on distance from the current window. The maximum target values are equal to your `fadelevel` and `tint` settings.\n\n\u003e [!NOTE]\n\u003e \n\u003e This recipe requires and enables fading by windows (`ncmode='windows'`)\n\n\n*\u003csub\u003e::lua:: [source](https://github.com/TaDaa/vimade/tree/master/lua/vimade/recipe/ripple.lua) (see here for additional params)\u003c/sub\u003e*\n\n```lua\nrequire('vimade').setup({recipe = {'ripple', {animate = true}}})\n```\n\n*\u003csub\u003e::python:: [source](https://github.com/TaDaa/vimade/tree/master/lib/vimade/recipe/ripple.py) (see here for additional params)\u003c/sub\u003e*\n\n```python\nfrom vimade import vimade\nvimade.setup(recipe = ['ripple', {'animate': True}])\n```\n\n![ripple_recipe](https://raw.githubusercontent.com/TaDaa/tadaa.github.io/refs/heads/master/images/ripple.gif)\n\n---\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eCommands\u003c/ins\u003e\u003c/a\u003e\n \n\u003c/summary\u003e\n\u003cbr\u003e\n\n| command |  description |\n| -       |  -           |\n| `VimadeEnable` |  Enables **Vimade**.  Not necessary to run unless you have explicitly disabled **Vimade**.\n| `VimadeDisable` |  Disable and remove all **Vimade** highlights.\n| `VimadeToggle` |  Toggle between enabled/disabled states.\n| `VimadeRedraw` |  Force vimade to recalculate and redraw every highlight.\n| `VimadeInfo` |  Provides debug information for Vimade.  Please include this info in bug reports.\n| `VimadeFocus` |  Neovim-only. Highlights around the cursor using your configured providers. This command has subcommands viewable via autocomplete. This is a toggle command.\n| `VimadeMark` |  Neovim-only. Mark an area that should not be highlighted in inactive windows. This command has subcommands viewable via autocomplete. This is a toggle command, selecting a range and using it marks the area.  If a mark is found within the range, it is removed.\n| `VimadeWinDisable` | Disables fading for the current window.\n| `VimadeWinEnable` | Enables fading for the current window.\n| `VimadeBufDisable` | Disables fading for the current buffer.\n| `VimadeBufEnable` | Enables fading for the current buffer.\n| `VimadeFadeActive` | Fades the current active window.\n| `VimadeUnfadeActive` | Unfades the current active window.\n| `VimadeOverrideFolded` | Overrides the Folded highlight by creating a link to the Vimade base fade.  This should produce acceptable results for colorschemes that include Folded highlights that are distracting in faded windows.\n| `VimadeOverrideSignColumn` | Overrides the SignColumn highlight by creating a link to the Vimade base fade.  This should produce acceptable results for colorschemes that include SignColumn highlights that are distracting in faded windows.\n| `VimadeOverrideLineNr` | Overrides the LineNr highlight by creating a link to the Vimade base fade.  This should produce acceptable results for colorschemes that include LineNr highlights that are distracting in faded windows.\n| `VimadeOverrideSplits` | Overrides the VertSplit highlight by creating a link to the Vimade base fade.  This should produce acceptable results for colorschemes that include VertSplit highlights that are distracting in faded windows.\n| `VimadeOverrideNonText` | Overrides the NonText highlight by creating a link to the Vimade base fade.  This should produce acceptable results for colorschemes that include NonText highlights that are distracting in faded windows.\n| `VimadeOverrideEndOfBuffer` | Overrides the EndOfBuffer highlight by creating a link to the Vimade base fade.  This should produce acceptable results for colorschemes that include EndOfBuffer highlights that are distracting in faded windows.\n| `VimadeOverrideAll` | Combines all VimadeOverride commands.\n| `VimadeFadeLevel [0.0-1.0]` |  Sets the FadeLevel config and forces an immediate redraw.\n| `VimadeFadePriority [0+]` |  Sets the FadePriority config and forces an immediate redraw.\n\n  \n---\n\u003c/details\u003e\n\n\n\u003cdetails open\u003e\n\u003csummary\u003e\n\u003ca\u003e\u003cins\u003eFAQ/Help\u003c/ins\u003e\u003c/a\u003e\n\n\u003c/summary\u003e\n\u003cbr\u003e\n\nTmux is not working!\n- *Vimade only works in a 256 or higher color mode and by default TMUX may set t_Co to 8.   it is recommended that you set `export TERM=xterm-256color` before starting vim.  You can also set `set termguicolors` inside vim if your term supports it for an even more accurate level of fading.*\n- If you also want windows to fade when switching between tmux panes:\n  1. Enable focusfading `let g:vimade.enablefocusfading = 1`\n  2. Add `set -g focus-events on` to your tmux.conf\n  3. (vim-only) On some environments, you still may need to install `tmux-plugins/vim-tmux-focus-events`.\n\n\n---\n\n\u003c/details\u003e\n\n\u003cbr\u003e\n\n## Comparison against other plugins\n \nMany similar **Neovim** plugins have recently been created. \nI'm not aware of any feature that these plugins support that **Vimade** doesn't, so I'm going to keep this table limited to key differences.\nIf you find a feature gap, please file an issue or contribute!\n\n| Feature                                       | Vimade | Shade | Tint         | Sunglasses |\n| -                                             | -      | -     | -            | -          |\n| Fade buffers                                  | Yes    |       |              |            |\n| Fade windows                                  | Yes    | Yes   | Yes          | Yes        |\n| Group diffs                                   | Yes    |       | via function |            |\n| Links                                         | Yes    |       | via function |            |\n| Blocklist                                     | Yes    |       | via function | Yes        |\n| Animations                                    | Yes    |       |              |            |\n| Recipes                                       | Yes    |       |              |            |\n| 256 colors                                    | Yes    |       |              |            |\n| Per-window config (e.g. fadelevel, tint, etc) | Yes    |       |              |            |\n| Cleared highlights                            | Yes    | Yes   |              |            |\n| Compatible with other namespaces              | Yes    | Yes   |              |            |\n| Supports **Vim** + All versions of **Neovim** | Yes    |       |              |            |\n\n#### Related plugins to `:VimadeFocus` and `:VimadeMark`:\n\n- [limelight](https://github.com/junegunn/limelight.vim)\n- [snacks.nvim](https://github.com/folke/snacks.nvim/blob/main/docs/dim.md)\n- [twilight.nvim](https://github.com/folke/twilight.nvim)\n- [focushere.nvim](https://github.com/kelvinauta/focushere.nvim)\n\n## Contributing\n\nFeel free to open a PR or file issues for bugs and feature requests. All contributions are valued even its just a question!\nIf you are looking for a place to share your own code and flavor in this plugin, **recipes** are a great starting place.\n\n**Thanks for reading!**\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftadaa%2Fvimade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftadaa%2Fvimade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftadaa%2Fvimade/lists"}