patch 9.1.1403: expansion of 'tabpanelopt' value adds wrong values
Problem: expansion of 'tabpanelopt' value adds wrong values
(Shane-XB-Qian, after v9.1.1391)
Solution: update tabpanelopt expansion function and expand only valid
values (Hirohito Higashi)
related: #17263
closes: #17359
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
5b07aff2f6
commit
598bbb1941
@ -2537,7 +2537,8 @@ static struct vimoption options[] =
|
||||
{"tabpanel", "tpl", P_STRING|P_VI_DEF|P_RALL,
|
||||
(char_u *)&p_tpl, PV_NONE, NULL, NULL,
|
||||
{(char_u *)"", (char_u *)0L} SCTX_INIT},
|
||||
{"tabpanelopt","tplo", P_STRING|P_VI_DEF|P_ONECOMMA|P_NODUP,
|
||||
{"tabpanelopt","tplo", P_STRING|P_ALLOCED|P_VI_DEF|P_ONECOMMA|P_COLON
|
||||
|P_NODUP,
|
||||
(char_u *)&p_tplo, PV_NONE, did_set_tabpanelopt,
|
||||
expand_set_tabpanelopt,
|
||||
{(char_u *)"", (char_u *)0L}
|
||||
|
||||
@ -29,7 +29,9 @@ static char *(p_bo_values[]) = {"all", "backspace", "cursor", "complete",
|
||||
static char *(p_briopt_values[]) = {"shift:", "min:", "sbr", "list:", "column:", NULL};
|
||||
#endif
|
||||
#if defined(FEAT_TABPANEL)
|
||||
static char *(p_tpl_values[]) = {"wrap", "align:", "columns:", "vert:", NULL};
|
||||
// Note: Keep this in sync with tabpanelopt_changed()
|
||||
static char *(p_tplo_values[]) = {"align:", "columns:", "vert", NULL};
|
||||
static char *(p_tplo_align_values[]) = {"left", "right", NULL};
|
||||
#endif
|
||||
#if defined(FEAT_DIFF)
|
||||
// Note: Keep this in sync with diffopt_changed()
|
||||
@ -3567,10 +3569,29 @@ did_set_tabpanelopt(optset_T *args)
|
||||
int
|
||||
expand_set_tabpanelopt(optexpand_T *args, int *numMatches, char_u ***matches)
|
||||
{
|
||||
expand_T *xp = args->oe_xp;
|
||||
|
||||
if (xp->xp_pattern > args->oe_set_arg && *(xp->xp_pattern-1) == ':')
|
||||
{
|
||||
// Within "align:", we have a subgroup of possible options.
|
||||
int align_len = (int)STRLEN("align:");
|
||||
if (xp->xp_pattern - args->oe_set_arg >= align_len &&
|
||||
STRNCMP(xp->xp_pattern - align_len, "align:", align_len) == 0)
|
||||
{
|
||||
return expand_set_opt_string(
|
||||
args,
|
||||
p_tplo_align_values,
|
||||
ARRAY_LENGTH(p_tplo_align_values) - 1,
|
||||
numMatches,
|
||||
matches);
|
||||
}
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
return expand_set_opt_string(
|
||||
args,
|
||||
p_tpl_values,
|
||||
ARRAY_LENGTH(p_tpl_values) - 1,
|
||||
p_tplo_values,
|
||||
ARRAY_LENGTH(p_tplo_values) - 1,
|
||||
numMatches,
|
||||
matches);
|
||||
}
|
||||
|
||||
@ -64,15 +64,21 @@ tabpanelopt_changed(void)
|
||||
p = p_tplo;
|
||||
while (*p != NUL)
|
||||
{
|
||||
if (STRNCMP(p, "align:left", 10) == 0)
|
||||
if (STRNCMP(p, "align:", 6) == 0)
|
||||
{
|
||||
p += 10;
|
||||
new_align = ALIGN_LEFT;
|
||||
}
|
||||
else if (STRNCMP(p, "align:right", 11) == 0)
|
||||
{
|
||||
p += 11;
|
||||
new_align = ALIGN_RIGHT;
|
||||
p += 6;
|
||||
if (STRNCMP(p, "left", 4) == 0)
|
||||
{
|
||||
p += 4;
|
||||
new_align = ALIGN_LEFT;
|
||||
}
|
||||
else if (STRNCMP(p, "right", 5) == 0)
|
||||
{
|
||||
p += 5;
|
||||
new_align = ALIGN_RIGHT;
|
||||
}
|
||||
else
|
||||
return FAIL;
|
||||
}
|
||||
else if (STRNCMP(p, "columns:", 8) == 0 && VIM_ISDIGIT(p[8]))
|
||||
{
|
||||
|
||||
@ -709,6 +709,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1403,
|
||||
/**/
|
||||
1402,
|
||||
/**/
|
||||
|
||||
Reference in New Issue
Block a user