patch 8.2.3628: looking terminal colors is a bit slow
Problem: Looking terminal colors is a bit slow.
Solution: Cache the terminal colors. (closes #9130, closes #9058)
diff --git a/src/testdir/test_terminal3.vim b/src/testdir/test_terminal3.vim
index f4cc38a..9f84615 100644
--- a/src/testdir/test_terminal3.vim
+++ b/src/testdir/test_terminal3.vim
@@ -66,6 +66,177 @@
call assert_fails('terminal ++xyz', 'E181:')
endfunc
+" Check a terminal with different colors
+func Terminal_color(group_name, highlight_cmds, highlight_opt, open_cmds)
+ CheckRunVimInTerminal
+ CheckUnix
+
+ let lines = [
+ \ 'call setline(1, range(20))',
+ \ 'func OpenTerm()',
+ \ ' set noruler',
+ \ " call term_start('cat', #{vertical: 1, " .. a:highlight_opt .. "})",
+ \ ] + a:open_cmds + [
+ \ 'endfunc',
+ \ ] + a:highlight_cmds
+ call writefile(lines, 'XtermStart')
+ let buf = RunVimInTerminal('-S XtermStart', #{rows: 15})
+ call TermWait(buf, 100)
+ call term_sendkeys(buf, ":call OpenTerm()\<CR>")
+ call TermWait(buf, 50)
+ call term_sendkeys(buf, "hello\<CR>")
+ call VerifyScreenDump(buf, 'Test_terminal_color_' .. a:group_name, {})
+
+ call term_sendkeys(buf, "\<C-D>")
+ call TermWait(buf, 50)
+ call StopVimInTerminal(buf)
+ call delete('XtermStart')
+endfunc
+
+func Test_terminal_color_Terminal()
+ call Terminal_color("Terminal", [
+ \ "highlight Terminal ctermfg=blue ctermbg=yellow",
+ \ ], "", [])
+endfunc
+
+func Test_terminal_color_group()
+ call Terminal_color("MyTermCol", [
+ \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue",
+ \ ], "term_highlight: 'MyTermCol',", [])
+endfunc
+
+func Test_terminal_color_wincolor()
+ call Terminal_color("MyWinCol", [
+ \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow",
+ \ ], "", [
+ \ 'set wincolor=MyWinCol',
+ \ ])
+endfunc
+
+func Test_terminal_color_group_over_Terminal()
+ call Terminal_color("MyTermCol_over_Terminal", [
+ \ "highlight Terminal ctermfg=blue ctermbg=yellow",
+ \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue",
+ \ ], "term_highlight: 'MyTermCol',", [])
+endfunc
+
+func Test_terminal_color_wincolor_over_group()
+ call Terminal_color("MyWinCol_over_group", [
+ \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue",
+ \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow",
+ \ ], "term_highlight: 'MyTermCol',", [
+ \ 'set wincolor=MyWinCol',
+ \ ])
+endfunc
+
+func Test_terminal_color_wincolor_split()
+ CheckRunVimInTerminal
+ CheckUnix
+
+ let lines = [
+ \ 'call setline(1, range(20))',
+ \ 'func OpenTerm()',
+ \ ' set noruler',
+ \ " call term_start('cat', #{vertical: 1, term_highlight: 'MyTermCol'})",
+ \ 'endfunc',
+ \ 'highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue',
+ \ 'highlight MyWinCol ctermfg=red ctermbg=darkyellow',
+ \ 'highlight MyWinCol2 ctermfg=black ctermbg=blue',
+ \ ]
+ call writefile(lines, 'XtermStart')
+ let buf = RunVimInTerminal('-S XtermStart', #{rows: 15})
+ call TermWait(buf, 100)
+ call term_sendkeys(buf, ":call OpenTerm()\<CR>")
+ call TermWait(buf, 50)
+ call term_sendkeys(buf, "hello\<CR>")
+ call TermWait(buf, 50)
+
+ call term_sendkeys(buf, "\<C-W>:split\<CR>")
+ call term_sendkeys(buf, "\<C-W>:set wincolor=MyWinCol\<CR>")
+ call VerifyScreenDump(buf, 'Test_terminal_wincolor_split_MyWinCol', {})
+
+ call term_sendkeys(buf, "\<C-W>b:2sb\<CR>")
+ call term_sendkeys(buf, "\<C-W>:set wincolor=MyWinCol2\<CR>")
+ call VerifyScreenDump(buf, 'Test_terminal_wincolor_split_MyWinCol2', {})
+
+ call term_sendkeys(buf, "\<C-D>")
+ call TermWait(buf, 50)
+ call StopVimInTerminal(buf)
+ call delete('XtermStart')
+endfunc
+
+func Test_terminal_color_transp_Terminal()
+ call Terminal_color("transp_Terminal", [
+ \ "highlight Terminal ctermfg=blue",
+ \ ], "", [])
+endfunc
+
+func Test_terminal_color_transp_group()
+ call Terminal_color("transp_MyTermCol", [
+ \ "highlight MyTermCol ctermfg=darkgreen",
+ \ ], "term_highlight: 'MyTermCol',", [])
+endfunc
+
+func Test_terminal_color_transp_wincolor()
+ call Terminal_color("transp_MyWinCol", [
+ \ "highlight MyWinCol ctermfg=red",
+ \ ], "", [
+ \ 'set wincolor=MyWinCol',
+ \ ])
+endfunc
+
+func Test_terminal_color_gui_Terminal()
+ CheckFeature termguicolors
+ call Terminal_color("gui_Terminal", [
+ \ "set termguicolors",
+ \ "highlight Terminal guifg=#3344ff guibg=#b0a700",
+ \ ], "", [])
+endfunc
+
+func Test_terminal_color_gui_group()
+ CheckFeature termguicolors
+ call Terminal_color("gui_MyTermCol", [
+ \ "set termguicolors",
+ \ "highlight MyTermCol guifg=#007800 guibg=#6789ff",
+ \ ], "term_highlight: 'MyTermCol',", [])
+endfunc
+
+func Test_terminal_color_gui_wincolor()
+ CheckFeature termguicolors
+ call Terminal_color("gui_MyWinCol", [
+ \ "set termguicolors",
+ \ "highlight MyWinCol guifg=#fe1122 guibg=#818100",
+ \ ], "", [
+ \ 'set wincolor=MyWinCol',
+ \ ])
+endfunc
+
+func Test_terminal_color_gui_transp_Terminal()
+ CheckFeature termguicolors
+ call Terminal_color("gui_transp_Terminal", [
+ \ "set termguicolors",
+ \ "highlight Terminal guifg=#3344ff",
+ \ ], "", [])
+endfunc
+
+func Test_terminal_color_gui_transp_group()
+ CheckFeature termguicolors
+ call Terminal_color("gui_transp_MyTermCol", [
+ \ "set termguicolors",
+ \ "highlight MyTermCol guifg=#007800",
+ \ ], "term_highlight: 'MyTermCol',", [])
+endfunc
+
+func Test_terminal_color_gui_transp_wincolor()
+ CheckFeature termguicolors
+ call Terminal_color("gui_transp_MyWinCol", [
+ \ "set termguicolors",
+ \ "highlight MyWinCol guifg=#fe1122",
+ \ ], "", [
+ \ 'set wincolor=MyWinCol',
+ \ ])
+endfunc
+
func Test_terminal_in_popup()
CheckRunVimInTerminal
@@ -180,7 +351,7 @@
endfunc
" Check a terminal in popup window with different colors
-func Terminal_in_popup_colored(group_name, highlight_cmd, highlight_opt)
+func Terminal_in_popup_color(group_name, highlight_cmds, highlight_opt, popup_cmds, popup_opt)
CheckRunVimInTerminal
CheckUnix
@@ -189,10 +360,11 @@
\ 'func OpenTerm()',
\ " let s:buf = term_start('cat', #{hidden: 1, "
\ .. a:highlight_opt .. "})",
- \ ' let g:winid = popup_create(s:buf, #{ border: []})',
+ \ ' let g:winid = popup_create(s:buf, #{border: [], '
+ \ .. a:popup_opt .. '})',
+ \ ] + a:popup_cmds + [
\ 'endfunc',
- \ a:highlight_cmd,
- \ ]
+ \ ] + a:highlight_cmds
call writefile(lines, 'XtermPopup')
let buf = RunVimInTerminal('-S XtermPopup', #{rows: 15})
call TermWait(buf, 100)
@@ -210,12 +382,140 @@
call delete('XtermPopup')
endfunc
-func Test_terminal_in_popup_colored_Terminal()
- call Terminal_in_popup_colored("Terminal", "highlight Terminal ctermfg=blue ctermbg=yellow", "")
+func Test_terminal_in_popup_color_Terminal()
+ call Terminal_in_popup_color("Terminal", [
+ \ "highlight Terminal ctermfg=blue ctermbg=yellow",
+ \ ], "", [], "")
endfunc
-func Test_terminal_in_popup_colored_group()
- call Terminal_in_popup_colored("MyTermCol", "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue", "term_highlight: 'MyTermCol',")
+func Test_terminal_in_popup_color_group()
+ call Terminal_in_popup_color("MyTermCol", [
+ \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue",
+ \ ], "term_highlight: 'MyTermCol',", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_wincolor()
+ call Terminal_in_popup_color("MyWinCol", [
+ \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow",
+ \ ], "", [
+ \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")',
+ \ ], "")
+endfunc
+
+func Test_terminal_in_popup_color_popup_highlight()
+ call Terminal_in_popup_color("MyPopupHlCol", [
+ \ "highlight MyPopupHlCol ctermfg=cyan ctermbg=green",
+ \ ], "", [], "highlight: 'MyPopupHlCol'")
+endfunc
+
+func Test_terminal_in_popup_color_group_over_Terminal()
+ call Terminal_in_popup_color("MyTermCol_over_Terminal", [
+ \ "highlight Terminal ctermfg=blue ctermbg=yellow",
+ \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue",
+ \ ], "term_highlight: 'MyTermCol',", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_wincolor_over_group()
+ call Terminal_in_popup_color("MyWinCol_over_group", [
+ \ "highlight MyTermCol ctermfg=darkgreen ctermbg=lightblue",
+ \ "highlight MyWinCol ctermfg=red ctermbg=darkyellow",
+ \ ], "term_highlight: 'MyTermCol',", [
+ \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")',
+ \ ], "")
+endfunc
+
+func Test_terminal_in_popup_color_transp_Terminal()
+ call Terminal_in_popup_color("transp_Terminal", [
+ \ "highlight Terminal ctermfg=blue",
+ \ ], "", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_transp_group()
+ call Terminal_in_popup_color("transp_MyTermCol", [
+ \ "highlight MyTermCol ctermfg=darkgreen",
+ \ ], "term_highlight: 'MyTermCol',", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_transp_wincolor()
+ call Terminal_in_popup_color("transp_MyWinCol", [
+ \ "highlight MyWinCol ctermfg=red",
+ \ ], "", [
+ \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")',
+ \ ], "")
+endfunc
+
+func Test_terminal_in_popup_color_transp_popup_highlight()
+ call Terminal_in_popup_color("transp_MyPopupHlCol", [
+ \ "highlight MyPopupHlCol ctermfg=cyan",
+ \ ], "", [], "highlight: 'MyPopupHlCol'")
+endfunc
+
+func Test_terminal_in_popup_color_gui_Terminal()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_Terminal", [
+ \ "set termguicolors",
+ \ "highlight Terminal guifg=#3344ff guibg=#b0a700",
+ \ ], "", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_gui_group()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_MyTermCol", [
+ \ "set termguicolors",
+ \ "highlight MyTermCol guifg=#007800 guibg=#6789ff",
+ \ ], "term_highlight: 'MyTermCol',", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_gui_wincolor()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_MyWinCol", [
+ \ "set termguicolors",
+ \ "highlight MyWinCol guifg=#fe1122 guibg=#818100",
+ \ ], "", [
+ \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")',
+ \ ], "")
+endfunc
+
+func Test_terminal_in_popup_color_gui_popup_highlight()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_MyPopupHlCol", [
+ \ "set termguicolors",
+ \ "highlight MyPopupHlCol guifg=#00e8f0 guibg=#126521",
+ \ ], "", [], "highlight: 'MyPopupHlCol'")
+endfunc
+
+func Test_terminal_in_popup_color_gui_transp_Terminal()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_transp_Terminal", [
+ \ "set termguicolors",
+ \ "highlight Terminal guifg=#3344ff",
+ \ ], "", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_gui_transp_group()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_transp_MyTermCol", [
+ \ "set termguicolors",
+ \ "highlight MyTermCol guifg=#007800",
+ \ ], "term_highlight: 'MyTermCol',", [], "")
+endfunc
+
+func Test_terminal_in_popup_color_gui_transp_wincolor()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_transp_MyWinCol", [
+ \ "set termguicolors",
+ \ "highlight MyWinCol guifg=#fe1122",
+ \ ], "", [
+ \ 'call setwinvar(g:winid, "&wincolor", "MyWinCol")',
+ \ ], "")
+endfunc
+
+func Test_terminal_in_popup_color_gui_transp_popup_highlight()
+ CheckFeature termguicolors
+ call Terminal_in_popup_color("gui_transp_MyPopupHlCol", [
+ \ "set termguicolors",
+ \ "highlight MyPopupHlCol guifg=#00e8f0",
+ \ ], "", [], "highlight: 'MyPopupHlCol'")
endfunc
func Test_double_popup_terminal()
@@ -411,7 +711,7 @@
call TermWait(buf, 50)
call assert_equal('yellow', readfile('Xbuf')[0])
- " Test for selecting text using doubleclick
+ " Test for selecting text using double click
call delete('Xbuf')
call test_setmouse(1, 11)
call term_sendkeys(buf, "\<LeftMouse>\<LeftRelease>\<LeftMouse>")
@@ -431,7 +731,7 @@
call TermWait(buf, 50)
call assert_equal("vim emacs sublime nano\n", readfile('Xbuf')[0])
- " Test for selecting a block using qudraple click
+ " Test for selecting a block using quadruple click
call delete('Xbuf')
call test_setmouse(1, 11)
call term_sendkeys(buf, "\<LeftMouse>\<LeftRelease>\<LeftMouse>\<LeftRelease>\<LeftMouse>\<LeftRelease>\<LeftMouse>")