neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit d07cbb2f4225238c345d2f858c9d3e8060fbc995
parent 61217e361821f637a182f52da579622e63561e06
Author: Sean Dewar <6256228+seandewar@users.noreply.github.com>
Date:   Mon,  3 Mar 2025 14:19:32 +0000

fix(terminal): check size when creating new tabpage

Problem: when creating a new tabpage with a terminal window, terminal size is
not updated if there is no statusline.

Solution: do not rely on last_status to implicitly call terminal_check_size as a
side effect of making room for a statusline; call it directly.

Diffstat:
Msrc/nvim/window.c | 4++++
Mtest/functional/terminal/window_spec.lua | 32++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/src/nvim/window.c b/src/nvim/window.c @@ -4279,6 +4279,10 @@ int win_new_tabpage(int after, char *filename) newtp->tp_topframe = topframe; last_status(false); + if (curbuf->terminal) { + terminal_check_size(curbuf->terminal); + } + redraw_all_later(UPD_NOT_VALID); tabpage_check_windows(old_curtab); diff --git a/test/functional/terminal/window_spec.lua b/test/functional/terminal/window_spec.lua @@ -1,5 +1,6 @@ local t = require('test.testutil') local n = require('test.functional.testnvim')() +local Screen = require('test.functional.ui.screen') local tt = require('test.functional.testterm') local feed_data = tt.feed_data @@ -383,6 +384,37 @@ describe(':terminal window', function() ]]) end) + it('in new tabpage has correct terminal size', function() + screen:set_default_attr_ids({ + [1] = { reverse = true }, + [3] = { bold = true }, + [17] = { background = 2, foreground = Screen.colors.Grey0 }, + [18] = { background = 2, foreground = 8 }, + [19] = { underline = true, foreground = Screen.colors.Grey0, background = 7 }, + [20] = { underline = true, foreground = 5, background = 7 }, + }) + + command('file foo | vsplit') + screen:expect([[ + tty ready │tty ready | + rows: 5, cols: 25 │rows: 5, cols: 25 | + ^ │ | + │ |*2 + {17:foo [-] }{18:foo [-] }| + {3:-- TERMINAL --} | + ]]) + command('tab split') + screen:expect([[ + {19: }{20:2}{19: foo }{3: foo }{1: }{19:X}| + tty ready | + rows: 5, cols: 25 | + rows: 5, cols: 50 | + ^ | + | + {3:-- TERMINAL --} | + ]]) + end) + it('not unnecessarily redrawn by events', function() eq('t', eval('mode()')) exec_lua(function()