sainnhe / sonokai

High Contrast & Vivid Color Scheme based on Monokai Pro
MIT License
1.65k stars 119 forks source link

Unreadable text in output of `:map` command, especially with folke/noice.nvim #104

Closed Geobert closed 3 months ago

Geobert commented 3 months ago

I have done the following steps before reporting this issue:

Operating system/version

Win 11

GUI client/version

neovide 0.13.1

Feature matrix


==============================================================================
conform: require("conform.health").check()

conform.nvim report ~
- Log file: C:\Users\Geob\AppData\Local\nvim-data\conform.log
- WARNING fish_indent unavailable: Command not found
- WARNING markdown-toc unavailable: Command not found
- WARNING markdownlint-cli2 unavailable: Command not found
- WARNING prettier unavailable: Command not found
- OK rustfmt ready (rust)
- OK shfmt ready (sh)
- OK stylua ready (lua)

==============================================================================
crates: require("crates.health").check()

Checking plugins ~
- null-ls.nvim not found

Checking external dependencies ~
- OK curl installed
- WARNING none of the following are installed xdg-open open

==============================================================================
lazy: require("lazy.health").check()

lazy.nvim ~
- {lazy.nvim} version `11.10.1`
- OK {git} `version 2.45.2.windows.1`
- OK no existing packages found by other package managers
- OK packer_compiled.lua not found

luarocks ~
- checking `hererocks` installation
- OK no plugins require `luarocks`, so you can ignore any warnings below
- OK {python} `Python 3.12.1`
- ERROR {C:/Users/Geob/AppData/Local/nvim-data/lazy-rocks/hererocks/bin/luarocks} not installed
- WARNING {C:/Users/Geob/AppData/Local/nvim-data/lazy-rocks/hererocks/bin/lua} version `5.1` not installed
- WARNING Lazy won't be able to install plugins that require `luarocks`.
  Here's what you can do:
   - fix your `luarocks` installation
   - disable *hererocks* with `opts.rocks.hererocks = false`
   - disable `luarocks` support completely with `opts.rocks.enabled = false`

==============================================================================
lazyvim: require("lazyvim.health").check()

LazyVim ~
- OK Using Neovim >= 0.9.0
- OK `git` is installed
- OK `rg` is installed
- OK `fd` is installed
- OK `lazygit` is installed

==============================================================================
mason: require("mason.health").check()

mason.nvim ~
- OK mason.nvim version v1.10.0
- OK PATH: prepend
- OK Providers: 
    mason.providers.registry-api
    mason.providers.client
- OK neovim version >= 0.7.0

mason.nvim [Registries] ~
- OK Registry `github.com/mason-org/mason-registry version: 2024-07-05-bubbly-ant` is installed.

mason.nvim [Core utils] ~
- WARNING unzip: not available
  - ADVICE:
    - spawn: unzip failed with exit code 1 and signal 0. BusyBox v1.37.0.git-5301-gda71f7c57 (2024-04-08 13:48:47 UTC)

      Usage: unzip [-lnojpqK] FILE[.zip] [FILE]... [-x FILE]... [-d DIR]

      Extract FILEs from ZIP archive

        -l  List contents (with -q for short form)
        -n  Never overwrite files (default: ask)
        -o  Overwrite
        -j  Do not restore paths
        -p  Write to stdout
        -t  Test
        -q  Quiet
        -K  Do not clear SUID bit
        -x FILE Exclude FILEs
        -d DIR  Extract into DIR

- OK wget: `GNU Wget 1.21.4 built on mingw32.
`
- OK curl: `curl 8.7.1 (Windows) libcurl/8.7.1 Schannel zlib/1.3 WinIDN
`
- WARNING gzip: not available
  - ADVICE:
    - spawn: gzip failed with exit code 1 and signal 0. BusyBox v1.37.0.git-5301-gda71f7c57 (2024-04-08 13:48:47 UTC)

      Usage: gzip [-cfkdt123456789] [FILE]...

      Compress FILEs (or stdin)

        -1..9   Compression level
        -d  Decompress
        -c  Write to stdout
        -f  Force
        -k  Keep input files
        -t  Test integrity
      gzip: unknown option -- version

- OK tar: `bsdtar 3.6.2 - libarchive 3.6.2 zlib/1.2.5.f-ipp liblzma/5.2.5 bz2lib/1.0.8 libzstd/1.5.4 
`
- OK pwsh: `7.4.2 Microsoft Windows 10.0.22631 Win32NT
`
- OK 7z: `7-Zip 24.07 (x64) : Copyright (c) 1999-2024 Igor Pavlov : 2024-06-19
`

mason.nvim [Languages] ~
- WARNING Go: not available
  - ADVICE:
    - spawn: go failed with exit code - and signal -. go is not executable
- WARNING Composer: not available
  - ADVICE:
    - spawn: composer.bat failed with exit code - and signal -. composer.bat is not executable
- WARNING PHP: not available
  - ADVICE:
    - spawn: php failed with exit code - and signal -. php is not executable
- WARNING npm: not available
  - ADVICE:
    - spawn: npm.cmd failed with exit code - and signal -. npm.cmd is not executable
- WARNING node: not available
  - ADVICE:
    - spawn: node failed with exit code - and signal -. node is not executable
- WARNING luarocks: not available
  - ADVICE:
    - spawn: luarocks failed with exit code - and signal -. luarocks is not executable
- WARNING Ruby: not available
  - ADVICE:
    - spawn: ruby failed with exit code - and signal -. ruby is not executable
- WARNING julia: not available
  - ADVICE:
    - spawn: julia failed with exit code - and signal -. julia is not executable
- WARNING RubyGem: not available
  - ADVICE:
    - spawn: gem.cmd failed with exit code - and signal -. gem.cmd is not executable
- OK python: `Python 3.12.1
`
- OK cargo: `cargo 1.79.0 (ffa9cf99a 2024-06-03)`
- OK java: `openjdk version "17.0.8.1" 2023-08-24
`
- OK JAVA_HOME: `openjdk version "17.0.8.1" 2023-08-24
`
- OK javac: `javac 17.0.8.1
`
- OK pip: `pip 24.0 from C:\Users\Geob\AppData\Local\Programs\Python\Python312\Lib\site-packages\pip (python 3.12)

`
- OK python venv: `Ok`

mason.nvim [GitHub] ~
- OK GitHub API rate limit. Used: 0. Remaining: 60. Limit: 60. Reset: 05/07/2024 20:09:51.
  Install and authenticate via gh-cli to increase rate limit.

==============================================================================
noice: require("noice.health").check()

noice.nvim ~
- OK **Neovim** >= 0.9.0
- OK You're using a GUI that should work ok
- OK **vim.go.lazyredraw** is not enabled
- OK **nvim-notify** is installed
- OK **TreeSitter vim** parser is installed
- OK **TreeSitter regex** parser is installed
- OK **TreeSitter lua** parser is installed
- OK **TreeSitter bash** parser is installed
- OK **TreeSitter markdown** parser is installed
- OK **TreeSitter markdown_inline** parser is installed
- OK `vim.notify` is set to **Noice**
- OK `vim.lsp.handlers["textDocument/hover"]` is set to **Noice**
- OK `vim.lsp.handlers["textDocument/signatureHelp"]` is set to **Noice**
- OK `vim.lsp.handlers["window/showMessage"]` is set to **Noice**
- OK `vim.lsp.util.convert_input_to_markdown_lines` is set to **Noice**
- OK `vim.lsp.util.stylize_markdown` is set to **Noice**
- OK `cmp.entry.get_documentation` is set to **Noice**

==============================================================================
nvim: require("nvim.health").check()

Configuration ~
- OK no issues found

Runtime ~
- OK $VIMRUNTIME: C:\Users\Geob\scoop\apps\neovim\current\share/nvim/runtime

Performance ~
- OK Build type: Release

Remote Plugins ~
- OK Up to date

External Tools ~
- OK ripgrep 14.1.0 (rev e50df40a19) (C:\Users\Geob\scoop\shims\rg.EXE)

==============================================================================
nvim-treesitter: require("nvim-treesitter.health").check()

Installation ~
- OK `tree-sitter` found 0.22.6 (b40f342067a89cd6331bf4c27407588320f3c263) (parser generator, only needed for :TSInstallFromGrammar)
- WARNING `node` executable not found (only needed for :TSInstallFromGrammar, not required for :TSInstall)
- OK `git` executable found.
- OK `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
  Version: cc (GCC) 13.2.0
- OK Neovim was compiled with tree-sitter runtime ABI version 14 (required >=13). Parsers must be compatible with runtime ABI.

OS Info:
{
  machine = "x86_64",
  release = "10.0.22631",
  sysname = "Windows_NT",
  version = "Windows 11 Pro"
} ~

Parser/Features         H L F I J
  - bash                ✓ ✓ ✓ . ✓
  - c                   ✓ ✓ ✓ ✓ ✓
  - diff                ✓ . . . ✓
  - html                ✓ ✓ ✓ ✓ ✓
  - javascript          ✓ ✓ ✓ ✓ ✓
  - jsdoc               ✓ . . . .
  - json                ✓ ✓ ✓ ✓ .
  - jsonc               ✓ ✓ ✓ ✓ ✓
  - lua                 ✓ ✓ ✓ ✓ ✓
  - luadoc              ✓ . . . .
  - luap                ✓ . . . .
  - markdown            ✓ . ✓ ✓ ✓
  - markdown_inline     ✓ . . . ✓
  - printf              ✓ . . . .
  - python              ✓ ✓ ✓ ✓ ✓
  - query               ✓ ✓ ✓ ✓ ✓
  - regex               ✓ . . . .
  - ron                 ✓ ✓ ✓ ✓ ✓
  - rust                ✓ ✓ ✓ ✓ ✓
  - toml                ✓ ✓ ✓ ✓ ✓
  - tsx                 ✓ ✓ ✓ ✓ ✓
  - typescript          ✓ ✓ ✓ ✓ ✓
  - vim                 ✓ ✓ ✓ . ✓
  - vimdoc              ✓ . . . ✓
  - xml                 ✓ ✓ ✓ ✓ ✓
  - yaml                ✓ ✓ ✓ ✓ ✓

  Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections
         +) multiple parsers found, only one will be used
         x) errors found in the query, try to run :TSUpdate {lang} ~

==============================================================================
provider.clipboard: require("provider.clipboard.health").check()

Clipboard (optional) ~
- OK Clipboard tool found: win32yank

==============================================================================
provider.node: require("provider.node.health").check()

Node.js provider (optional) ~
- WARNING `node` and `npm` (or `yarn`, `pnpm`) must be in $PATH.
  - ADVICE:
    - Install Node.js and verify that `node` and `npm` (or `yarn`, `pnpm`) commands work.

==============================================================================
provider.perl: require("provider.perl.health").check()

Perl provider (optional) ~
- WARNING No perl executable found
  - ADVICE:
    - See :help |provider-perl| for more information.
    - You may disable this provider (and warning) by adding `let g:loaded_perl_provider = 0` to your init.vim
- WARNING No usable perl executable found

==============================================================================
provider.python: require("provider.python.health").check()

Python 3 provider (optional) ~
- WARNING No Python executable found that can `import neovim`. Using the first available executable for diagnostics.
- WARNING Could not load Python :
  python3 not found in search path or not executable.
  python3.12 not found in search path or not executable.
  python3.11 not found in search path or not executable.
  python3.10 not found in search path or not executable.
  python3.9 not found in search path or not executable.
  python3.8 not found in search path or not executable.
  python3.7 not found in search path or not executable.
  C:\Users\Geob\AppData\Local\Programs\Python\Python312\python.EXE does not have the "neovim" module.
  - ADVICE:
    - See :help |provider-python| for more information.
    - You may disable this provider (and warning) by adding `let g:loaded_python3_provider = 0` to your init.vim
- Executable: Not found

Python virtualenv ~
- OK no $VIRTUAL_ENV

==============================================================================
provider.ruby: require("provider.ruby.health").check()

Ruby provider (optional) ~
- WARNING `ruby` and `gem` must be in $PATH.
  - ADVICE:
    - Install Ruby and verify that `ruby` and `gem` commands work.

==============================================================================
rainbow-delimiters: require("rainbow-delimiters.health").check()

Custom highlight groups ~
- OK Highlight group 'indent_level_1' defined.
- OK Highlight group 'indent_level_2' defined.
- OK Highlight group 'indent_level_3' defined.
- OK Highlight group 'indent_level_4' defined.
- OK Highlight group 'indent_level_5' defined.
- OK Highlight group 'indent_level_6' defined.

==============================================================================
telescope: require("telescope.health").check()

Checking for required plugins ~
- OK plenary installed.
- OK nvim-treesitter installed.

Checking external dependencies ~
- OK rg: found ripgrep 14.1.0 (rev e50df40a19)
- OK fd: found fd 9.0.0

===== Installed extensions ===== ~

Telescope Extension: `fzf` ~
- OK lib working as expected
- OK file_sorter correctly configured
- OK generic_sorter correctly configured

Telescope Extension: `notify` ~
- No healthcheck provided

==============================================================================
vim.lsp: require("vim.lsp.health").check()

- LSP log level : WARN
- Log path: C:\Users\Geob\AppData\Local\nvim-data/lsp.log
- Log size: 8 KB

vim.lsp: Active Clients ~
- lua_ls (id=1, root_dir=~\AppData\Local\nvim, attached_to=[6])

vim.lsp: File watcher ~
- file watching "(workspace/didChangeWatchedFiles)" disabled on all clients

==============================================================================
vim.treesitter: require("vim.treesitter.health").check()

- Nvim runtime ABI version: 14
- OK Parser: bash                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\bash.so
- OK Parser: c                    ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\c.so
- OK Parser: diff                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\diff.so
- OK Parser: html                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\html.so
- OK Parser: javascript           ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\javascript.so
- OK Parser: jsdoc                ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\jsdoc.so
- OK Parser: json                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\json.so
- OK Parser: jsonc                ABI: 13, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\jsonc.so
- OK Parser: lua                  ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\lua.so
- OK Parser: luadoc               ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\luadoc.so
- OK Parser: luap                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\luap.so
- OK Parser: markdown             ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\markdown.so
- OK Parser: markdown_inline      ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\markdown_inline.so
- OK Parser: printf               ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\printf.so
- OK Parser: python               ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\python.so
- OK Parser: query                ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\query.so
- OK Parser: regex                ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\regex.so
- OK Parser: ron                  ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\ron.so
- OK Parser: rust                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\rust.so
- OK Parser: toml                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\toml.so
- OK Parser: tsx                  ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\tsx.so
- OK Parser: typescript           ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\typescript.so
- OK Parser: vim                  ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\vim.so
- OK Parser: vimdoc               ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\vimdoc.so
- OK Parser: xml                  ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\xml.so
- OK Parser: yaml                 ABI: 14, path: C:\Users\Geob\AppData\Local\nvim-data\lazy\nvim-treesitter\parser\yaml.so
- OK Parser: bash                 ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\bash.dll
- OK Parser: c                    ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\c.dll
- OK Parser: lua                  ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\lua.dll
- OK Parser: markdown             ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\markdown.dll
- OK Parser: markdown_inline      ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\markdown_inline.dll
- OK Parser: python               ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\python.dll
- OK Parser: query                ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\query.dll
- OK Parser: vim                  ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\vim.dll
- OK Parser: vimdoc               ABI: 14, path: C:\Users\Geob\scoop\apps\neovim\current\lib\nvim\parser\vimdoc.dll

==============================================================================
which-key: require("which-key.health").check()

WhichKey: checking conflicting keymaps ~
- WARNING conflicting keymap exists for mode **"n"**, lhs: **" l"**
- rhs: `<Cmd>Lazy<CR>`
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"gc"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"s"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"sd"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"sh"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"sF"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"sr"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"n"**, lhs: **"sf"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"v"**, lhs: **"i"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"v"**, lhs: **"in"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"v"**, lhs: **"il"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"v"**, lhs: **"a"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"v"**, lhs: **"an"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"v"**, lhs: **"al"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"v"**, lhs: **"s"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"o"**, lhs: **"i"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"o"**, lhs: **"in"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"o"**, lhs: **"il"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"o"**, lhs: **"a"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"o"**, lhs: **"an"**
- rhs: ` `
- WARNING conflicting keymap exists for mode **"o"**, lhs: **"al"**
- rhs: ` `

2

Minimal vimrc that can reproduce this bug.

Use LazyVim defaults, then add sonokai, atlantis version

Steps to reproduce this bug using minimal vimrc

Using defaults keymaps

some text are not readable because of using bg4

Expected behavior

a readable color

Actual behavior

neovide_27yLLZ2DXu

antoineco commented 3 months ago

Thanks for reporting 👍

The faulty highlight group is SpecialKey, which is documented^1 as follows:

                            *hl-SpecialKey*
SpecialKey  Unprintable characters: Text displayed differently from what
        it really is. But not 'listchars' whitespace. |hl-Whitespace|

Neovim's default colorscheme uses a fairly dark color as well for this highlight group (see below), but I agree that Sonokai's foreground color is way too dark.

Neovim default colorscheme

Here is the code location, for reference: https://github.com/sainnhe/sonokai/blob/16fa31a4/colors/sonokai.vim#L100

antoineco commented 3 months ago

I'm not yet sure what to do with this. The fact that noice.nvim shows this output in a pop-up window (lighter background by default in Sonokai) makes the text even more difficult to read. We could improve that particular output by assigning SpecialKey the same foreground color as Conceal, but:

If you are using noice.nvim extensively, I suggest setting vim.g.sonokai_float_style = 'dim' inside your configuration. This will ensure that pop-up windows have a darker background than the normal window, instead of lighter. This alone will already improve the legibility of this particular text.

In case this is not enough, we could maybe consider using a different color than a shade of grey for SpecialKey, but I first need to do a little research to understand what the other usages of this highlight group are in the wild.

Geobert commented 3 months ago

Thanks for looking into this! :)

With dim: neovide_w9jeVLT1kH

Slightly better but I’m afraid we need to do better :-/

antoineco commented 3 months ago

How can I reproduce the output above? If this is still the output of cmd('last'), what was the last command?

Geobert commented 3 months ago

It was LazyVim notifying available update for plugins. otherwise a map will output problematic colors

antoineco commented 3 months ago

I was asking because I am not convinced that SpecialKey is being used in the LazyVim plugins output above, other similar highlight groups include NonText and Conceal. Noice.nvim adds a level of indirection which makes it difficult to know what core highlight is being used without inspecting the same output outside of noice's pop-ups.

antoineco commented 3 months ago

It seems like the output above uses Conceal to highlight notify.info. Here is Sonokai compared with Neovim's default colorscheme:

lazydimmed lazydimmed_default

While I agree that the contrast is low in Sonokai for concealed text due to the colorscheme's lighter background, this was a conscious design decision, because we do want non-text to be dimmed in the colorscheme (some synonyms of "conceal" are "hide", "mask"). The documented usage for these special highlights applies to specific characters (placeholders, substituted for hidden text); using these to highlight entire chunks of texts is a misuse.

Likewise, if LazyVim deliberately uses Conceal to highlight certain parts of notifications, it is precisely because the author meant for that text to be concealed. If it's not what they meant, the highlight should be changed from Conceal to something more appropriate. Given how configurable LazyVim is, I would be surprised if there wasn't a way to override this in the notification subsystem.


While we are most likely not going to touch Conceal and NonText in Sonokai, I think it would be reasonable to lighten SpecialKey. The only usages of SpecialKey I can think of besides :map are newline characters printed while opening a DOS file in the Unix file format. We do want these to stand out to some extent. Here is Sonokai side-by-side with another colorscheme:

specialkey specialkey_yellow

My proposal is to highlight SpecialKey using Sonokai's purple color instead of bg4. It think it fits very well with the rest of the colorscheme, and makes a few outputs much more readable than they currently are:

specialkey_purple1 specialkey_purple2

@sainnhe do you have anything against that change? Maybe you can think of a usage of SpecialKey where text should preferably stay dimmed?

antoineco commented 3 months ago

The change is now on master. Please feel free to report any possible glitch resulting from making SpecialKey purple. Thank you for your patience!