This commit is contained in:
Justin M. Keyes 2016-06-18 13:09:01 -04:00
commit 1e93e24f5e
3 changed files with 48 additions and 9 deletions

View File

@ -6952,8 +6952,23 @@ highlight_color (
else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g')) else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g'))
return NULL; return NULL;
if (modec == 'g') { if (modec == 'g') {
if (fg) if (what[2] == '#' && ui_rgb_attached()) {
if (fg) {
n = HL_TABLE()[id - 1].sg_rgb_fg;
} else if (sp) {
n = HL_TABLE()[id - 1].sg_rgb_sp;
} else {
n = HL_TABLE()[id - 1].sg_rgb_bg;
}
if (n < 0 || n > 0xffffff) {
return NULL;
}
snprintf((char *)name, sizeof(name), "#%06x", n);
return name;
}
if (fg) {
return HL_TABLE()[id - 1].sg_rgb_fg_name; return HL_TABLE()[id - 1].sg_rgb_fg_name;
}
if (sp) { if (sp) {
return HL_TABLE()[id - 1].sg_rgb_sp_name; return HL_TABLE()[id - 1].sg_rgb_sp_name;
} }

View File

@ -165,24 +165,49 @@ end)
describe('synIDattr()', function() describe('synIDattr()', function()
local screen local screen
before_each(function() before_each(function()
clear() clear()
screen = Screen.new(50, 7) screen = Screen.new(50, 7)
execute('highlight Normal ctermfg=1 guifg=#ff0000') execute('highlight Normal ctermfg=252 guifg=#ff0000 guibg=Black')
-- Salmon #fa8072 Maroon #800000
execute('highlight Keyword ctermfg=79 guifg=Salmon guisp=Maroon')
end) end)
after_each(function() it('returns cterm-color if RGB-capable UI is _not_ attached', function()
screen:detach() eq('252', eval('synIDattr(hlID("Normal"), "fg")'))
eq('252', eval('synIDattr(hlID("Normal"), "fg#")'))
eq('-1', eval('synIDattr(hlID("Normal"), "bg")'))
eq('-1', eval('synIDattr(hlID("Normal"), "bg#")'))
eq('79', eval('synIDattr(hlID("Keyword"), "fg")'))
eq('79', eval('synIDattr(hlID("Keyword"), "fg#")'))
eq('', eval('synIDattr(hlID("Keyword"), "sp")'))
eq('', eval('synIDattr(hlID("Keyword"), "sp#")'))
end) end)
it('returns RGB number if GUI', function() it('returns gui-color if "gui" arg is passed', function()
eq('Black', eval('synIDattr(hlID("Normal"), "bg", "gui")'))
eq('Maroon', eval('synIDattr(hlID("Keyword"), "sp", "gui")'))
end)
it('returns gui-color if RGB-capable UI is attached', function()
screen:attach(true) screen:attach(true)
eq('#ff0000', eval('synIDattr(hlID("Normal"), "fg")')) eq('#ff0000', eval('synIDattr(hlID("Normal"), "fg")'))
eq('Black', eval('synIDattr(hlID("Normal"), "bg")'))
eq('Salmon', eval('synIDattr(hlID("Keyword"), "fg")'))
eq('Maroon', eval('synIDattr(hlID("Keyword"), "sp")'))
end)
it('returns #RRGGBB value for fg#/bg#/sp#', function()
screen:attach(true)
eq('#ff0000', eval('synIDattr(hlID("Normal"), "fg#")'))
eq('#000000', eval('synIDattr(hlID("Normal"), "bg#")'))
eq('#fa8072', eval('synIDattr(hlID("Keyword"), "fg#")'))
eq('#800000', eval('synIDattr(hlID("Keyword"), "sp#")'))
end) end)
it('returns color number if non-GUI', function() it('returns color number if non-GUI', function()
screen:attach(false) screen:attach(false)
eq('1', eval('synIDattr(hlID("Normal"), "fg")')) eq('252', eval('synIDattr(hlID("Normal"), "fg")'))
eq('79', eval('synIDattr(hlID("Keyword"), "fg")'))
end) end)
end) end)

View File

@ -38,7 +38,6 @@ describe('manual syntax highlight', function()
os.remove('Xtest-functional-ui-highlight.tmp.vim') os.remove('Xtest-functional-ui-highlight.tmp.vim')
end) end)
-- test with "set hidden" even if the bug did not occur this way
it("works with buffer switch and 'hidden'", function() it("works with buffer switch and 'hidden'", function()
execute('e tmp1.vim') execute('e tmp1.vim')
execute('e Xtest-functional-ui-highlight.tmp.vim') execute('e Xtest-functional-ui-highlight.tmp.vim')