# HG changeset patch # User Christian Brabandt # Date 1501946104 -7200 # Node ID 5cc005cf312f6d3f34fab2345d4531fb527bbb1d # Parent 04f021e507e2d71dcb2ab073bcc6f1ad44359354 patch 8.0.0868: cannot specify the terminal size on the command line commit https://github.com/vim/vim/commit/cfcc022c54e66b317ddcc8a807977230b056a542 Author: Bram Moolenaar Date: Sat Aug 5 17:13:48 2017 +0200 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) diff --git a/src/terminal.c b/src/terminal.c --- a/src/terminal.c +++ b/src/terminal.c @@ -257,6 +257,17 @@ term_start(char_u *cmd, jobopt_T *opt) split_ea.cmdidx = CMD_new; split_ea.cmd = (char_u *)"new"; 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); if (curwin == old_curwin) { @@ -267,6 +278,12 @@ term_start(char_u *cmd, jobopt_T *opt) term->tl_buffer = curbuf; 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. */ term->tl_next = first_term; first_term = term; @@ -338,7 +355,20 @@ ex_terminal(exarg_T *eap) jobopt_T 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); } diff --git a/src/testdir/test_terminal.vim b/src/testdir/test_terminal.vim --- a/src/testdir/test_terminal.vim +++ b/src/testdir/test_terminal.vim @@ -171,3 +171,29 @@ func Test_terminal_scrape() exe buf . 'bwipe' call delete('Xtext') 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 diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 868, +/**/ 867, /**/ 866,