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.

Raspunde prin e-mail lui