1
0
forked from aniani/vim

patch 8.0.1624: options for term_dumpdiff() and term_dumpload() not implemented

Problem:    Options for term_dumpdiff() and term_dumpload() not implemented
            yet.
Solution:   Implement the relevant options.
This commit is contained in:
Bram Moolenaar
2018-03-20 18:35:53 +01:00
parent 3e8d385347
commit 5a3a49ed59
3 changed files with 44 additions and 15 deletions

View File

@@ -342,6 +342,7 @@ term_start(
buf_T *old_curbuf = NULL;
int res;
buf_T *newbuf;
int vertical = opt->jo_vertical || (cmdmod.split & WSP_VERT);
if (check_restricted() || check_secure())
return NULL;
@@ -411,17 +412,19 @@ term_start(
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))
if (opt->jo_term_rows > 0 && !vertical)
{
split_ea.line2 = opt->jo_term_rows;
split_ea.addr_count = 1;
}
if (opt->jo_term_cols > 0 && (cmdmod.split & WSP_VERT))
if (opt->jo_term_cols > 0 && vertical)
{
split_ea.line2 = opt->jo_term_cols;
split_ea.addr_count = 1;
}
if (vertical)
cmdmod.split |= WSP_VERT;
ex_splitview(&split_ea);
if (curwin == old_curwin)
{
@@ -437,11 +440,9 @@ term_start(
{
/* Only one size was taken care of with :new, do the other one. With
* "curwin" both need to be done. */
if (opt->jo_term_rows > 0 && (opt->jo_curwin
|| (cmdmod.split & WSP_VERT)))
if (opt->jo_term_rows > 0 && (opt->jo_curwin || vertical))
win_setheight(opt->jo_term_rows);
if (opt->jo_term_cols > 0 && (opt->jo_curwin
|| !(cmdmod.split & WSP_VERT)))
if (opt->jo_term_cols > 0 && (opt->jo_curwin || !vertical))
win_setwidth(opt->jo_term_cols);
}
@@ -3732,6 +3733,7 @@ term_load_dump(typval_T *argvars, typval_T *rettv, int do_diff)
char_u buf2[NUMBUFLEN];
char_u *fname1;
char_u *fname2 = NULL;
char_u *fname_tofree = NULL;
FILE *fd1;
FILE *fd2 = NULL;
char_u *textline = NULL;
@@ -3763,10 +3765,23 @@ term_load_dump(typval_T *argvars, typval_T *rettv, int do_diff)
}
init_job_options(&opt);
/* TODO: use the {options} argument */
if (argvars[do_diff ? 2 : 1].v_type != VAR_UNKNOWN
&& get_job_options(&argvars[do_diff ? 2 : 1], &opt, 0,
JO2_TERM_NAME + JO2_TERM_COLS + JO2_TERM_ROWS
+ JO2_VERTICAL + JO2_CURWIN + JO2_NORESTORE) == FAIL)
goto theend;
/* TODO: use the file name arguments for the buffer name */
opt.jo_term_name = (char_u *)"dump diff";
if (opt.jo_term_name == NULL)
{
int len = STRLEN(fname1) + 12;
fname_tofree = alloc(len);
if (fname_tofree != NULL)
{
vim_snprintf((char *)fname_tofree, len, "dump diff %s", fname1);
opt.jo_term_name = fname_tofree;
}
}
buf = term_start(&argvars[0], NULL, &opt, TERM_START_NOJOB);
if (buf != NULL && buf->b_term != NULL)
@@ -3937,6 +3952,7 @@ term_load_dump(typval_T *argvars, typval_T *rettv, int do_diff)
theend:
vim_free(textline);
vim_free(fname_tofree);
fclose(fd1);
if (fd2 != NULL)
fclose(fd2);
@@ -4541,8 +4557,6 @@ f_term_start(typval_T *argvars, typval_T *rettv)
+ JO2_NORESTORE + JO2_TERM_KILL) == FAIL)
return;
if (opt.jo_vertical)
cmdmod.split = WSP_VERT;
buf = term_start(&argvars[0], NULL, &opt, 0);
if (buf != NULL && buf->b_term != NULL)