aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRom Grk <romgrk.cc@gmail.com>2016-05-31 05:46:32 -0400
committerJustin M. Keyes <justinkz@gmail.com>2016-06-18 12:25:11 -0400
commit86b138b25de6b0699329fab25df152bbf7ddab63 (patch)
treebdcb7e018452ee58886d9234b2221fe91d5c9272
parentcbda7d85f867d3786d7f2cc7dd5e22c3575285a4 (diff)
downloadrneovim-86b138b25de6b0699329fab25df152bbf7ddab63.tar.gz
rneovim-86b138b25de6b0699329fab25df152bbf7ddab63.tar.bz2
rneovim-86b138b25de6b0699329fab25df152bbf7ddab63.zip
synIDattr(): return RRGGBB value for [fg|bg|sp]# #4851
add tests for synIDattr() with [fg|bg|sp]# add tests for synIDattr and various #RGB colors synIDattr: test for ui_rgb_attached() test: fix tests for synIDattr fg/bg/sp
-rw-r--r--src/nvim/syntax.c17
-rw-r--r--test/functional/terminal/highlight_spec.lua31
2 files changed, 44 insertions, 4 deletions
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index 9e4dc0204f..05141eaf1e 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -6952,8 +6952,23 @@ highlight_color (
else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g'))
return NULL;
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;
+ }
if (sp) {
return HL_TABLE()[id - 1].sg_rgb_sp_name;
}
diff --git a/test/functional/terminal/highlight_spec.lua b/test/functional/terminal/highlight_spec.lua
index 8876c68673..79b2bf0bc4 100644
--- a/test/functional/terminal/highlight_spec.lua
+++ b/test/functional/terminal/highlight_spec.lua
@@ -165,24 +165,49 @@ end)
describe('synIDattr()', function()
local screen
-
before_each(function()
clear()
screen = Screen.new(50, 7)
- execute('highlight Normal ctermfg=1 guifg=#ff0000')
+ execute('highlight Normal ctermfg=1 guifg=#ff0000 guibg=Black')
+ -- Salmon #fa8072 Maroon #800000
+ execute('highlight Keyword ctermfg=2 guifg=Salmon guisp=Maroon')
end)
after_each(function()
screen:detach()
end)
- it('returns RGB number if GUI', function()
+ it('returns gui-color if GUI', function()
+ eq('1', eval('synIDattr(hlID("Normal"), "fg")'))
+ eq('-1', eval('synIDattr(hlID("Normal"), "bg")'))
+
+ eq('2', eval('synIDattr(hlID("Keyword"), "fg")'))
+ eq('', eval('synIDattr(hlID("Keyword"), "sp")'))
screen:attach(true)
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()
+ eq('1', eval('synIDattr(hlID("Normal"), "fg#")'))
+ eq('-1', eval('synIDattr(hlID("Normal"), "bg#")'))
+
+ eq('2', eval('synIDattr(hlID("Keyword"), "fg#")'))
+ eq('', eval('synIDattr(hlID("Keyword"), "sp#")'))
+ 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)
it('returns color number if non-GUI', function()
screen:attach(false)
eq('1', eval('synIDattr(hlID("Normal"), "fg")'))
+ eq('2', eval('synIDattr(hlID("Keyword"), "fg")'))
end)
end)