patch 8.2.4894: MS-Windows: not using italics v8.2.4894
authorLemonBoy <thatlemon@gmail.com>
Fri, 6 May 2022 17:38:41 +0000 (18:38 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 6 May 2022 17:38:41 +0000 (18:38 +0100)
Problem:    MS-Windows: not using italics.
Solution:   Use italics.  Simplify the code. (closes #10359)

src/term.c
src/version.c

index 827772f50f4e45d7a4069b1a98afedc26916b695..9cc480e6d02fbd3aaa49005ed77002af59db41d5 100644 (file)
@@ -6605,25 +6605,31 @@ update_tcap(int attr)
 
 # ifdef FEAT_TERMGUICOLORS
 #  define KSSIZE 20
-struct ks_tbl_s
-{
-    int  code;         // value of KS_
-    char *vtp;         // code in vtp mode
-    char *vtp2;                // code in vtp2 mode
-    char buf[KSSIZE];   // save buffer in non-vtp mode
-    char vbuf[KSSIZE];  // save buffer in vtp mode
-    char v2buf[KSSIZE]; // save buffer in vtp2 mode
-    char arr[KSSIZE];   // real buffer
+
+typedef enum
+{
+    CMODE_INDEXED = 0, // Use cmd.exe 4bit palette.
+    CMODE_RGB,         // Use 24bit RGB colors using VTP.
+    CMODE_256COL,      // Emulate xterm's 256-color palette using VTP.
+    CMODE_LAST,
+} cmode_T;
+
+struct ks_tbl_S
+{
+    int  code;                         // value of KS_
+    char *vtp;                         // code in RGB mode
+    char *vtp2;                                // code in 256color mode
+    char buf[CMODE_LAST][KSSIZE];      // real buffer
 };
 
-static struct ks_tbl_s ks_tbl[] =
+static struct ks_tbl_S ks_tbl[] =
 {
     {(int)KS_ME,  "\033|0m",  "\033|0m"},   // normal
     {(int)KS_MR,  "\033|7m",  "\033|7m"},   // reverse
     {(int)KS_MD,  "\033|1m",  "\033|1m"},   // bold
     {(int)KS_SO,  "\033|91m", "\033|91m"},  // standout: bright red text
     {(int)KS_SE,  "\033|39m", "\033|39m"},  // standout end: default color
-    {(int)KS_CZH, "\033|95m", "\033|95m"},  // italic: bright magenta text
+    {(int)KS_CZH, "\033|3m",  "\033|3m"},   // italic
     {(int)KS_CZR, "\033|0m",  "\033|0m"},   // italic end
     {(int)KS_US,  "\033|4m",  "\033|4m"},   // underscore
     {(int)KS_UE,  "\033|24m", "\033|24m"},  // underscore end
@@ -6664,18 +6670,11 @@ swap_tcap(void)
 {
 # ifdef FEAT_TERMGUICOLORS
     static int         init_done = FALSE;
-    static int         curr_mode;
-    struct ks_tbl_s    *ks;
+    static cmode_T     curr_mode;
+    struct ks_tbl_S    *ks;
     struct builtin_term *bt;
-    int                        mode;
-    enum
-    {
-       CMODEINDEX,
-       CMODE24,
-       CMODE256
-    };
+    cmode_T            mode;
 
-    // buffer initialization
     if (!init_done)
     {
        for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++)
@@ -6683,67 +6682,36 @@ swap_tcap(void)
            bt = find_first_tcap(DEFAULT_TERM, ks->code);
            if (bt != NULL)
            {
-               STRNCPY(ks->buf, bt->bt_string, KSSIZE);
-               STRNCPY(ks->vbuf, ks->vtp, KSSIZE);
-               STRNCPY(ks->v2buf, ks->vtp2, KSSIZE);
+               // Preserve the original value.
+               STRNCPY(ks->buf[CMODE_INDEXED], bt->bt_string, KSSIZE);
+               STRNCPY(ks->buf[CMODE_RGB], ks->vtp, KSSIZE);
+               STRNCPY(ks->buf[CMODE_256COL], ks->vtp2, KSSIZE);
 
-               STRNCPY(ks->arr, bt->bt_string, KSSIZE);
-               bt->bt_string = &ks->arr[0];
+               bt->bt_string = ks->buf[CMODE_INDEXED];
            }
        }
        init_done = TRUE;
-       curr_mode = CMODEINDEX;
+       curr_mode = CMODE_INDEXED;
     }
 
     if (p_tgc)
-       mode = CMODE24;
+       mode = CMODE_RGB;
     else if (t_colors >= 256)
-       mode = CMODE256;
+       mode = CMODE_256COL;
     else
-       mode = CMODEINDEX;
+       mode = CMODE_INDEXED;
+
+    if (mode == curr_mode)
+       return;
 
     for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++)
     {
        bt = find_first_tcap(DEFAULT_TERM, ks->code);
        if (bt != NULL)
-       {
-           switch (curr_mode)
-           {
-           case CMODEINDEX:
-               STRNCPY(&ks->buf[0], bt->bt_string, KSSIZE);
-               break;
-           case CMODE24:
-               STRNCPY(&ks->vbuf[0], bt->bt_string, KSSIZE);
-               break;
-           default:
-               STRNCPY(&ks->v2buf[0], bt->bt_string, KSSIZE);
-           }
-       }
+           bt->bt_string = ks->buf[mode];
     }
 
-    if (mode != curr_mode)
-    {
-       for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++)
-       {
-           bt = find_first_tcap(DEFAULT_TERM, ks->code);
-           if (bt != NULL)
-           {
-               switch (mode)
-               {
-               case CMODEINDEX:
-                   STRNCPY(bt->bt_string, &ks->buf[0], KSSIZE);
-                   break;
-               case CMODE24:
-                   STRNCPY(bt->bt_string, &ks->vbuf[0], KSSIZE);
-                   break;
-               default:
-                   STRNCPY(bt->bt_string, &ks->v2buf[0], KSSIZE);
-               }
-           }
-       }
-
-       curr_mode = mode;
-    }
+    curr_mode = mode;
 # endif
 }
 
index a99bede085fbf38caf2f8280fc5edaa9c3774486..0857bcb7c0ab63b9ff023bda31531fbf678f6bdb 100644 (file)
@@ -746,6 +746,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    4894,
 /**/
     4893,
 /**/