From: Hirohito Higashi Date: Thu, 22 May 2025 20:41:05 +0000 (+0200) Subject: patch 9.1.1403: expansion of 'tabpanelopt' value adds wrong values X-Git-Tag: v9.1.1403^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=598bbb194163931914c45ae1fa4268e589ef3763;p=thirdparty%2Fvim.git 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 Signed-off-by: Christian Brabandt --- diff --git a/src/optiondefs.h b/src/optiondefs.h index cb4376c716..5d9f388aa2 100644 --- a/src/optiondefs.h +++ b/src/optiondefs.h @@ -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} diff --git a/src/optionstr.c b/src/optionstr.c index 553b55f687..b286767e3f 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -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); } diff --git a/src/tabpanel.c b/src/tabpanel.c index fb5a957a3e..81e2c0c079 100644 --- a/src/tabpanel.c +++ b/src/tabpanel.c @@ -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])) { diff --git a/src/version.c b/src/version.c index 1f5cd0222e..f94dbe3e43 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1403, /**/ 1402, /**/