patch 9.1.1394: tabpanel not correctly redrawn on tabonly

Problem:  tabpanel not correctly redrawn on tabonly
          (Maxim Kim, after v9.1.1391)
Solution: force redraw of the tabpanel, tweak style
          (Hirohito Higashi)

fixes: #17322
closes: #17330

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Hirohito Higashi
2025-05-16 19:34:34 +02:00
committed by Christian Brabandt
parent ba19b65899
commit c659e4a516
7 changed files with 132 additions and 96 deletions

View File

@ -29,10 +29,6 @@ static void do_by_tplmode(int tplmode, int col_start, int col_end,
#define VERT_LEN 1 #define VERT_LEN 1
// tpl_vert's values
#define VERT_OFF 0
#define VERT_ON 1
// tpl_align's values // tpl_align's values
#define ALIGN_LEFT 0 #define ALIGN_LEFT 0
#define ALIGN_RIGHT 1 #define ALIGN_RIGHT 1
@ -41,7 +37,7 @@ static char_u *opt_name = (char_u *)"tabpanel";
static int opt_scope = OPT_LOCAL; static int opt_scope = OPT_LOCAL;
static int tpl_align = ALIGN_LEFT; static int tpl_align = ALIGN_LEFT;
static int tpl_columns = 20; static int tpl_columns = 20;
static int tpl_vert = VERT_OFF; static int tpl_is_vert = FALSE;
typedef struct { typedef struct {
win_T *wp; win_T *wp;
@ -62,7 +58,7 @@ tabpanelopt_changed(void)
char_u *p; char_u *p;
int new_align = ALIGN_LEFT; int new_align = ALIGN_LEFT;
int new_columns = 20; int new_columns = 20;
int new_vert = VERT_OFF; int new_is_vert = FALSE;
p = p_tplo; p = p_tplo;
while (*p != NUL) while (*p != NUL)
@ -85,7 +81,7 @@ tabpanelopt_changed(void)
else if (STRNCMP(p, "vert", 4) == 0) else if (STRNCMP(p, "vert", 4) == 0)
{ {
p += 4; p += 4;
new_vert = VERT_ON; new_is_vert = TRUE;
} }
if (*p != ',' && *p != NUL) if (*p != ',' && *p != NUL)
@ -96,7 +92,7 @@ tabpanelopt_changed(void)
tpl_align = new_align; tpl_align = new_align;
tpl_columns = new_columns; tpl_columns = new_columns;
tpl_vert = new_vert; tpl_is_vert = new_is_vert;
return OK; return OK;
} }
@ -130,9 +126,7 @@ tabpanel_width(void)
int int
tabpanel_leftcol(win_T *wp) tabpanel_leftcol(win_T *wp)
{ {
if (cmdline_pum_active()) if (cmdline_pum_active() || (wp != NULL && WIN_IS_POPUP(wp)))
return 0;
else if (wp != NULL && WIN_IS_POPUP(wp))
return 0; return 0;
else else
return tpl_align == ALIGN_RIGHT ? 0 : tabpanel_width(); return tpl_align == ALIGN_RIGHT ? 0 : tabpanel_width();
@ -156,7 +150,7 @@ draw_tabpanel(void)
int vsrow = 0; int vsrow = 0;
int is_right = tpl_align == ALIGN_RIGHT; int is_right = tpl_align == ALIGN_RIGHT;
if (0 == maxwidth) if (maxwidth == 0)
return; return;
#ifndef MSWIN #ifndef MSWIN
@ -168,8 +162,7 @@ int vsrow = 0;
else else
off = LineOffset[row]; off = LineOffset[row];
vim_memset(ScreenLines + off, ' ', vim_memset(ScreenLines + off, ' ', (size_t)maxwidth * sizeof(schar_T));
(size_t)maxwidth * sizeof(schar_T));
if (enc_utf8) if (enc_utf8)
vim_memset(ScreenLinesUC + off, -1, vim_memset(ScreenLinesUC + off, -1,
(size_t)maxwidth * sizeof(u8char_T)); (size_t)maxwidth * sizeof(u8char_T));
@ -179,7 +172,7 @@ int vsrow = 0;
// Reset got_int to avoid build_stl_str_hl() isn't evaluted. // Reset got_int to avoid build_stl_str_hl() isn't evaluted.
got_int = FALSE; got_int = FALSE;
if (tpl_vert == VERT_ON) if (tpl_is_vert)
{ {
if (is_right) if (is_right)
{ {
@ -237,7 +230,7 @@ get_tabpagenr_on_tabpanel(void)
int curtab_row = 0; int curtab_row = 0;
int tabpagenr = 0; int tabpagenr = 0;
if (0 == maxwidth) if (maxwidth == 0)
return -1; return -1;
do_by_tplmode(TPLMODE_GET_CURTAB_ROW, 0, maxwidth, &curtab_row, NULL); do_by_tplmode(TPLMODE_GET_CURTAB_ROW, 0, maxwidth, &curtab_row, NULL);
@ -260,7 +253,7 @@ screen_fill_tailing_area(
int attr) int attr)
{ {
int is_right = tpl_align == ALIGN_RIGHT; int is_right = tpl_align == ALIGN_RIGHT;
if (TPLMODE_REDRAW == tplmode) if (tplmode == TPLMODE_REDRAW)
screen_fill(row_start, row_end, screen_fill(row_start, row_end,
(is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_start, (is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_start,
(is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_end, (is_right ? COLUMNS_WITHOUT_TPL() : 0) + col_end,
@ -286,15 +279,15 @@ screen_puts_len_for_tabpanel(
for (j = 0; j < len;) for (j = 0; j < len;)
{ {
if ((TPLMODE_GET_CURTAB_ROW != tplmode) if (tplmode != TPLMODE_GET_CURTAB_ROW
&& (pargs->maxrow <= (*pargs->prow - pargs->offsetrow))) && pargs->maxrow <= *pargs->prow - pargs->offsetrow)
break; break;
if ((p[j] == '\n') || (p[j] == '\r')) if (p[j] == '\n' || p[j] == '\r')
{ {
// fill the tailing area of current row. // fill the tailing area of current row.
if (0 <= (*pargs->prow - pargs->offsetrow) if (*pargs->prow - pargs->offsetrow >= 0
&& (*pargs->prow - pargs->offsetrow) < pargs->maxrow) && *pargs->prow - pargs->offsetrow < pargs->maxrow)
screen_fill_tailing_area(tplmode, screen_fill_tailing_area(tplmode,
*pargs->prow - pargs->offsetrow, *pargs->prow - pargs->offsetrow,
*pargs->prow - pargs->offsetrow + 1, *pargs->prow - pargs->offsetrow + 1,
@ -331,8 +324,8 @@ screen_puts_len_for_tabpanel(
if (pargs->col_end < (*pargs->pcol) + chcells) if (pargs->col_end < (*pargs->pcol) + chcells)
{ {
// fill the tailing area of current row. // fill the tailing area of current row.
if (0 <= (*pargs->prow - pargs->offsetrow) if (*pargs->prow - pargs->offsetrow >= 0
&& (*pargs->prow - pargs->offsetrow) < pargs->maxrow) && *pargs->prow - pargs->offsetrow < pargs->maxrow)
screen_fill_tailing_area(tplmode, screen_fill_tailing_area(tplmode,
*pargs->prow - pargs->offsetrow, *pargs->prow - pargs->offsetrow,
*pargs->prow - pargs->offsetrow + 1, *pargs->prow - pargs->offsetrow + 1,
@ -343,17 +336,17 @@ screen_puts_len_for_tabpanel(
break; break;
} }
if ((*pargs->pcol) + chcells <= pargs->col_end) if (*pargs->pcol + chcells <= pargs->col_end)
{ {
int off = (tpl_align == ALIGN_RIGHT) int off = (tpl_align == ALIGN_RIGHT)
? COLUMNS_WITHOUT_TPL() ? COLUMNS_WITHOUT_TPL()
: 0; : 0;
if ((TPLMODE_REDRAW == tplmode) if (TPLMODE_REDRAW == tplmode
&& (0 <= (*pargs->prow - pargs->offsetrow) && (*pargs->prow - pargs->offsetrow >= 0
&& (*pargs->prow - pargs->offsetrow) < pargs->maxrow)) && *pargs->prow - pargs->offsetrow < pargs->maxrow))
screen_puts(buf, *pargs->prow - pargs->offsetrow, screen_puts(buf, *pargs->prow - pargs->offsetrow,
*pargs->pcol + off, attr); *pargs->pcol + off, attr);
(*pargs->pcol) += chcells; *pargs->pcol += chcells;
} }
} }
} }
@ -376,9 +369,9 @@ draw_tabpanel_default(int tplmode, tabpanel_T *pargs)
if (bufIsChanged(pargs->wp->w_buffer)) if (bufIsChanged(pargs->wp->w_buffer))
modified = TRUE; modified = TRUE;
if (modified || 1 < wincount) if (modified || wincount > 1)
{ {
if (1 < wincount) if (wincount > 1)
{ {
vim_snprintf((char *)NameBuff, MAXPATHL, "%d", wincount); vim_snprintf((char *)NameBuff, MAXPATHL, "%d", wincount);
len = (int)STRLEN(NameBuff); len = (int)STRLEN(NameBuff);
@ -406,8 +399,8 @@ draw_tabpanel_default(int tplmode, tabpanel_T *pargs)
screen_puts_len_for_tabpanel(tplmode, NameBuff, len, pargs->attr, pargs); screen_puts_len_for_tabpanel(tplmode, NameBuff, len, pargs->attr, pargs);
// fill the tailing area of current row. // fill the tailing area of current row.
if (0 <= (*pargs->prow - pargs->offsetrow) if (*pargs->prow - pargs->offsetrow >= 0
&& (*pargs->prow - pargs->offsetrow) < pargs->maxrow) && *pargs->prow - pargs->offsetrow < pargs->maxrow)
screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow,
*pargs->prow - pargs->offsetrow + 1, *pargs->prow - pargs->offsetrow + 1,
*pargs->pcol, pargs->col_end, pargs->attr); *pargs->pcol, pargs->col_end, pargs->attr);
@ -473,8 +466,8 @@ draw_tabpanel_userdefined(int tplmode, tabpanel_T *pargs)
screen_puts_len_for_tabpanel(tplmode, p, (int)STRLEN(p), curattr, pargs); screen_puts_len_for_tabpanel(tplmode, p, (int)STRLEN(p), curattr, pargs);
// fill the tailing area of current row. // fill the tailing area of current row.
if (0 <= (*pargs->prow - pargs->offsetrow) if (*pargs->prow - pargs->offsetrow >= 0
&& (*pargs->prow - pargs->offsetrow) < pargs->maxrow) && *pargs->prow - pargs->offsetrow < pargs->maxrow)
screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow, screen_fill_tailing_area(tplmode, *pargs->prow - pargs->offsetrow,
*pargs->prow - pargs->offsetrow + 1, *pargs->pcol, *pargs->prow - pargs->offsetrow + 1, *pargs->pcol,
pargs->col_end, curattr); pargs->col_end, curattr);
@ -501,7 +494,7 @@ starts_with_percent_and_bang(tabpanel_T *pargs)
// When the format starts with "%!" then evaluate it as an expression and // When the format starts with "%!" then evaluate it as an expression and
// use the result as the actual format string. // use the result as the actual format string.
if (1 < len && usefmt[0] == '%' && usefmt[1] == '!') if (len > 1 && usefmt[0] == '%' && usefmt[1] == '!')
{ {
typval_T tv; typval_T tv;
char_u *p = NULL; char_u *p = NULL;
@ -546,8 +539,7 @@ do_by_tplmode(
args.col_start = col_start; args.col_start = col_start;
args.col_end = col_end; args.col_end = col_end;
if (TPLMODE_GET_CURTAB_ROW != tplmode) if (tplmode != TPLMODE_GET_CURTAB_ROW && args.maxrow > 0)
if (0 < args.maxrow)
while (args.offsetrow + args.maxrow <= *pcurtab_row) while (args.offsetrow + args.maxrow <= *pcurtab_row)
args.offsetrow += args.maxrow; args.offsetrow += args.maxrow;
@ -555,8 +547,8 @@ do_by_tplmode(
for (row = 0; tp != NULL; row++) for (row = 0; tp != NULL; row++)
{ {
if ((TPLMODE_GET_CURTAB_ROW != tplmode) if (tplmode != TPLMODE_GET_CURTAB_ROW
&& (args.maxrow <= (row - args.offsetrow))) && args.maxrow <= row - args.offsetrow)
break; break;
col = col_start; col = col_start;
@ -568,7 +560,7 @@ do_by_tplmode(
if (tp->tp_topframe == topframe) if (tp->tp_topframe == topframe)
{ {
args.attr = attr_tpls; args.attr = attr_tpls;
if (TPLMODE_GET_CURTAB_ROW == tplmode) if (tplmode == TPLMODE_GET_CURTAB_ROW)
{ {
*pcurtab_row = row; *pcurtab_row = row;
break; break;
@ -595,13 +587,13 @@ do_by_tplmode(
char_u *p = usefmt; char_u *p = usefmt;
size_t i = 0; size_t i = 0;
while (p[i] != '\0') while (p[i] != NUL)
{ {
while ((p[i] == '\n') || (p[i] == '\r')) while (p[i] == '\n' || p[i] == '\r')
{ {
// fill the tailing area of current row. // fill the tailing area of current row.
if (0 <= (row - args.offsetrow) if (row - args.offsetrow >= 0
&& (row - args.offsetrow) < args.maxrow) && row - args.offsetrow < args.maxrow)
screen_fill_tailing_area(tplmode, screen_fill_tailing_area(tplmode,
row - args.offsetrow, row - args.offsetrow,
row - args.offsetrow + 1, row - args.offsetrow + 1,
@ -611,15 +603,14 @@ do_by_tplmode(
p++; p++;
} }
while ((p[i] != '\n') && (p[i] != '\r') while (p[i] != '\n' && p[i] != '\r' && (p[i] != NUL))
&& (p[i] != '\0'))
{ {
if (i + 1 >= sizeof(buf)) if (i + 1 >= sizeof(buf))
break; break;
buf[i] = p[i]; buf[i] = p[i];
i++; i++;
} }
buf[i] = '\0'; buf[i] = NUL;
args.user_defined = buf; args.user_defined = buf;
args.prow = &row; args.prow = &row;
@ -644,7 +635,7 @@ do_by_tplmode(
tp = tp->tp_next; tp = tp->tp_next;
if ((TPLMODE_GET_TABPAGENR == tplmode) if ((tplmode == TPLMODE_GET_TABPAGENR)
&& (mouse_row <= (row - args.offsetrow))) && (mouse_row <= (row - args.offsetrow)))
{ {
*ptabpagenr = v.vval.v_number; *ptabpagenr = v.vval.v_number;

View File

@ -0,0 +1,10 @@
|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|2+2#e000e06&|++2#0000000&| |[|N|o| |N|a|m|e|]| | +1&&@31|X+8#0000001#e0e0e08
|2+2#e000e06#ffffff0|++2#0000000&| |[|N|o| |N|a|m|e|]| @7|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22
| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22
| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22
| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22
| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22
| +1&&@19|a+0&&|s|d|f| @25||+1&&|a+0&&|s|d|f| @22
| +1&&@19|a+0&&|s|d>f| @25||+1&&|a+0&&|s|d|f| @22
| +1&&@19|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @6|B|o|t| |<+1&&|N|o| |N|a|m|e|]| |[|+|]| |1|0|1|,|4| @4|B|o|t
| +0&&@77

View File

@ -0,0 +1,10 @@
|a+0&#ffffff0|s|d|f| @25||+1&&|a+0&&|s|d|f| @42
|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42
|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42
|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42
|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42
|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42
|a|s|d|f| @25||+1&&|a+0&&|s|d|f| @42
|a|s|d>f| @25||+1&&|a+0&&|s|d|f| @42
|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @1|1|0|1|,|4| @6|B|o|t| |[+1&&|N|o| |N|a|m|e|]| |[|+|]| @15|1|0|1|,|4| @9|B|o|t
|:+0&&|t|a|b|o|n|l|y| @69

View File

@ -4,13 +4,13 @@ source check.vim
source screendump.vim source screendump.vim
CheckFeature tabpanel CheckFeature tabpanel
function! s:reset() function s:reset()
set tabpanel& set tabpanel&
set tabpanelopt& set tabpanelopt&
set showtabpanel& set showtabpanel&
endfunc endfunc
function! Test_tabpanel_mouse() function Test_tabpanel_mouse()
let save_showtabline = &showtabline let save_showtabline = &showtabline
let save_mouse = &mouse let save_mouse = &mouse
set showtabline=0 mouse=a set showtabline=0 mouse=a
@ -67,11 +67,11 @@ function! Test_tabpanel_mouse()
let &showtabline = save_showtabline let &showtabline = save_showtabline
endfunc endfunc
function! Test_tabpanel_drawing() function Test_tabpanel_drawing()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
function! MyTabPanel() function MyTabPanel()
let n = g:actual_curtabpage let n = g:actual_curtabpage
let hi = n == tabpagenr() ? 'TabLineSel' : 'TabLine' let hi = n == tabpagenr() ? 'TabLineSel' : 'TabLine'
let label = printf("\n%%#%sTabNumber#%d:%%#%s#", hi, n, hi) let label = printf("\n%%#%sTabNumber#%d:%%#%s#", hi, n, hi)
@ -110,7 +110,7 @@ function! Test_tabpanel_drawing()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_drawing_with_popupwin() function Test_tabpanel_drawing_with_popupwin()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -147,7 +147,7 @@ function! Test_tabpanel_drawing_with_popupwin()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_drawing_fill_tailing() function Test_tabpanel_drawing_fill_tailing()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -171,7 +171,7 @@ function! Test_tabpanel_drawing_fill_tailing()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_drawing_pum() function Test_tabpanel_drawing_pum()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -189,13 +189,13 @@ function! Test_tabpanel_drawing_pum()
call term_sendkeys(buf, "i\<C-x>\<C-v>") call term_sendkeys(buf, "i\<C-x>\<C-v>")
call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_0', {})
call term_sendkeys(buf, "\<cr> ab\<C-x>\<C-v>") call term_sendkeys(buf, "\<CR> ab\<C-x>\<C-v>")
call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_1', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_scrolling() function Test_tabpanel_scrolling()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -216,7 +216,7 @@ function! Test_tabpanel_scrolling()
let buf = RunVimInTerminal('-S XTest_tabpanel_scrolling', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_scrolling', {'rows': 10, 'cols': 45})
let n = 0 let n = 0
for c in ['H', 'J', 'K', 'L'] for c in ['H', 'J', 'K', 'L']
call term_sendkeys(buf, ":wincmd " .. c .. "\<cr>") call term_sendkeys(buf, ":wincmd " .. c .. "\<CR>")
call term_sendkeys(buf, "\<C-d>\<C-d>") call term_sendkeys(buf, "\<C-d>\<C-d>")
call term_sendkeys(buf, "r@") call term_sendkeys(buf, "r@")
call VerifyScreenDump(buf, 'Test_tabpanel_drawing_scrolling_' .. n, {}) call VerifyScreenDump(buf, 'Test_tabpanel_drawing_scrolling_' .. n, {})
@ -226,7 +226,7 @@ function! Test_tabpanel_scrolling()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_many_tabpages() function Test_tabpanel_many_tabpages()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -243,14 +243,14 @@ function! Test_tabpanel_many_tabpages()
call term_sendkeys(buf, "gt") call term_sendkeys(buf, "gt")
call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_' .. n, {}) call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_' .. n, {})
endfor endfor
call term_sendkeys(buf, ":tabnext +10\<cr>") call term_sendkeys(buf, ":tabnext +10\<CR>")
call term_sendkeys(buf, ":tabnext -3\<cr>") call term_sendkeys(buf, ":tabnext -3\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_4', {}) call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_4', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_visual() function Test_tabpanel_visual()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -265,16 +265,16 @@ function! Test_tabpanel_visual()
let buf = RunVimInTerminal('-S XTest_tabpanel_visual', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_visual', {'rows': 10, 'cols': 45})
call term_sendkeys(buf, "v2w") call term_sendkeys(buf, "v2w")
call VerifyScreenDump(buf, 'Test_tabpanel_visual_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_visual_0', {})
call term_sendkeys(buf, "\<esc>0jw") call term_sendkeys(buf, "\<Esc>0jw")
call term_sendkeys(buf, "v2wge") call term_sendkeys(buf, "v2wge")
call VerifyScreenDump(buf, 'Test_tabpanel_visual_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_visual_1', {})
call term_sendkeys(buf, "y:echo @\"\<cr>") call term_sendkeys(buf, "y:echo @\"\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_visual_2', {}) call VerifyScreenDump(buf, 'Test_tabpanel_visual_2', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_commandline() function Test_tabpanel_commandline()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -286,18 +286,18 @@ function! Test_tabpanel_commandline()
call writefile(lines, 'XTest_tabpanel_commandline', 'D') call writefile(lines, 'XTest_tabpanel_commandline', 'D')
let buf = RunVimInTerminal('-S XTest_tabpanel_commandline', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_commandline', {'rows': 10, 'cols': 45})
call term_sendkeys(buf, ":ab\<tab>") call term_sendkeys(buf, ":ab\<Tab>")
call VerifyScreenDump(buf, 'Test_tabpanel_commandline_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_commandline_0', {})
call term_sendkeys(buf, "\<esc>") call term_sendkeys(buf, "\<Esc>")
call term_sendkeys(buf, ":set wildoptions=pum\<cr>") call term_sendkeys(buf, ":set wildoptions=pum\<CR>")
call term_sendkeys(buf, ":ab\<tab>") call term_sendkeys(buf, ":ab\<Tab>")
call VerifyScreenDump(buf, 'Test_tabpanel_commandline_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_commandline_1', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_tabline_and_tabpanel() function Test_tabpanel_tabline_and_tabpanel()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -319,7 +319,7 @@ function! Test_tabpanel_tabline_and_tabpanel()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_dont_overflow_into_tabpanel() function Test_tabpanel_dont_overflow_into_tabpanel()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -338,7 +338,7 @@ function! Test_tabpanel_dont_overflow_into_tabpanel()
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_dont_vert_is_multibytes_left() function Test_tabpanel_dont_vert_is_multibytes_left()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -353,19 +353,19 @@ function! Test_tabpanel_dont_vert_is_multibytes_left()
let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibyte_lefts', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibyte_lefts', {'rows': 10, 'cols': 45})
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_0', {})
call term_sendkeys(buf, ":set tabpanelopt=columns:1,vert\<cr>") call term_sendkeys(buf, ":set tabpanelopt=columns:1,vert\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_1', {})
call term_sendkeys(buf, ":set tabpanelopt=columns:10,vert\<cr>") call term_sendkeys(buf, ":set tabpanelopt=columns:10,vert\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_2', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_2', {})
call term_sendkeys(buf, ":set tabpanelopt=columns:2,vert\<cr>") call term_sendkeys(buf, ":set tabpanelopt=columns:2,vert\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_3', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_3', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_dont_vert_is_multibytes_right() function Test_tabpanel_dont_vert_is_multibytes_right()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -380,23 +380,23 @@ function! Test_tabpanel_dont_vert_is_multibytes_right()
let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibytes_right', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibytes_right', {'rows': 10, 'cols': 45})
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_0', {})
call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:1,vert\<cr>") call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:1,vert\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_1', {})
call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:10,vert\<cr>") call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:10,vert\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_2', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_2', {})
call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:2,vert\<cr>") call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:2,vert\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_3', {}) call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_3', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_eval_tabpanel_statusline_tabline() function Test_tabpanel_eval_tabpanel_statusline_tabline()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
function! Expr() function Expr()
return "$%=[%f]%=$" return "$%=[%f]%=$"
endfunction endfunction
set laststatus=2 set laststatus=2
@ -417,13 +417,13 @@ function! Test_tabpanel_eval_tabpanel_statusline_tabline()
let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45})
call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_0', {})
call term_sendkeys(buf, ":set tabpanelopt+=align:right\<cr>") call term_sendkeys(buf, ":set tabpanelopt+=align:right\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_1', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_noeval_tabpanel_statusline_tabline() function Test_tabpanel_noeval_tabpanel_statusline_tabline()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
@ -445,17 +445,17 @@ function! Test_tabpanel_noeval_tabpanel_statusline_tabline()
let buf = RunVimInTerminal('-S XTest_tabpanel_noeval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_noeval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45})
call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_0', {})
call term_sendkeys(buf, ":set tabpanelopt+=align:right\<cr>") call term_sendkeys(buf, ":set tabpanelopt+=align:right\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_1', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function! Test_tabpanel_eval_tabpanel_with_linebreaks() function Test_tabpanel_eval_tabpanel_with_linebreaks()
CheckScreendump CheckScreendump
let lines =<< trim END let lines =<< trim END
function! Expr() function Expr()
return "top\n$%=[%f]%=$\nbottom" return "top\n$%=[%f]%=$\nbottom"
endfunction endfunction
set showtabpanel=2 set showtabpanel=2
@ -471,10 +471,29 @@ function! Test_tabpanel_eval_tabpanel_with_linebreaks()
let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_with_linebreaks', {'rows': 10, 'cols': 45}) let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_with_linebreaks', {'rows': 10, 'cols': 45})
call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_0', {}) call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_0', {})
call term_sendkeys(buf, ":set tabpanelopt+=align:right\<cr>") call term_sendkeys(buf, ":set tabpanelopt+=align:right\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_1', {}) call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_1', {})
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
endfunc endfunc
function Test_tabpanel_tabonly()
CheckScreendump
let lines =<< trim END
tabnew
set showtabpanel=1
norm 100oasdf
vsplit
END
call writefile(lines, 'XTest_tabpanel_tabonly', 'D')
let buf = RunVimInTerminal('-S XTest_tabpanel_tabonly', {'rows': 10, 'cols': 80})
call VerifyScreenDump(buf, 'Test_tabpanel_only_0', {})
call term_sendkeys(buf, ":tabonly\<CR>")
call VerifyScreenDump(buf, 'Test_tabpanel_only_1', {})
call StopVimInTerminal(buf)
endfunc
" vim: shiftwidth=2 sts=2 expandtab " vim: shiftwidth=2 sts=2 expandtab

View File

@ -709,6 +709,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1394,
/**/ /**/
1393, 1393,
/**/ /**/

View File

@ -3463,6 +3463,10 @@ win_close_othertab(win_T *win, int free_buf, tabpage_T *tp)
redraw_tabline = TRUE; redraw_tabline = TRUE;
if (h != tabline_height()) if (h != tabline_height())
shell_new_rows(); shell_new_rows();
#if defined(FEAT_TABPANEL)
redraw_tabpanel = TRUE;
#endif
shell_new_columns();
} }
// Free the memory used for the window. // Free the memory used for the window.