Mercurial > vim
changeset 34602:c7680d286e1f
runtime(colors): don't unnecessarily reload v:colornames dict
Commit: https://github.com/vim/vim/commit/6d1d18084b7b04ab7fd73331ce59e99b6dd9ad72
Author: Alin Mr <almr.oss@outlook.com>
Date: Wed Mar 20 20:26:23 2024 +0100
runtime(colors): don't unnecessarily reload v:colornames dict
fixes: https://github.com/vim/vim/issues/14234
closes: https://github.com/vim/vim/issues/14235
Signed-off-by: Alin Mr <almr.oss@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 20 Mar 2024 20:30:08 +0100 |
parents | dffe81a622a6 |
children | 02fbe0bd9418 |
files | runtime/colors/lists/default.vim runtime/doc/eval.txt |
diffstat | 2 files changed, 41 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/colors/lists/default.vim +++ b/runtime/colors/lists/default.vim @@ -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
--- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -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 c 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