neovim/test/functional/ui/highlight_spec.lua

1066 lines
35 KiB
Lua
Raw Normal View History

local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local os = require('os')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local command = helpers.command
local eval, exc_exec = helpers.eval, helpers.exc_exec
local feed_command, request, eq = helpers.feed_command, helpers.request, helpers.eq
local curbufmeths = helpers.curbufmeths
describe('colorscheme compatibility', function()
before_each(function()
clear()
end)
it('t_Co is set to 256 by default', function()
eq('256', eval('&t_Co'))
request('nvim_set_option', 't_Co', '88')
eq('88', eval('&t_Co'))
end)
end)
describe('highlight: `:syntax manual`', function()
-- When using manual syntax highlighting, it should be preserved even when
-- switching buffers... bug did only occur without :set hidden
-- Ref: vim patch 7.4.1236
local screen
before_each(function()
clear()
screen = Screen.new(20,5)
screen:attach()
--syntax highlight for vimcscripts "echo"
screen:set_default_attr_ids( {
[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {bold=true, foreground=Screen.colors.Brown}
} )
end)
after_each(function()
screen:detach()
os.remove('Xtest-functional-ui-highlight.tmp.vim')
end)
it("works with buffer switch and 'hidden'", function()
feed_command('e tmp1.vim')
feed_command('e Xtest-functional-ui-highlight.tmp.vim')
feed_command('filetype on')
feed_command('syntax manual')
feed_command('set ft=vim')
feed_command('set syntax=ON')
feed('iecho 1<esc>0')
feed_command('set hidden')
feed_command('w')
feed_command('bn')
feed_command('bp')
screen:expect([[
{1:^echo} 1 |
{0:~ }|
{0:~ }|
{0:~ }|
<f 1 --100%-- col 1 |
]])
end)
it("works with buffer switch and 'nohidden'", function()
command('e tmp1.vim')
command('e Xtest-functional-ui-highlight.tmp.vim')
command('filetype on')
command('syntax manual')
command('set filetype=vim fileformat=unix')
command('set syntax=ON')
feed('iecho 1<esc>0')
command('set nohidden')
command('w')
command('silent bn')
eq("tmp1.vim", eval("fnamemodify(bufname('%'), ':t')"))
feed_command('silent bp')
eq("Xtest-functional-ui-highlight.tmp.vim", eval("fnamemodify(bufname('%'), ':t')"))
screen:expect([[
{1:^echo} 1 |
{0:~ }|
{0:~ }|
{0:~ }|
:silent bp |
]])
end)
end)
describe('highlight defaults', function()
local screen
before_each(function()
clear()
screen = Screen.new()
screen:attach()
end)
after_each(function()
screen:detach()
end)
it('window status bar', function()
screen:set_default_attr_ids({
[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {reverse = true, bold = true}, -- StatusLine
[2] = {reverse = true} -- StatusLineNC
})
feed_command('sp', 'vsp', 'vsp')
screen:expect([[
^ {2:|} {2:|} |
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{1:[No Name] }{2:[No Name] [No Name] }|
|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{2:[No Name] }|
|
]])
-- navigate to verify that the attributes are properly moved
feed('<c-w>j')
screen:expect([[
{2:|} {2:|} |
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{2:[No Name] [No Name] [No Name] }|
^ |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{1:[No Name] }|
|
]])
-- note that when moving to a window with small width nvim will increase
-- the width of the new active window at the expense of a inactive window
-- (upstream vim has the same behavior)
feed('<c-w>k<c-w>l')
screen:expect([[
{2:|}^ {2:|} |
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{2:[No Name] }{1:[No Name] }{2:[No Name] }|
|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{2:[No Name] }|
|
]])
feed('<c-w>l')
screen:expect([[
{2:|} {2:|}^ |
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{2:[No Name] [No Name] }{1:[No Name] }|
|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{2:[No Name] }|
|
]])
feed('<c-w>h<c-w>h')
screen:expect([[
^ {2:|} {2:|} |
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{0:~ }{2:|}{0:~ }{2:|}{0:~ }|
{1:[No Name] }{2:[No Name] [No Name] }|
|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{2:[No Name] }|
|
]])
end)
it('insert mode text', function()
feed('i')
screen:try_resize(53, 4)
screen:expect([[
^ |
{0:~ }|
{0:~ }|
{1:-- INSERT --} |
]], {[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {bold = true}})
end)
it('end of file markers', function()
screen:try_resize(53, 4)
screen:expect([[
^ |
{1:~ }|
{1:~ }|
|
2016-08-09 04:19:31 -07:00
]], {[1] = {bold = true, foreground = Screen.colors.Blue}})
end)
it('"wait return" text', function()
screen:try_resize(53, 4)
feed(':ls<cr>')
screen:expect([[
{0:~ }|
:ls |
1 %a "[No Name]" line 1 |
{1:Press ENTER or type command to continue}^ |
]], {[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {bold = true, foreground = Screen.colors.SeaGreen}})
feed('<cr>') -- skip the "Press ENTER..." state or tests will hang
end)
it('can be cleared and linked to other highlight groups', function()
screen:try_resize(53, 4)
feed_command('highlight clear ModeMsg')
feed('i')
screen:expect([[
^ |
{0:~ }|
{0:~ }|
-- INSERT -- |
]], {[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {bold=true}})
feed('<esc>')
feed_command('highlight CustomHLGroup guifg=red guibg=green')
feed_command('highlight link ModeMsg CustomHLGroup')
feed('i')
screen:expect([[
^ |
{0:~ }|
{0:~ }|
{1:-- INSERT --} |
]], {[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {foreground = Screen.colors.Red, background = Screen.colors.Green}})
end)
2016-05-20 17:20:18 -07:00
it('can be cleared by assigning NONE', function()
screen:try_resize(53, 4)
feed_command('syn keyword TmpKeyword neovim')
feed_command('hi link TmpKeyword ErrorMsg')
2016-05-20 17:20:18 -07:00
insert('neovim')
screen:expect([[
{1:neovi^m} |
{0:~ }|
{0:~ }|
2016-05-20 17:20:18 -07:00
|
]], {
[0] = {bold=true, foreground=Screen.colors.Blue},
2016-05-20 17:20:18 -07:00
[1] = {foreground = Screen.colors.White, background = Screen.colors.Red}
})
feed_command("hi ErrorMsg term=NONE cterm=NONE ctermfg=NONE ctermbg=NONE"
2016-05-20 17:20:18 -07:00
.. " gui=NONE guifg=NONE guibg=NONE guisp=NONE")
screen:expect([[
neovi^m |
{0:~ }|
{0:~ }|
|
]], {[0] = {bold=true, foreground=Screen.colors.Blue}})
end)
it('Cursor after `:hi clear|syntax reset` #6508', function()
command('highlight clear|syntax reset')
eq('guifg=bg guibg=fg', eval([[matchstr(execute('hi Cursor'), '\v(gui|cterm).*$')]]))
end)
it('Whitespace highlight', function()
screen:try_resize(53, 4)
feed_command('highlight NonText gui=NONE guifg=#FF0000')
feed_command('set listchars=space:.,tab:>-,trail:*,eol:¬ list')
insert(' ne \t o\tv im ')
screen:expect([[
ne{0:.>----.}o{0:>-----}v{0:..}im{0:*^*¬} |
{0:~ }|
{0:~ }|
|
]], {
[0] = {foreground=Screen.colors.Red},
[1] = {foreground=Screen.colors.Blue},
})
feed_command('highlight Whitespace gui=NONE guifg=#0000FF')
screen:expect([[
ne{1:.>----.}o{1:>-----}v{1:..}im{1:*^*}{0:¬} |
{0:~ }|
{0:~ }|
:highlight Whitespace gui=NONE guifg=#0000FF |
]], {
[0] = {foreground=Screen.colors.Red},
[1] = {foreground=Screen.colors.Blue},
})
2016-05-20 17:20:18 -07:00
end)
end)
describe('guisp (special/undercurl)', function()
local screen
before_each(function()
clear()
screen = Screen.new(25,10)
screen:attach()
end)
it('can be set and is applied like foreground or background', function()
feed_command('syntax on')
feed_command('syn keyword TmpKeyword neovim')
feed_command('syn keyword TmpKeyword1 special')
feed_command('syn keyword TmpKeyword2 specialwithbg')
feed_command('syn keyword TmpKeyword3 specialwithfg')
feed_command('hi! Awesome guifg=red guibg=yellow guisp=red')
feed_command('hi! Awesome1 guisp=red')
feed_command('hi! Awesome2 guibg=yellow guisp=red')
feed_command('hi! Awesome3 guifg=red guisp=red')
feed_command('hi link TmpKeyword Awesome')
feed_command('hi link TmpKeyword1 Awesome1')
feed_command('hi link TmpKeyword2 Awesome2')
feed_command('hi link TmpKeyword3 Awesome3')
insert([[
neovim
awesome neovim
wordcontainingneovim
special
specialwithbg
specialwithfg
]])
feed('Go<tab>neovim tabbed')
screen:expect([[
{1:neovim} |
awesome {1:neovim} |
wordcontainingneovim |
{2:special} |
{3:specialwithbg} |
{4:specialwithfg} |
|
{1:neovim} tabbed^ |
{0:~ }|
{5:-- INSERT --} |
2016-04-24 18:07:05 -07:00
]],{
[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {background = Screen.colors.Yellow, foreground = Screen.colors.Red,
special = Screen.colors.Red},
[2] = {special = Screen.colors.Red},
[3] = {special = Screen.colors.Red, background = Screen.colors.Yellow},
[4] = {foreground = Screen.colors.Red, special = Screen.colors.Red},
[5] = {bold=true},
})
end)
end)
2016-05-14 01:54:05 -07:00
describe("'listchars' highlight", function()
2016-05-14 01:54:05 -07:00
local screen
before_each(function()
clear()
screen = Screen.new(20,5)
screen:attach()
end)
after_each(function()
screen:detach()
end)
it("'cursorline' and 'cursorcolumn'", function()
screen:set_default_attr_ids({
[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {background=Screen.colors.Grey90}
})
feed_command('highlight clear ModeMsg')
feed_command('set cursorline')
2016-05-14 01:54:05 -07:00
feed('i')
screen:expect([[
{1:^ }|
{0:~ }|
{0:~ }|
{0:~ }|
2016-05-14 01:54:05 -07:00
-- INSERT -- |
]])
feed('abcdefg<cr>kkasdf')
screen:expect([[
abcdefg |
{1:kkasdf^ }|
{0:~ }|
{0:~ }|
2016-05-14 01:54:05 -07:00
-- INSERT -- |
]])
feed('<esc>')
screen:expect([[
abcdefg |
{1:kkasd^f }|
{0:~ }|
{0:~ }|
2016-05-14 01:54:05 -07:00
|
]])
feed_command('set nocursorline')
2016-05-14 01:54:05 -07:00
screen:expect([[
abcdefg |
kkasd^f |
{0:~ }|
{0:~ }|
2016-05-14 01:54:05 -07:00
:set nocursorline |
]])
feed('k')
screen:expect([[
abcde^fg |
kkasdf |
{0:~ }|
{0:~ }|
2016-05-14 01:54:05 -07:00
:set nocursorline |
]])
feed('jjji<cr><cr><cr><esc>')
screen:expect([[
kkasd |
|
|
^f |
|
]])
feed_command('set cursorline')
feed_command('set cursorcolumn')
2016-05-14 01:54:05 -07:00
feed('kkiabcdefghijk<esc>hh')
screen:expect([[
kkasd {1: } |
{1:abcdefgh^ijk }|
{1: } |
f {1: } |
|
]])
feed('khh')
screen:expect([[
{1:kk^asd }|
ab{1:c}defghijk |
{1: } |
f {1: } |
|
]])
end)
it("'cursorline' and with 'listchar' option: space, eol, tab, and trail", function()
screen:set_default_attr_ids({
2016-08-09 04:19:31 -07:00
[1] = {background=Screen.colors.Grey90},
2016-05-14 01:54:05 -07:00
[2] = {
2016-08-09 04:19:31 -07:00
foreground=Screen.colors.Red,
background=Screen.colors.Grey90,
2016-05-14 01:54:05 -07:00
},
[3] = {
2016-08-09 04:19:31 -07:00
background=Screen.colors.Grey90,
foreground=Screen.colors.Blue,
2016-05-14 01:54:05 -07:00
bold=true,
},
[4] = {
2016-08-09 04:19:31 -07:00
foreground=Screen.colors.Blue,
2016-05-14 01:54:05 -07:00
bold=true,
},
[5] = {
2016-08-09 04:19:31 -07:00
foreground=Screen.colors.Red,
2016-05-14 01:54:05 -07:00
},
})
feed_command('highlight clear ModeMsg')
feed_command('highlight Whitespace guifg=#FF0000')
feed_command('set cursorline')
feed_command('set tabstop=8')
feed_command('set listchars=space:.,eol:¬,tab:>-,extends:>,precedes:<,trail:* list')
2016-05-14 01:54:05 -07:00
feed('i\t abcd <cr>\t abcd <cr><esc>k')
screen:expect([[
{5:>-------.}abcd{5:*}{4:¬} |
{2:^>-------.}{1:abcd}{2:*}{3:¬}{1: }|
{4:¬} |
{4:~ }|
|
]])
feed('k')
screen:expect([[
{2:^>-------.}{1:abcd}{2:*}{3:¬}{1: }|
{5:>-------.}abcd{5:*}{4:¬} |
{4:¬} |
{4:~ }|
|
]])
feed_command('set nocursorline')
2016-05-14 01:54:05 -07:00
screen:expect([[
{5:^>-------.}abcd{5:*}{4:¬} |
{5:>-------.}abcd{5:*}{4:¬} |
{4:¬} |
{4:~ }|
:set nocursorline |
]])
feed_command('set nowrap')
2016-05-17 16:26:03 -07:00
feed('ALorem ipsum dolor sit amet<ESC>0')
screen:expect([[
{5:^>-------.}abcd{5:.}Lorem{4:>}|
{5:>-------.}abcd{5:*}{4:¬} |
{4:¬} |
{4:~ }|
|
]])
feed_command('set cursorline')
2016-05-17 16:26:03 -07:00
screen:expect([[
{2:^>-------.}{1:abcd}{2:.}{1:Lorem}{4:>}|
2016-05-17 16:26:03 -07:00
{5:>-------.}abcd{5:*}{4:¬} |
{4:¬} |
{4:~ }|
:set cursorline |
]])
feed('$')
screen:expect([[
{4:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }|
2016-05-17 16:26:03 -07:00
{4:<} |
{4:<} |
{4:~ }|
:set cursorline |
]])
feed('G')
screen:expect([[
{5:>-------.}abcd{5:.}Lorem{4:>}|
{5:>-------.}abcd{5:*}{4:¬} |
{3:^¬}{1: }|
{4:~ }|
:set cursorline |
]])
end)
it("'listchar' in visual mode", function()
screen:set_default_attr_ids({
2016-08-09 04:19:31 -07:00
[1] = {background=Screen.colors.Grey90},
2016-05-17 16:26:03 -07:00
[2] = {
2016-08-09 04:19:31 -07:00
foreground=Screen.colors.Red,
background=Screen.colors.Grey90,
2016-05-17 16:26:03 -07:00
},
[3] = {
2016-08-09 04:19:31 -07:00
background=Screen.colors.Grey90,
foreground=Screen.colors.Blue,
2016-05-17 16:26:03 -07:00
bold=true,
},
[4] = {
2016-08-09 04:19:31 -07:00
foreground=Screen.colors.Blue,
2016-05-17 16:26:03 -07:00
bold=true,
},
[5] = {
2016-08-09 04:19:31 -07:00
foreground=Screen.colors.Red,
2016-05-17 16:26:03 -07:00
},
[6] = {
2016-08-09 04:19:31 -07:00
background=Screen.colors.LightGrey,
2016-05-17 16:26:03 -07:00
},
[7] = {
2016-08-09 04:19:31 -07:00
background=Screen.colors.LightGrey,
foreground=Screen.colors.Red,
2016-05-17 16:26:03 -07:00
},
[8] = {
2016-08-09 04:19:31 -07:00
background=Screen.colors.LightGrey,
foreground=Screen.colors.Blue,
2016-05-17 16:26:03 -07:00
bold=true,
},
})
feed_command('highlight clear ModeMsg')
feed_command('highlight Whitespace guifg=#FF0000')
feed_command('set cursorline')
feed_command('set tabstop=8')
feed_command('set nowrap')
feed_command('set listchars=space:.,eol:¬,tab:>-,extends:>,precedes:<,trail:* list')
2016-05-17 16:26:03 -07:00
feed('i\t abcd <cr>\t abcd Lorem ipsum dolor sit amet<cr><esc>kkk0')
screen:expect([[
{2:^>-------.}{1:abcd}{2:*}{3:¬}{1: }|
{5:>-------.}abcd{5:.}Lorem{4:>}|
{4:¬} |
{4:~ }|
|
]])
feed('lllvj')
screen:expect([[
{5:>-------.}a{6:bcd}{7:*}{8:¬} |
{7:>-------.}{6:a}^bcd{5:.}Lorem{4:>}|
{4:¬} |
{4:~ }|
-- VISUAL -- |
]])
feed('<esc>V')
screen:expect([[
{5:>-------.}abcd{5:*}{4:¬} |
{7:>-------.}{6:a}^b{6:cd}{7:.}{6:Lorem}{4:>}|
{4:¬} |
{4:~ }|
-- VISUAL LINE -- |
]])
feed('<esc>$')
screen:expect([[
{4:<} |
{4:<}{1:r}{2:.}{1:sit}{2:.}{1:ame^t}{3:¬}{1: }|
2016-05-17 16:26:03 -07:00
{4:<} |
{4:~ }|
|
]])
2016-05-14 01:54:05 -07:00
end)
it("'cursorline' with :match", function()
screen:set_default_attr_ids({
[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {background=Screen.colors.Grey90},
[2] = {foreground=Screen.colors.Red},
[3] = {foreground=Screen.colors.Green1},
})
feed_command('highlight clear ModeMsg')
feed_command('highlight Whitespace guifg=#FF0000')
feed_command('highlight Error guifg=#00FF00')
feed_command('set nowrap')
feed('ia \t bc \t <esc>')
screen:expect([[
a bc ^ |
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
feed_command('set listchars=space:.,eol:¬,tab:>-,extends:>,precedes:<,trail:* list')
screen:expect([[
a{2:.>-----.}bc{2:*>---*^*}{0:¬} |
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
feed_command('match Error /\\s\\+$/')
screen:expect([[
a{2:.>-----.}bc{3:*>---*^*}{0:¬} |
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
end)
2016-05-14 01:54:05 -07:00
end)
describe("'winhighlight' highlight", function()
local screen
before_each(function()
clear()
screen = Screen.new(20,8)
screen:attach()
screen:set_default_attr_ids({
[0] = {bold=true, foreground=Screen.colors.Blue},
[1] = {background = Screen.colors.DarkBlue},
[2] = {background = Screen.colors.DarkBlue, bold = true, foreground = Screen.colors.Blue1},
[3] = {bold = true, reverse = true},
[4] = {reverse = true},
[5] = {background = Screen.colors.DarkGreen},
[6] = {background = Screen.colors.DarkGreen, bold = true, foreground = Screen.colors.Blue1},
[7] = {background = Screen.colors.DarkMagenta},
[8] = {background = Screen.colors.DarkMagenta, bold = true, foreground = Screen.colors.Blue1},
[9] = {foreground = Screen.colors.Brown},
[10] = {foreground = Screen.colors.Brown, background = Screen.colors.DarkBlue},
[11] = {background = Screen.colors.DarkBlue, bold = true, reverse = true},
[12] = {background = Screen.colors.DarkGreen, reverse = true},
[13] = {background = Screen.colors.Magenta4, reverse = true},
[14] = {background = Screen.colors.DarkBlue, reverse = true},
[15] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red},
[16] = {foreground = Screen.colors.Blue1},
[17] = {background = Screen.colors.LightRed},
[18] = {background = Screen.colors.Gray90},
[19] = {foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray},
[20] = {background = Screen.colors.LightGrey, underline = true},
[21] = {bold = true},
[22] = {bold = true, foreground = Screen.colors.SeaGreen4},
[23] = {background = Screen.colors.LightMagenta},
[24] = {background = Screen.colors.WebGray},
})
command("hi Background1 guibg=DarkBlue")
command("hi Background2 guibg=DarkGreen")
end)
it('works for background color', function()
insert("aa")
command("split")
command("set winhl=Normal:Background1")
screen:expect([[
{1:a^a }|
{2:~ }|
{2:~ }|
{11:[No Name] [+] }|
aa |
{0:~ }|
{4:[No Name] [+] }|
|
]])
command("enew")
screen:expect([[
{1:^ }|
{2:~ }|
{2:~ }|
{11:[No Name] }|
aa |
{0:~ }|
{4:[No Name] [+] }|
|
]])
end)
it('handles invalid values', function()
command("set winhl=Normal:Background1")
screen:expect([[
{1:^ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
|
]])
eq('Vim(set):E474: Invalid argument: winhl=xxx:yyy',
exc_exec("set winhl=xxx:yyy"))
eq('Normal:Background1', eval('&winhl'))
screen:expect([[
{1:^ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
|
]])
end)
it('works local to the buffer', function()
insert("aa")
command("split")
command("setlocal winhl=Normal:Background1")
screen:expect([[
{1:a^a }|
{2:~ }|
{2:~ }|
{11:[No Name] [+] }|
aa |
{0:~ }|
{4:[No Name] [+] }|
|
]])
command("enew")
screen:expect([[
^ |
{0:~ }|
{0:~ }|
{3:[No Name] }|
aa |
{0:~ }|
{4:[No Name] [+] }|
|
]])
command("bnext")
screen:expect([[
{1:^aa }|
{2:~ }|
{2:~ }|
{11:[No Name] [+] }|
aa |
{0:~ }|
{4:[No Name] [+] }|
<f 1 --100%-- col 1 |
]])
end)
it('for inactive window background works', function()
command("set winhl=Normal:Background1,NormalNC:Background2")
-- tests global value is copied across split
command("split")
screen:expect([[
{1:^ }|
{2:~ }|
{2:~ }|
{11:[No Name] }|
{5: }|
{6:~ }|
{12:[No Name] }|
|
]])
feed("<c-w><c-w>")
screen:expect([[
{5: }|
{6:~ }|
{6:~ }|
{12:[No Name] }|
{1:^ }|
{2:~ }|
{11:[No Name] }|
|
]])
feed("<c-w><c-w>")
screen:expect([[
{1:^ }|
{2:~ }|
{2:~ }|
{11:[No Name] }|
{5: }|
{6:~ }|
{12:[No Name] }|
|
]])
end)
it('works with NormalNC', function()
command("hi NormalNC guibg=DarkMagenta")
-- tests global value is copied across split
command("split")
screen:expect([[
^ |
{0:~ }|
{0:~ }|
{3:[No Name] }|
{7: }|
{8:~ }|
{13:[No Name] }|
|
]])
command("wincmd w")
screen:expect([[
{7: }|
{8:~ }|
{8:~ }|
{13:[No Name] }|
^ |
{0:~ }|
{3:[No Name] }|
|
]])
-- winbg=Normal:... overrides global NormalNC
command("set winhl=Normal:Background1")
screen:expect([[
{7: }|
{8:~ }|
{8:~ }|
{13:[No Name] }|
{1:^ }|
{2:~ }|
{11:[No Name] }|
|
]])
command("wincmd w")
screen:expect([[
^ |
{0:~ }|
{0:~ }|
{3:[No Name] }|
{1: }|
{2:~ }|
{14:[No Name] }|
|
]])
command("wincmd w")
command("set winhl=Normal:Background1,NormalNC:Background2")
screen:expect([[
{7: }|
{8:~ }|
{8:~ }|
{13:[No Name] }|
{1:^ }|
{2:~ }|
{11:[No Name] }|
|
]])
command("wincmd w")
screen:expect([[
^ |
{0:~ }|
{0:~ }|
{3:[No Name] }|
{5: }|
{6:~ }|
{12:[No Name] }|
|
]])
end)
it('background applies also to non-text', function()
insert('Lorem ipsum dolor sit amet ')
command('set shiftwidth=2')
feed('>>')
command('set number')
command('set breakindent')
command('set briopt=shift:5,min:0')
command('set list')
command('set showbreak=↪')
screen:expect([[
{9: 1 } ^Lorem ipsum do|
{9: } {0:}lor sit |
{9: } {0:}amet{0:-} |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
command('set winhl=Normal:Background1')
screen:expect([[
{10: 1 }{1: ^Lorem ipsum do}|
{10: }{1: }{2:}{1:lor sit }|
{10: }{1: }{2:}{1:amet}{2:-}{1: }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
|
]])
command('set nowrap')
command('set listchars+=extends:,precedes:')
feed('3w')
screen:expect([[
{10: 1 }{2:}{1: dolor ^sit ame}{2:}|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
{2:~ }|
|
]])
end)
it('can override NonText, Conceal and EndOfBuffer', function()
curbufmeths.set_lines(0,-1,true, {"raa\000"})
command('call matchaddpos("Conceal", [[1,2]], 0, -1, {"conceal": "#"})')
command('set cole=2 cocu=nvic')
command('split')
command('call matchaddpos("Conceal", [[1,2]], 0, -1, {"conceal": "#"})')
command('set winhl=SpecialKey:ErrorMsg,EndOfBuffer:Background1,'
..'Conceal:Background2')
screen:expect([[
^r{5:#}a{15:^@} |
{1:~ }|
{1:~ }|
{3:[No Name] [+] }|
r{19:#}a{16:^@} |
{0:~ }|
{4:[No Name] [+] }|
|
]])
end)
it('can override LineNr, CursorColumn and ColorColumn', function()
insert('very text\nmore text')
command('set number')
command('set colorcolumn=2')
command('set cursorcolumn')
command('split')
command('set winhl=LineNr:Background1,CursorColumn:Background2,'
..'ColorColumn:ErrorMsg')
screen:expect([[
{1: 1 }v{15:e}ry tex{5:t} |
{1: 2 }m{15:o}re tex^t |
{0:~ }|
{3:[No Name] [+] }|
{9: 1 }v{17:e}ry tex{18:t} |
{9: 2 }m{17:o}re text |
{4:[No Name] [+] }|
|
]])
end)
it('can override Tabline', function()
command('tabnew')
command('set winhl=TabLine:Background1,TabLineSel:ErrorMsg')
screen:expect([[
{20: No Name] }{15: No Name]}{20:X}|
^ |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
command("tabnext")
screen:expect([[
{21: No Name] }{1: No Name]}{20:X}|
^ |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
end)
it('can override popupmenu', function()
insert('word wording wordy')
command('split')
command('set winhl=Pmenu:Background1,PmenuSel:Background2,'
..'PmenuSbar:ErrorMsg,PmenuThumb:Normal')
screen:expect([[
word wording word^y |
{0:~ }|
{0:~ }|
{3:[No Name] [+] }|
word wording wordy |
{0:~ }|
{4:[No Name] [+] }|
|
]])
feed('oword<c-x><c-p>')
screen:expect([[
word wording wordy |
wordy^ |
{1:word }{0: }|
{1:wording }{3: }|
{5:wordy }rdy |
wordy |
{4:[No Name] [+] }|
{21:-- }{22:match 1 of 3} |
]])
feed('<esc>u<c-w><c-w>oword<c-x><c-p>')
screen:expect([[
word wording wordy |
wordy |
{23:word }{0: }|
{23:wording }{4: }|
{24:wordy }rdy |
wordy^ |
{3:[No Name] [+] }|
{21:-- }{22:match 1 of 3} |
]])
end)
end)