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

View File

@ -1,4 +1,4 @@
*eval.txt* For Vim version 9.1. Last change: 2024 Feb 08
*eval.txt* For Vim version 9.1. Last change: 2024 Mar 20
VIM REFERENCE MANUAL by Bram Moolenaar
@ -2076,6 +2076,10 @@ v:colornames A dictionary that maps color names to hex color strings. These
both automatically load all `colors/lists/default.vim` color
scripts.
You can make changes to that file, but make sure to add new
keys instead of updating existing ones, otherwise Vim will skip
loading the file (thinking is hasn't been changed).
*v:completed_item* *completed_item-variable*
v:completed_item
|Dictionary| containing the |complete-items| for the most