patch 9.1.1403: expansion of 'tabpanelopt' value adds wrong values Commit: https://github.com/vim/vim/commit/598bbb194163931914c45ae1fa4268e589ef3763 Author: Hirohito Higashi <h.east....@gmail.com> Date: Thu May 22 22:41:05 2025 +0200
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....@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/optiondefs.h b/src/optiondefs.h index cb4376c71..5d9f388aa 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 553b55f68..b286767e3 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 fb5a957a3..81e2c0c07 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 1f5cd0222..f94dbe3e4 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, /**/ -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1uID1I-009PC0-Uk%40256bit.org.