vim-patch:8.0.1660: the terminal API "drop" command doesn't support options
Problem: The terminal API "drop" command doesn't support options.
Solution: Implement the options.
333b80acf3
This commit is contained in:
parent
7955c05acc
commit
18d86283b0
|
@ -9151,10 +9151,7 @@ char_u *v_throwpoint(char_u *oldval)
|
||||||
*/
|
*/
|
||||||
char_u *set_cmdarg(exarg_T *eap, char_u *oldarg)
|
char_u *set_cmdarg(exarg_T *eap, char_u *oldarg)
|
||||||
{
|
{
|
||||||
char_u *oldval;
|
char_u *oldval = vimvars[VV_CMDARG].vv_str;
|
||||||
char_u *newval;
|
|
||||||
|
|
||||||
oldval = vimvars[VV_CMDARG].vv_str;
|
|
||||||
if (eap == NULL) {
|
if (eap == NULL) {
|
||||||
xfree(oldval);
|
xfree(oldval);
|
||||||
vimvars[VV_CMDARG].vv_str = oldarg;
|
vimvars[VV_CMDARG].vv_str = oldarg;
|
||||||
|
@ -9170,14 +9167,18 @@ char_u *set_cmdarg(exarg_T *eap, char_u *oldarg)
|
||||||
if (eap->read_edit)
|
if (eap->read_edit)
|
||||||
len += 7;
|
len += 7;
|
||||||
|
|
||||||
if (eap->force_ff != 0)
|
if (eap->force_ff != 0) {
|
||||||
len += STRLEN(eap->cmd + eap->force_ff) + 6;
|
len += 10; // " ++ff=unix"
|
||||||
if (eap->force_enc != 0)
|
}
|
||||||
|
if (eap->force_enc != 0) {
|
||||||
len += STRLEN(eap->cmd + eap->force_enc) + 7;
|
len += STRLEN(eap->cmd + eap->force_enc) + 7;
|
||||||
if (eap->bad_char != 0)
|
}
|
||||||
len += 7 + 4; /* " ++bad=" + "keep" or "drop" */
|
if (eap->bad_char != 0) {
|
||||||
|
len += 7 + 4; // " ++bad=" + "keep" or "drop"
|
||||||
|
}
|
||||||
|
|
||||||
newval = xmalloc(len + 1);
|
const size_t newval_len = len + 1;
|
||||||
|
char_u *newval = xmalloc(newval_len);
|
||||||
|
|
||||||
if (eap->force_bin == FORCE_BIN)
|
if (eap->force_bin == FORCE_BIN)
|
||||||
sprintf((char *)newval, " ++bin");
|
sprintf((char *)newval, " ++bin");
|
||||||
|
@ -9189,18 +9190,23 @@ char_u *set_cmdarg(exarg_T *eap, char_u *oldarg)
|
||||||
if (eap->read_edit)
|
if (eap->read_edit)
|
||||||
STRCAT(newval, " ++edit");
|
STRCAT(newval, " ++edit");
|
||||||
|
|
||||||
if (eap->force_ff != 0)
|
if (eap->force_ff != 0) {
|
||||||
sprintf((char *)newval + STRLEN(newval), " ++ff=%s",
|
snprintf((char *)newval + STRLEN(newval), newval_len, " ++ff=%s",
|
||||||
eap->cmd + eap->force_ff);
|
eap->force_ff == 'u' ? "unix" :
|
||||||
if (eap->force_enc != 0)
|
eap->force_ff == 'd' ? "dos" : "mac");
|
||||||
sprintf((char *)newval + STRLEN(newval), " ++enc=%s",
|
}
|
||||||
eap->cmd + eap->force_enc);
|
if (eap->force_enc != 0) {
|
||||||
if (eap->bad_char == BAD_KEEP)
|
snprintf((char *)newval + STRLEN(newval), newval_len, " ++enc=%s",
|
||||||
|
eap->cmd + eap->force_enc);
|
||||||
|
}
|
||||||
|
if (eap->bad_char == BAD_KEEP) {
|
||||||
STRCPY(newval + STRLEN(newval), " ++bad=keep");
|
STRCPY(newval + STRLEN(newval), " ++bad=keep");
|
||||||
else if (eap->bad_char == BAD_DROP)
|
} else if (eap->bad_char == BAD_DROP) {
|
||||||
STRCPY(newval + STRLEN(newval), " ++bad=drop");
|
STRCPY(newval + STRLEN(newval), " ++bad=drop");
|
||||||
else if (eap->bad_char != 0)
|
} else if (eap->bad_char != 0) {
|
||||||
sprintf((char *)newval + STRLEN(newval), " ++bad=%c", eap->bad_char);
|
snprintf((char *)newval + STRLEN(newval), newval_len, " ++bad=%c",
|
||||||
|
eap->bad_char);
|
||||||
|
}
|
||||||
vimvars[VV_CMDARG].vv_str = newval;
|
vimvars[VV_CMDARG].vv_str = newval;
|
||||||
return oldval;
|
return oldval;
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,7 +160,7 @@ struct exarg {
|
||||||
int regname; ///< register name (NUL if none)
|
int regname; ///< register name (NUL if none)
|
||||||
int force_bin; ///< 0, FORCE_BIN or FORCE_NOBIN
|
int force_bin; ///< 0, FORCE_BIN or FORCE_NOBIN
|
||||||
int read_edit; ///< ++edit argument
|
int read_edit; ///< ++edit argument
|
||||||
int force_ff; ///< ++ff= argument (index in cmd[])
|
int force_ff; ///< ++ff= argument (first char of argument)
|
||||||
int force_enc; ///< ++enc= argument (index in cmd[])
|
int force_enc; ///< ++enc= argument (index in cmd[])
|
||||||
int bad_char; ///< BAD_KEEP, BAD_DROP or replacement byte
|
int bad_char; ///< BAD_KEEP, BAD_DROP or replacement byte
|
||||||
int useridx; ///< user command index
|
int useridx; ///< user command index
|
||||||
|
|
|
@ -4538,6 +4538,19 @@ skip_cmd_arg (
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int get_bad_opt(const char_u *p, exarg_T *eap)
|
||||||
|
FUNC_ATTR_NONNULL_ALL
|
||||||
|
{
|
||||||
|
if (STRICMP(p, "keep") == 0) {
|
||||||
|
eap->bad_char = BAD_KEEP;
|
||||||
|
} else if (STRICMP(p, "drop") == 0) {
|
||||||
|
eap->bad_char = BAD_DROP;
|
||||||
|
} else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL) {
|
||||||
|
eap->bad_char = *p;
|
||||||
|
}
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get "++opt=arg" argument.
|
* Get "++opt=arg" argument.
|
||||||
* Return FAIL or OK.
|
* Return FAIL or OK.
|
||||||
|
@ -4596,8 +4609,10 @@ static int getargopt(exarg_T *eap)
|
||||||
*arg = NUL;
|
*arg = NUL;
|
||||||
|
|
||||||
if (pp == &eap->force_ff) {
|
if (pp == &eap->force_ff) {
|
||||||
if (check_ff_value(eap->cmd + eap->force_ff) == FAIL)
|
if (check_ff_value(eap->cmd + eap->force_ff) == FAIL) {
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
}
|
||||||
|
eap->force_ff = eap->cmd[eap->force_ff];
|
||||||
} else if (pp == &eap->force_enc) {
|
} else if (pp == &eap->force_enc) {
|
||||||
/* Make 'fileencoding' lower case. */
|
/* Make 'fileencoding' lower case. */
|
||||||
for (p = eap->cmd + eap->force_enc; *p != NUL; ++p)
|
for (p = eap->cmd + eap->force_enc; *p != NUL; ++p)
|
||||||
|
@ -4605,15 +4620,9 @@ static int getargopt(exarg_T *eap)
|
||||||
} else {
|
} else {
|
||||||
/* Check ++bad= argument. Must be a single-byte character, "keep" or
|
/* Check ++bad= argument. Must be a single-byte character, "keep" or
|
||||||
* "drop". */
|
* "drop". */
|
||||||
p = eap->cmd + bad_char_idx;
|
if (get_bad_opt(eap->cmd + bad_char_idx, eap) == FAIL) {
|
||||||
if (STRICMP(p, "keep") == 0)
|
|
||||||
eap->bad_char = BAD_KEEP;
|
|
||||||
else if (STRICMP(p, "drop") == 0)
|
|
||||||
eap->bad_char = BAD_DROP;
|
|
||||||
else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
|
|
||||||
eap->bad_char = *p;
|
|
||||||
else
|
|
||||||
return FAIL;
|
return FAIL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
|
|
@ -2032,14 +2032,16 @@ readfile_linenr(
|
||||||
* Fill "*eap" to force the 'fileencoding', 'fileformat' and 'binary to be
|
* Fill "*eap" to force the 'fileencoding', 'fileformat' and 'binary to be
|
||||||
* equal to the buffer "buf". Used for calling readfile().
|
* equal to the buffer "buf". Used for calling readfile().
|
||||||
*/
|
*/
|
||||||
void prep_exarg(exarg_T *eap, buf_T *buf)
|
void prep_exarg(exarg_T *eap, const buf_T *buf)
|
||||||
|
FUNC_ATTR_NONNULL_ALL
|
||||||
{
|
{
|
||||||
eap->cmd = xmalloc(STRLEN(buf->b_p_ff) + STRLEN(buf->b_p_fenc) + 15);
|
const size_t cmd_len = 15 + STRLEN(buf->b_p_fenc);
|
||||||
|
eap->cmd = xmalloc(cmd_len);
|
||||||
|
|
||||||
sprintf((char *)eap->cmd, "e ++ff=%s ++enc=%s", buf->b_p_ff, buf->b_p_fenc);
|
snprintf((char *)eap->cmd, cmd_len, "e ++enc=%s", buf->b_p_fenc);
|
||||||
eap->force_enc = 14 + (int)STRLEN(buf->b_p_ff);
|
eap->force_enc = 8;
|
||||||
eap->bad_char = buf->b_bad_char;
|
eap->bad_char = buf->b_bad_char;
|
||||||
eap->force_ff = 7;
|
eap->force_ff = *buf->b_p_ff;
|
||||||
|
|
||||||
eap->force_bin = buf->b_p_bin ? FORCE_BIN : FORCE_NOBIN;
|
eap->force_bin = buf->b_p_bin ? FORCE_BIN : FORCE_NOBIN;
|
||||||
eap->read_edit = FALSE;
|
eap->read_edit = FALSE;
|
||||||
|
|
|
@ -7294,12 +7294,13 @@ int get_fileformat(buf_T *buf)
|
||||||
/// argument.
|
/// argument.
|
||||||
///
|
///
|
||||||
/// @param eap can be NULL!
|
/// @param eap can be NULL!
|
||||||
int get_fileformat_force(buf_T *buf, exarg_T *eap)
|
int get_fileformat_force(const buf_T *buf, const exarg_T *eap)
|
||||||
|
FUNC_ATTR_NONNULL_ARG(1)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
if (eap != NULL && eap->force_ff != 0) {
|
if (eap != NULL && eap->force_ff != 0) {
|
||||||
c = eap->cmd[eap->force_ff];
|
c = eap->force_ff;
|
||||||
} else {
|
} else {
|
||||||
if ((eap != NULL && eap->force_bin != 0)
|
if ((eap != NULL && eap->force_bin != 0)
|
||||||
? (eap->force_bin == FORCE_BIN) : buf->b_p_bin) {
|
? (eap->force_bin == FORCE_BIN) : buf->b_p_bin) {
|
||||||
|
|
Loading…
Reference in New Issue