diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-08-02 20:48:41 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-02 20:48:41 +0800 |
commit | def0ced4c7207ee38d77f146e1527f283e44b6f2 (patch) | |
tree | ae235ec9323900433e028084594f3b4dac4ba787 | |
parent | 8ce7e7409f10f0a90ed8aa3f6f179c4b5d44eacb (diff) | |
download | rneovim-def0ced4c7207ee38d77f146e1527f283e44b6f2.tar.gz rneovim-def0ced4c7207ee38d77f146e1527f283e44b6f2.tar.bz2 rneovim-def0ced4c7207ee38d77f146e1527f283e44b6f2.zip |
fix(tabpage): check if ROWS_AVAIL changed for resize (#19620)
N/A patches for version.c:
vim-patch:9.0.0135: comment about tabpage line above the wrong code
Problem: Comment about tabpage line above the wrong code.
Solution: Move the comment. (closes vim/vim#10836)
https://github.com/vim/vim/commit/0b0ccbbfb014e1c9682b86a7a41ff2837b0b8047
-rw-r--r-- | src/nvim/buffer_defs.h | 19 | ||||
-rw-r--r-- | src/nvim/window.c | 11 | ||||
-rw-r--r-- | test/functional/editor/tabpage_spec.lua | 41 |
3 files changed, 55 insertions, 16 deletions
diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index aeba3acbc3..3ef5ea7e02 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -947,16 +947,15 @@ struct diffblock_S { typedef struct tabpage_S tabpage_T; struct tabpage_S { handle_T handle; - tabpage_T *tp_next; ///< next tabpage or NULL - frame_T *tp_topframe; ///< topframe for the windows - win_T *tp_curwin; ///< current window in this Tab page - win_T *tp_prevwin; ///< previous window in this Tab page - win_T *tp_firstwin; ///< first window in this Tab page - win_T *tp_lastwin; ///< last window in this Tab page - long tp_old_Rows; ///< Rows when Tab page was left - long tp_old_Columns; ///< Columns when Tab page was left - long tp_ch_used; ///< value of 'cmdheight' when frame size - ///< was set + tabpage_T *tp_next; ///< next tabpage or NULL + frame_T *tp_topframe; ///< topframe for the windows + win_T *tp_curwin; ///< current window in this Tab page + win_T *tp_prevwin; ///< previous window in this Tab page + win_T *tp_firstwin; ///< first window in this Tab page + win_T *tp_lastwin; ///< last window in this Tab page + long tp_old_Rows_avail; ///< ROWS_AVAIL when Tab page was left + long tp_old_Columns; ///< Columns when Tab page was left + long tp_ch_used; ///< value of 'cmdheight' when frame size was set diff_T *tp_first_diff; buf_T *(tp_diffbuf[DB_COUNT]); diff --git a/src/nvim/window.c b/src/nvim/window.c index e820be626c..c7f038850e 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -4293,7 +4293,7 @@ static int leave_tabpage(buf_T *new_curbuf, bool trigger_leave_autocmds) tp->tp_prevwin = prevwin; tp->tp_firstwin = firstwin; tp->tp_lastwin = lastwin; - tp->tp_old_Rows = Rows; + tp->tp_old_Rows_avail = ROWS_AVAIL; tp->tp_old_Columns = Columns; firstwin = NULL; lastwin = NULL; @@ -4333,10 +4333,7 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, bool trigger_enter_a const int row = win_comp_pos(); // recompute w_winrow for all windows diff_need_scrollbind = true; - // The tabpage line may have appeared or disappeared, may need to resize - // the frames for that. When the Vim window was resized need to update - // frame sizes too. Use the stored value of p_ch, so that it can be - // different for each tab page. + // Use the stored value of p_ch, so that it can be different for each tab page. if (p_ch != curtab->tp_ch_used) { clear_cmdline = true; } @@ -4349,7 +4346,9 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, bool trigger_enter_a clear_cmdline = true; } - if (curtab->tp_old_Rows != Rows || (old_off != firstwin->w_winrow)) { + // The tabpage line may have appeared or disappeared, may need to resize the frames for that. + // When the Vim window was resized or ROWS_AVAIL changed need to update frame sizes too. + if (curtab->tp_old_Rows_avail != ROWS_AVAIL || (old_off != firstwin->w_winrow)) { win_new_screen_rows(); } if (curtab->tp_old_Columns != Columns && starting == 0) { diff --git a/test/functional/editor/tabpage_spec.lua b/test/functional/editor/tabpage_spec.lua index 3b2c1db350..7dd0b9f154 100644 --- a/test/functional/editor/tabpage_spec.lua +++ b/test/functional/editor/tabpage_spec.lua @@ -1,4 +1,5 @@ local helpers = require('test.functional.helpers')(after_each) +local Screen = require('test.functional.ui.screen') local clear = helpers.clear local command = helpers.command @@ -53,6 +54,46 @@ describe('tabpage', function() neq(999, eval('g:win_closed')) end) + it('switching tabpage after setting laststatus=3 #19591', function() + local screen = Screen.new(40, 8) + screen:set_default_attr_ids({ + [0] = {bold = true, foreground = Screen.colors.Blue}, + [1] = {bold = true, reverse = true}, -- StatusLine + [2] = {reverse = true}, -- StatusLineNC, TabLineFill + [3] = {bold = true}, -- TabLineSel + [4] = {background = Screen.colors.LightGrey, underline = true}, -- TabLine + [5] = {bold = true, foreground = Screen.colors.Magenta}, + }) + screen:attach() + + command('tabnew') + command('tabprev') + command('set laststatus=3') + command('tabnext') + feed('<C-G>') + screen:expect([[ + {4: [No Name] }{3: [No Name] }{2: }{4:X}| + ^ | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {1:[No Name] }| + "[No Name]" --No lines in buffer-- | + ]]) + command('vnew') + screen:expect([[ + {4: [No Name] }{3: }{5:2}{3: [No Name] }{2: }{4:X}| + ^ │ | + {0:~ }│{0:~ }| + {0:~ }│{0:~ }| + {0:~ }│{0:~ }| + {0:~ }│{0:~ }| + {1:[No Name] }| + "[No Name]" --No lines in buffer-- | + ]]) + end) + it(":tabmove handles modifiers and addr", function() command('tabnew | tabnew | tabnew') eq(4, funcs.nvim_tabpage_get_number(0)) |