mirror of
https://github.com/vim/vim.git
synced 2025-07-04 23:07:33 -04:00
patch 8.2.1589: term_start() options for size are overruled by 'termwinsize'
Problem: Term_start() options for size are overruled by 'termwinsize'. (Sergey Vlasov) Solution: Set 'termwinsize' to the specified size.
This commit is contained in:
parent
077cc7aa0e
commit
b936b79424
@ -280,8 +280,11 @@ parse_termwinsize(win_T *wp, int *rows, int *cols)
|
|||||||
* Determine the terminal size from 'termwinsize' and the current window.
|
* Determine the terminal size from 'termwinsize' and the current window.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
set_term_and_win_size(term_T *term)
|
set_term_and_win_size(term_T *term, jobopt_T *opt)
|
||||||
{
|
{
|
||||||
|
int rows, cols;
|
||||||
|
int minsize;
|
||||||
|
|
||||||
#ifdef FEAT_GUI
|
#ifdef FEAT_GUI
|
||||||
if (term->tl_system)
|
if (term->tl_system)
|
||||||
{
|
{
|
||||||
@ -292,21 +295,39 @@ set_term_and_win_size(term_T *term)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (parse_termwinsize(curwin, &term->tl_rows, &term->tl_cols))
|
term->tl_rows = curwin->w_height;
|
||||||
|
term->tl_cols = curwin->w_width;
|
||||||
|
|
||||||
|
minsize = parse_termwinsize(curwin, &rows, &cols);
|
||||||
|
if (minsize)
|
||||||
{
|
{
|
||||||
if (term->tl_rows != 0)
|
if (term->tl_rows < rows)
|
||||||
term->tl_rows = MAX(term->tl_rows, curwin->w_height);
|
term->tl_rows = rows;
|
||||||
if (term->tl_cols != 0)
|
if (term->tl_cols < cols)
|
||||||
term->tl_cols = MAX(term->tl_cols, curwin->w_width);
|
term->tl_cols = cols;
|
||||||
}
|
}
|
||||||
if (term->tl_rows == 0)
|
if ((opt->jo_set2 & JO2_TERM_ROWS))
|
||||||
term->tl_rows = curwin->w_height;
|
term->tl_rows = opt->jo_term_rows;
|
||||||
else
|
else if (rows != 0)
|
||||||
|
term->tl_rows = rows;
|
||||||
|
if ((opt->jo_set2 & JO2_TERM_COLS))
|
||||||
|
term->tl_cols = opt->jo_term_cols;
|
||||||
|
else if (cols != 0)
|
||||||
|
term->tl_cols = cols;
|
||||||
|
|
||||||
|
if (term->tl_rows != curwin->w_height)
|
||||||
win_setheight_win(term->tl_rows, curwin);
|
win_setheight_win(term->tl_rows, curwin);
|
||||||
if (term->tl_cols == 0)
|
if (term->tl_cols != curwin->w_width)
|
||||||
term->tl_cols = curwin->w_width;
|
|
||||||
else
|
|
||||||
win_setwidth_win(term->tl_cols, curwin);
|
win_setwidth_win(term->tl_cols, curwin);
|
||||||
|
|
||||||
|
// Set 'winsize' now to avoid a resize at the next redraw.
|
||||||
|
if (!minsize && *curwin->w_p_tws != NUL)
|
||||||
|
{
|
||||||
|
char_u buf[100];
|
||||||
|
|
||||||
|
vim_snprintf((char *)buf, 100, "%dx%d", term->tl_rows, term->tl_cols);
|
||||||
|
set_option_value((char_u *)"termwinsize", 0L, buf, OPT_LOCAL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -603,7 +624,7 @@ term_start(
|
|||||||
// the job finished.
|
// the job finished.
|
||||||
curbuf->b_p_ma = FALSE;
|
curbuf->b_p_ma = FALSE;
|
||||||
|
|
||||||
set_term_and_win_size(term);
|
set_term_and_win_size(term, opt);
|
||||||
#ifdef MSWIN
|
#ifdef MSWIN
|
||||||
mch_memmove(orig_opt.jo_io, opt->jo_io, sizeof(orig_opt.jo_io));
|
mch_memmove(orig_opt.jo_io, opt->jo_io, sizeof(orig_opt.jo_io));
|
||||||
#endif
|
#endif
|
||||||
|
@ -73,7 +73,8 @@ func RunVimInTerminal(arguments, options)
|
|||||||
set t_Co=256 background=light
|
set t_Co=256 background=light
|
||||||
hi Normal ctermfg=NONE ctermbg=NONE
|
hi Normal ctermfg=NONE ctermbg=NONE
|
||||||
|
|
||||||
" Make the window 20 lines high and 75 columns, unless told otherwise.
|
" Make the window 20 lines high and 75 columns, unless told otherwise or
|
||||||
|
" 'termwinsize' is set.
|
||||||
let rows = get(a:options, 'rows', 20)
|
let rows = get(a:options, 'rows', 20)
|
||||||
let cols = get(a:options, 'cols', 75)
|
let cols = get(a:options, 'cols', 75)
|
||||||
let statusoff = get(a:options, 'statusoff', 1)
|
let statusoff = get(a:options, 'statusoff', 1)
|
||||||
@ -86,11 +87,12 @@ func RunVimInTerminal(arguments, options)
|
|||||||
|
|
||||||
let cmd = GetVimCommandCleanTerm() .. reset_u7 .. a:arguments
|
let cmd = GetVimCommandCleanTerm() .. reset_u7 .. a:arguments
|
||||||
|
|
||||||
let options = {
|
let options = #{curwin: 1}
|
||||||
\ 'curwin': 1,
|
if &termwinsize == ''
|
||||||
\ 'term_rows': rows,
|
let options.term_rows = rows
|
||||||
\ 'term_cols': cols,
|
let options.term_cols = cols
|
||||||
\ }
|
endif
|
||||||
|
|
||||||
" Accept other options whose name starts with 'term_'.
|
" Accept other options whose name starts with 'term_'.
|
||||||
call extend(options, filter(copy(a:options), 'v:key =~# "^term_"'))
|
call extend(options, filter(copy(a:options), 'v:key =~# "^term_"'))
|
||||||
|
|
||||||
|
@ -109,6 +109,27 @@ func Test_terminal_termwinsize_minimum()
|
|||||||
set termwinsize=
|
set termwinsize=
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_terminal_termwinsize_overruled()
|
||||||
|
let cmd = GetDummyCmd()
|
||||||
|
set termwinsize=5x43
|
||||||
|
let buf = term_start(cmd, #{term_rows: 7, term_cols: 50})
|
||||||
|
call TermWait(buf)
|
||||||
|
call assert_equal([7, 50], term_getsize(buf))
|
||||||
|
exe "bwipe! " .. buf
|
||||||
|
|
||||||
|
let buf = term_start(cmd, #{term_cols: 50})
|
||||||
|
call TermWait(buf)
|
||||||
|
call assert_equal([5, 50], term_getsize(buf))
|
||||||
|
exe "bwipe! " .. buf
|
||||||
|
|
||||||
|
let buf = term_start(cmd, #{term_rows: 7})
|
||||||
|
call TermWait(buf)
|
||||||
|
call assert_equal([7, 43], term_getsize(buf))
|
||||||
|
exe "bwipe! " .. buf
|
||||||
|
|
||||||
|
set termwinsize=
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_terminal_termwinkey()
|
func Test_terminal_termwinkey()
|
||||||
" make three tabpages, terminal in the middle
|
" make three tabpages, terminal in the middle
|
||||||
0tabnew
|
0tabnew
|
||||||
@ -397,13 +418,17 @@ func Test_terminal_does_not_truncate_last_newlines()
|
|||||||
call delete('Xfile')
|
call delete('Xfile')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_terminal_no_job()
|
func GetDummyCmd()
|
||||||
if has('win32')
|
if has('win32')
|
||||||
let cmd = 'cmd /c ""'
|
return 'cmd /c ""'
|
||||||
else
|
else
|
||||||
CheckExecutable false
|
CheckExecutable false
|
||||||
let cmd = 'false'
|
return 'false'
|
||||||
endif
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_terminal_no_job()
|
||||||
|
let cmd = GetDummyCmd()
|
||||||
let term = term_start(cmd, {'term_finish': 'close'})
|
let term = term_start(cmd, {'term_finish': 'close'})
|
||||||
call WaitForAssert({-> assert_equal(v:null, term_getjob(term)) })
|
call WaitForAssert({-> assert_equal(v:null, term_getjob(term)) })
|
||||||
endfunc
|
endfunc
|
||||||
|
@ -754,6 +754,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 */
|
||||||
|
/**/
|
||||||
|
1589,
|
||||||
/**/
|
/**/
|
||||||
1588,
|
1588,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user