runtime(colors): don't unnecessarily reload v:colornames dict

fixes: #14234
closes: #14235

Signed-off-by: Alin Mr <almr.oss@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Alin Mr
2024-03-20 20:26:23 +01:00
committed by Christian Brabandt
parent 978178823b
commit 6d1d18084b
2 changed files with 41 additions and 14 deletions

View File

@ -1,5 +1,5 @@
" Maintainer: Drew Vogel <dvogel@sidejump.org>
" Last Change: 2023 Apr 19
" Last Change: 2024 Mar 20
"
" Replaced rgb.txt as the source of de facto standard color names. This is
" sourced each time the colorscheme command is run. It is also sourced each
@ -13,7 +13,38 @@
let s:keepcpo = &cpo
set cpo&vim
call extend(v:colornames, {
function! s:Cleanup()
let &cpo = s:keepcpo
unlet s:keepcpo
endfunction
function! s:AddColors(cnames) abort
call extend(v:colornames, a:cnames, 'keep')
" all keys should be in lower case, convert keys that are not yet
let len_after = len(v:colornames)
if len_after == len(a:cnames)
" after extend(): v:colornames has all the keys of default_cnames
" checked: v:colornames also has no extra keys
" => keys are the same, and keys(default_cnames) are known to be ok
return
endif
for [key, val] in items(filter(copy(v:colornames), { key -> key =~ '\u'}))
call remove(v:colornames, key)
if !has_key(v:colornames, tolower(key))
call extend(v:colornames, {tolower(key): val}, 'keep')
endif
endfor
endfunction
if exists('s:default_cnames')
call s:AddColors(s:default_cnames)
call s:Cleanup()
finish
endif
let s:default_cnames = {
\ 'snow': '#fffafa',
\ 'ghost white': '#f8f8ff',
\ 'ghostwhite': '#f8f8ff',
@ -802,17 +833,9 @@ call extend(v:colornames, {
\ 'rebeccapurple': '#663399',
\ 'silver': '#c0c0c0',
\ 'teal': '#008080'
\ }, 'keep')
\ }
" all keys should be in lower case, convert keys that are not yet
for [key, val] in items(filter(copy(v:colornames), { key -> key =~ '\u'}))
call remove(v:colornames, key)
if !has_key(v:colornames, tolower(key))
call extend(v:colornames, {tolower(key): val}, 'keep')
endif
endfor
let &cpo = s:keepcpo
unlet s:keepcpo
call s:AddColors(s:default_cnames)
call s:Cleanup()
"vim: sw=4