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 f5cd2e0..1ce4db7 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -257,6 +257,17 @@
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->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 @@
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 8c14fa4..863a784 100644
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -171,3 +171,29 @@
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 d3b3215..a721d42 100644
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 868,
+/**/
867,
/**/
866,