Mercurial > vim
changeset 11975:5cc005cf312f v8.0.0868
patch 8.0.0868: cannot specify the terminal size on the command line
commit https://github.com/vim/vim/commit/cfcc022c54e66b317ddcc8a807977230b056a542
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 05 Aug 2017 17:15:04 +0200 |
parents | 04f021e507e2 |
children | f7767ff24574 |
files | src/terminal.c src/testdir/test_terminal.vim src/version.c |
diffstat | 3 files changed, 59 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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); }
--- 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