mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.0868: cannot specify the terminal size on the command line
Problem: Cannot specify the terminal size on the command line. Solution: Use the address range for the terminal size. (Yasuhiro Matsumoto, closes #1941)
This commit is contained in:
@@ -257,6 +257,17 @@ term_start(char_u *cmd, jobopt_T *opt)
|
|||||||
split_ea.cmdidx = CMD_new;
|
split_ea.cmdidx = CMD_new;
|
||||||
split_ea.cmd = (char_u *)"new";
|
split_ea.cmd = (char_u *)"new";
|
||||||
split_ea.arg = (char_u *)"";
|
split_ea.arg = (char_u *)"";
|
||||||
|
if (opt->jo_term_rows > 0 && !(cmdmod.split & WSP_VERT))
|
||||||
|
{
|
||||||
|
split_ea.line2 = opt->jo_term_rows;
|
||||||
|
split_ea.addr_count = 1;
|
||||||
|
}
|
||||||
|
if (opt->jo_term_cols > 0 && (cmdmod.split & WSP_VERT))
|
||||||
|
{
|
||||||
|
split_ea.line2 = opt->jo_term_cols;
|
||||||
|
split_ea.addr_count = 1;
|
||||||
|
}
|
||||||
|
|
||||||
ex_splitview(&split_ea);
|
ex_splitview(&split_ea);
|
||||||
if (curwin == old_curwin)
|
if (curwin == old_curwin)
|
||||||
{
|
{
|
||||||
@@ -267,6 +278,12 @@ term_start(char_u *cmd, jobopt_T *opt)
|
|||||||
term->tl_buffer = curbuf;
|
term->tl_buffer = curbuf;
|
||||||
curbuf->b_term = term;
|
curbuf->b_term = term;
|
||||||
|
|
||||||
|
/* only one size was taken care of with :new, do the other one */
|
||||||
|
if (opt->jo_term_rows > 0 && (cmdmod.split & WSP_VERT))
|
||||||
|
win_setheight(opt->jo_term_rows);
|
||||||
|
if (opt->jo_term_cols > 0 && !(cmdmod.split & WSP_VERT))
|
||||||
|
win_setwidth(opt->jo_term_cols);
|
||||||
|
|
||||||
/* Link the new terminal in the list of active terminals. */
|
/* Link the new terminal in the list of active terminals. */
|
||||||
term->tl_next = first_term;
|
term->tl_next = first_term;
|
||||||
first_term = term;
|
first_term = term;
|
||||||
@@ -338,7 +355,20 @@ ex_terminal(exarg_T *eap)
|
|||||||
jobopt_T opt;
|
jobopt_T opt;
|
||||||
|
|
||||||
init_job_options(&opt);
|
init_job_options(&opt);
|
||||||
/* TODO: get options from before the command */
|
|
||||||
|
if (eap->addr_count == 2)
|
||||||
|
{
|
||||||
|
opt.jo_term_rows = eap->line1;
|
||||||
|
opt.jo_term_cols = eap->line2;
|
||||||
|
}
|
||||||
|
else if (eap->addr_count == 1)
|
||||||
|
{
|
||||||
|
if (cmdmod.split & WSP_VERT)
|
||||||
|
opt.jo_term_cols = eap->line2;
|
||||||
|
else
|
||||||
|
opt.jo_term_rows = eap->line2;
|
||||||
|
}
|
||||||
|
/* TODO: get more options from before the command */
|
||||||
|
|
||||||
term_start(eap->arg, &opt);
|
term_start(eap->arg, &opt);
|
||||||
}
|
}
|
||||||
|
@@ -171,3 +171,29 @@ func Test_terminal_scrape()
|
|||||||
exe buf . 'bwipe'
|
exe buf . 'bwipe'
|
||||||
call delete('Xtext')
|
call delete('Xtext')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_terminal_size()
|
||||||
|
let cmd = Get_cat_cmd()
|
||||||
|
|
||||||
|
exe '5terminal ' . cmd
|
||||||
|
let size = term_getsize('')
|
||||||
|
bwipe!
|
||||||
|
call assert_equal(5, size[0])
|
||||||
|
|
||||||
|
vsplit
|
||||||
|
exe '5,33terminal ' . cmd
|
||||||
|
let size = term_getsize('')
|
||||||
|
bwipe!
|
||||||
|
call assert_equal([5, 33], size)
|
||||||
|
|
||||||
|
exe 'vertical 20terminal ' . cmd
|
||||||
|
let size = term_getsize('')
|
||||||
|
bwipe!
|
||||||
|
call assert_equal(20, size[1])
|
||||||
|
|
||||||
|
split
|
||||||
|
exe 'vertical 6,20terminal ' . cmd
|
||||||
|
let size = term_getsize('')
|
||||||
|
bwipe!
|
||||||
|
call assert_equal([6, 20], size)
|
||||||
|
endfunc
|
||||||
|
@@ -769,6 +769,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 */
|
||||||
|
/**/
|
||||||
|
868,
|
||||||
/**/
|
/**/
|
||||||
867,
|
867,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user