fix(colorscheme): try .lua files in 'rtp' before .vim files in 'pp'

This ensures that colorschemes in 'rtp' are tried before ones in 'pp',
because some colorschemes in 'pp' may not work if not added to 'rtp'.

This also match the current documentation better.

(cherry picked from commit 237a6ed2ff)
This commit is contained in:
zeertzjq
2023-05-23 07:40:50 +08:00
committed by github-actions[bot]
parent 68f967ce47
commit 7556850724
2 changed files with 42 additions and 2 deletions

View File

@@ -686,10 +686,18 @@ int load_colors(char *name)
char *buf = xmalloc(buflen);
apply_autocmds(EVENT_COLORSCHEMEPRE, name, curbuf->b_fname, false, curbuf);
snprintf(buf, buflen, "colors/%s.vim", name);
int retval = source_runtime(buf, DIP_START + DIP_OPT);
int retval = source_runtime(buf, 0);
if (retval == FAIL) {
snprintf(buf, buflen, "colors/%s.lua", name);
retval = source_runtime(buf, DIP_START + DIP_OPT);
retval = source_runtime(buf, 0);
}
if (retval == FAIL) {
snprintf(buf, buflen, "colors/%s.vim", name);
retval = source_runtime(buf, DIP_NORTP + DIP_START + DIP_OPT);
}
if (retval == FAIL) {
snprintf(buf, buflen, "colors/%s.lua", name);
retval = source_runtime(buf, DIP_NORTP + DIP_START + DIP_OPT);
}
xfree(buf);
if (retval == OK) {

View File

@@ -61,6 +61,38 @@ describe('runtime:', function()
eq('vim', eval('g:colorscheme'))
end)
it("loads lua colorscheme in 'rtp' if vim version only exists in 'pp' #23724", function()
local pack_dir = 'Test_Pack'
mkdir_p(pack_dir)
finally(function()
rmdir(pack_dir)
end)
exec('set pp+=' .. pack_dir)
local pack_opt_dir = pack_dir .. sep .. 'pack' .. sep .. 'some_name' .. sep .. 'opt'
local colors_opt_dir = pack_opt_dir .. sep .. 'some_pack' .. sep .. 'colors'
mkdir_p(colors_opt_dir)
local rtp_colorscheme_file = colorscheme_folder .. sep .. 'new_colorscheme'
local pp_opt_colorscheme_file = colors_opt_dir .. sep .. 'new_colorscheme'
write_file(pp_opt_colorscheme_file .. '.lua', [[vim.g.colorscheme = 'lua_pp']])
exec('colorscheme new_colorscheme')
eq('lua_pp', eval('g:colorscheme'))
write_file(pp_opt_colorscheme_file .. '.vim', [[let g:colorscheme = 'vim_pp']])
exec('colorscheme new_colorscheme')
eq('vim_pp', eval('g:colorscheme'))
write_file(rtp_colorscheme_file .. '.lua', [[vim.g.colorscheme = 'lua_rtp']])
exec('colorscheme new_colorscheme')
eq('lua_rtp', eval('g:colorscheme'))
write_file(rtp_colorscheme_file .. '.vim', [[let g:colorscheme = 'vim_rtp']])
exec('colorscheme new_colorscheme')
eq('vim_rtp', eval('g:colorscheme'))
end)
end)
describe('compiler', function()