From: Hirohito Higashi Date: Sun, 15 Jun 2025 14:09:22 +0000 (+0200) Subject: patch 9.1.1458: tabpanel: tabs not properly updated with 'stpl' X-Git-Tag: v9.1.1458^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f5aa269f2d51fe2366e35d7fc3626b05aba31651;p=thirdparty%2Fvim.git patch 9.1.1458: tabpanel: tabs not properly updated with 'stpl' Problem: tabpanel: tabs not properly updated with 'stpl' Solution: remember the Column offset per tabpage (Hirohito Higashi) fixes: #17519 closes: #17544 Signed-off-by: Hirohito Higashi Signed-off-by: Christian Brabandt --- diff --git a/src/structs.h b/src/structs.h index 55181eb42c..250dc2fbdd 100644 --- a/src/structs.h +++ b/src/structs.h @@ -3654,6 +3654,7 @@ struct tabpage_S long tp_old_Rows; // Rows when Tab page was left long tp_old_Columns; // Columns when Tab page was left, -1 when // calling shell_new_columns() postponed + int tp_old_coloff; // Column offset when Tab page was left long tp_ch_used; // value of 'cmdheight' when frame size // was set #ifdef FEAT_GUI diff --git a/src/tabpanel.c b/src/tabpanel.c index 260768a3d5..d0f2d151a7 100644 --- a/src/tabpanel.c +++ b/src/tabpanel.c @@ -106,7 +106,6 @@ tabpanelopt_changed(void) tpl_is_vert = new_is_vert; shell_new_columns(); - redraw_tabpanel = TRUE; if (do_equal) win_equal(curwin, FALSE, 0); diff --git a/src/term.c b/src/term.c index 6f7983bfbf..c7ac8ab778 100644 --- a/src/term.c +++ b/src/term.c @@ -3614,8 +3614,10 @@ win_new_shellsize(void) { static int old_Rows = 0; static int old_Columns = 0; + static int old_coloff = 0; - if (old_Rows != Rows || old_Columns != Columns) + if (old_Rows != Rows || old_Columns != COLUMNS_WITHOUT_TPL() + || old_coloff != TPL_LCOL(NULL)) ui_new_shellsize(); if (old_Rows != Rows) { @@ -3627,20 +3629,12 @@ win_new_shellsize(void) old_Rows = Rows; shell_new_rows(); // update window sizes } - if (old_Columns != Columns) + if (old_Columns != COLUMNS_WITHOUT_TPL() || old_coloff != TPL_LCOL(NULL)) { - old_Columns = Columns; + old_Columns = COLUMNS_WITHOUT_TPL(); + old_coloff = TPL_LCOL(NULL); - tabpage_T *save_curtab = curtab; - tabpage_T *tp; - FOR_ALL_TABPAGES(tp) - { - unuse_tabpage(curtab); - use_tabpage(tp); - shell_new_columns(); - } - unuse_tabpage(curtab); - use_tabpage(save_curtab); + shell_new_columns(); } } diff --git a/src/testdir/dumps/Test_tabpanel_stpl_eq_0_0.dump b/src/testdir/dumps/Test_tabpanel_stpl_eq_0_0.dump new file mode 100644 index 0000000000..8a25711c64 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_stpl_eq_0_0.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|+| |[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|0@3| | +1&&@57|X+8#0000001#e0e0e08 +> +0#0000000#ffffff0@77 +|~+0#4040ff13&| @76 +|~| @76 +|~| @76 +|~| @76 +|~| @76 +|~| @76 +|~| @76 +| +0#0000000&@77 diff --git a/src/testdir/dumps/Test_tabpanel_stpl_eq_0_1.dump b/src/testdir/dumps/Test_tabpanel_stpl_eq_0_1.dump new file mode 100644 index 0000000000..2ed5307824 --- /dev/null +++ b/src/testdir/dumps/Test_tabpanel_stpl_eq_0_1.dump @@ -0,0 +1,10 @@ +| +2&#ffffff0|+| |[|N|o| |N|a|m|e|]| | +8#0000001#e0e0e08|0@3| | +1#0000000#ffffff0@57|X+8#0000001#e0e0e08 +>a+0#0000000#ffffff0@2| @74 +|b@2| @74 +|c@2| @74 +|d@2| @74 +|~+0#4040ff13&| @76 +|~| @76 +|~| @76 +|~| @76 +| +0#0000000&@77 diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim index 959734fcad..0d79650834 100644 --- a/src/testdir/test_tabpanel.vim +++ b/src/testdir/test_tabpanel.vim @@ -10,6 +10,25 @@ function s:reset() set showtabpanel& endfunc +function Test_tabpanel_showtabpanel_eq_0() + CheckScreendump + + let lines =<< trim END + set showtabpanel=2 + set noruler + call setbufline(bufnr(), 1, ['aaa','bbb','ccc','ddd']) + tabnew 0000 + END + call writefile(lines, 'XTest_tabpanel_stpl_eq_0', 'D') + + let buf = RunVimInTerminal('-S XTest_tabpanel_stpl_eq_0', {'rows': 10, 'cols': 78}) + call term_sendkeys(buf, ":set showtabpanel=0\\") + call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_0_0', {}) + call term_sendkeys(buf, ":tabnext\\") + call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_0_1', {}) + call StopVimInTerminal(buf) +endfunc + function Test_tabpanel_showtabpanel_eq_1() CheckScreendump diff --git a/src/version.c b/src/version.c index a9e73850fb..570a0886c4 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1458, /**/ 1457, /**/ diff --git a/src/window.c b/src/window.c index f3b23e85a3..52f4b1a8bd 100644 --- a/src/window.c +++ b/src/window.c @@ -3463,9 +3463,6 @@ win_close_othertab(win_T *win, int free_buf, tabpage_T *tp) redraw_tabline = TRUE; if (h != tabline_height()) shell_new_rows(); -#if defined(FEAT_TABPANEL) - redraw_tabpanel = TRUE; -#endif shell_new_columns(); } @@ -4767,19 +4764,7 @@ win_new_tabpage(int after) #endif #if defined(FEAT_TABPANEL) if (prev_columns != COLUMNS_WITHOUT_TPL()) - { - tabpage_T *save_curtab = curtab; - - unuse_tabpage(curtab); - use_tabpage(prev_tp); - shell_new_rows(); shell_new_columns(); - - unuse_tabpage(curtab); - use_tabpage(save_curtab); - shell_new_rows(); - shell_new_columns(); - } #endif redraw_all_later(UPD_NOT_VALID); apply_autocmds(EVENT_WINNEW, NULL, NULL, FALSE, curbuf); @@ -4988,7 +4973,10 @@ leave_tabpage( tp->tp_lastwin = lastwin; tp->tp_old_Rows = Rows; if (tp->tp_old_Columns != -1) + { tp->tp_old_Columns = topframe->fr_width; + tp->tp_old_coloff = firstwin->w_wincol; + } firstwin = NULL; lastwin = NULL; return OK; @@ -5051,12 +5039,14 @@ enter_tabpage( #endif )) shell_new_rows(); - if (curtab->tp_old_Columns != topframe->fr_width) + if (curtab->tp_old_Columns != COLUMNS_WITHOUT_TPL() + || curtab->tp_old_coloff != TPL_LCOL(NULL)) { if (starting == 0) { shell_new_columns(); // update window widths curtab->tp_old_Columns = topframe->fr_width; + curtab->tp_old_coloff = firstwin->w_wincol; } else curtab->tp_old_Columns = -1; // update window widths later