forked from aniani/vim
patch 8.2.3590: test for v:colornames sometimes fails
Problem: Test for v:colornames sometimes fails. (Dominique Pellé) Solution: Check features. Clear v:colornames between tests. (Drew Vogel, closes #9105, closes #9073)
This commit is contained in:
committed by
Bram Moolenaar
parent
5300be620c
commit
a0fca17251
@@ -1871,7 +1871,7 @@ v:colornames A dictionary that maps color names to hex color strings. These
|
|||||||
by setting it in their |.vimrc|.
|
by setting it in their |.vimrc|.
|
||||||
|
|
||||||
It is possible to remove entries from this dictionary but
|
It is possible to remove entries from this dictionary but
|
||||||
doing so is *NOT* recommended. Doing so is disruptive to
|
doing so is NOT recommended, because it is disruptive to
|
||||||
other scripts. It is also unlikely to achieve the desired
|
other scripts. It is also unlikely to achieve the desired
|
||||||
result because the |:colorscheme| and |:highlight| commands will
|
result because the |:colorscheme| and |:highlight| commands will
|
||||||
both automatically load all `colors/lists/default.vim` color
|
both automatically load all `colors/lists/default.vim` color
|
||||||
|
@@ -2332,39 +2332,6 @@ colorname2rgb(char_u *name)
|
|||||||
return INVALCOLOR;
|
return INVALCOLOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Maps the given name to the given color value, overwriting any current
|
|
||||||
// mapping. If allocation fails the named color will no longer exist in the
|
|
||||||
// table and the user will receive an error message.
|
|
||||||
void
|
|
||||||
save_colorname_hexstr(int r, int g, int b, char_u *name)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
dict_T *colornames_table;
|
|
||||||
dictitem_T *existing;
|
|
||||||
char_u hexstr[8];
|
|
||||||
|
|
||||||
if (vim_snprintf((char *)hexstr, sizeof(hexstr),
|
|
||||||
"#%02x%02x%02x", r, g, b) < 0)
|
|
||||||
{
|
|
||||||
semsg(_(e_cannot_allocate_color_str), name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
colornames_table = get_vim_var_dict(VV_COLORNAMES);
|
|
||||||
// The colornames_table dict is safe to use here because it is allocated at
|
|
||||||
// startup in evalvars.c
|
|
||||||
existing = dict_find(colornames_table, name, -1);
|
|
||||||
if (existing != NULL)
|
|
||||||
{
|
|
||||||
dictitem_remove(colornames_table, existing);
|
|
||||||
existing = NULL; // dictitem_remove freed the item
|
|
||||||
}
|
|
||||||
|
|
||||||
result = dict_add_string(colornames_table, (char *)name, hexstr);
|
|
||||||
if (result == FAIL)
|
|
||||||
semsg(_(e_cannot_allocate_color_str), name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Load a default color list. Intended to support legacy color names but allows
|
* Load a default color list. Intended to support legacy color names but allows
|
||||||
* the user to override the color values. Only loaded once.
|
* the user to override the color values. Only loaded once.
|
||||||
|
@@ -16,7 +16,6 @@ void hl_set_fg_color_name(char_u *name);
|
|||||||
guicolor_T color_name2handle(char_u *name);
|
guicolor_T color_name2handle(char_u *name);
|
||||||
guicolor_T decode_hex_color(char_u *hex);
|
guicolor_T decode_hex_color(char_u *hex);
|
||||||
guicolor_T colorname2rgb(char_u *name);
|
guicolor_T colorname2rgb(char_u *name);
|
||||||
void save_colorname_hexstr(int r, int g, int b, char_u *name);
|
|
||||||
void load_default_colors_lists(void);
|
void load_default_colors_lists(void);
|
||||||
guicolor_T gui_get_color_cmn(char_u *name);
|
guicolor_T gui_get_color_cmn(char_u *name);
|
||||||
guicolor_T gui_get_rgb_color_cmn(int r, int g, int b);
|
guicolor_T gui_get_rgb_color_cmn(int r, int g, int b);
|
||||||
|
@@ -6,6 +6,12 @@ source check.vim
|
|||||||
source script_util.vim
|
source script_util.vim
|
||||||
source vim9.vim
|
source vim9.vim
|
||||||
|
|
||||||
|
func ClearDict(d)
|
||||||
|
for k in keys(a:d)
|
||||||
|
call remove(a:d, k)
|
||||||
|
endfor
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_highlight()
|
func Test_highlight()
|
||||||
" basic test if ":highlight" doesn't crash
|
" basic test if ":highlight" doesn't crash
|
||||||
highlight
|
highlight
|
||||||
@@ -936,19 +942,30 @@ func Test_highlight_default_colorscheme_restores_links()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_colornames_assignment_and_lookup()
|
func Test_colornames_assignment_and_lookup()
|
||||||
|
CheckAnyOf Feature:gui_running Feature:termguicolors
|
||||||
|
|
||||||
" Ensure highlight command can find custom color.
|
" Ensure highlight command can find custom color.
|
||||||
let v:colornames['a redish white'] = '#ffeedd'
|
let v:colornames['a redish white'] = '#ffeedd'
|
||||||
highlight Normal guifg='a redish white'
|
highlight Normal guifg='a redish white'
|
||||||
highlight clear
|
highlight clear
|
||||||
|
call ClearDict(v:colornames)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_colornames_default_list()
|
func Test_colornames_default_list()
|
||||||
|
CheckAnyOf Feature:gui_running Feature:termguicolors
|
||||||
|
|
||||||
" Ensure default lists are loaded automatically and can be used for all gui fields.
|
" Ensure default lists are loaded automatically and can be used for all gui fields.
|
||||||
|
call assert_equal(0, len(v:colornames))
|
||||||
highlight Normal guifg='rebecca purple' guibg='rebecca purple' guisp='rebecca purple'
|
highlight Normal guifg='rebecca purple' guibg='rebecca purple' guisp='rebecca purple'
|
||||||
|
call assert_notequal(0, len(v:colornames))
|
||||||
|
echo v:colornames['rebecca purple']
|
||||||
highlight clear
|
highlight clear
|
||||||
|
call ClearDict(v:colornames)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_colornames_overwrite_default()
|
func Test_colornames_overwrite_default()
|
||||||
|
CheckAnyOf Feature:gui_running Feature:termguicolors
|
||||||
|
|
||||||
" Ensure entries in v:colornames can be overwritten.
|
" Ensure entries in v:colornames can be overwritten.
|
||||||
" Load default color scheme to trigger default color list loading.
|
" Load default color scheme to trigger default color list loading.
|
||||||
colorscheme default
|
colorscheme default
|
||||||
@@ -961,6 +978,10 @@ func Test_colornames_overwrite_default()
|
|||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_colornames_assignment_and_unassignment()
|
func Test_colornames_assignment_and_unassignment()
|
||||||
|
" No feature check is needed for this test because the v:colornames dict
|
||||||
|
" always exists with +eval. The feature checks are only required for
|
||||||
|
" commands that do color lookup.
|
||||||
|
|
||||||
" Ensure we cannot overwrite the v:colornames dict.
|
" Ensure we cannot overwrite the v:colornames dict.
|
||||||
call assert_fails("let v:colornames = {}", 'E46:')
|
call assert_fails("let v:colornames = {}", 'E46:')
|
||||||
|
|
||||||
|
@@ -757,6 +757,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
3590,
|
||||||
/**/
|
/**/
|
||||||
3589,
|
3589,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user