From: Bram Moolenaar Date: Sat, 5 Aug 2017 15:13:48 +0000 (+0200) Subject: patch 8.0.0868: cannot specify the terminal size on the command line X-Git-Tag: v8.0.0868 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cfcc022c54e66b317ddcc8a807977230b056a542;p=vim 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 index f5cd2e019..1ce4db7e9 100644 --- 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 index 8c14fa4d0..863a784b9 100644 --- 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 index d3b3215fc..a721d4254 100644 --- a/src/version.c +++ b/src/version.c @@ -769,6 +769,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 868, /**/ 867, /**/