summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLemonBoy <thatlemon@gmail.com>2022-05-06 18:38:41 +0100
committerBram Moolenaar <Bram@vim.org>2022-05-06 18:38:41 +0100
commit5a7b6dc23cd16450b5773849520d513de56bccbf (patch)
treea21fb4595678fd2c5434ade21c4dbc831a97225c
parent44433da5345e5c459f5e5812e30fca12fe297cd6 (diff)
downloadvim-git-5a7b6dc23cd16450b5773849520d513de56bccbf.tar.gz
patch 8.2.4894: MS-Windows: not using italicsv8.2.4894
Problem: MS-Windows: not using italics. Solution: Use italics. Simplify the code. (closes #10359)
-rw-r--r--src/term.c100
-rw-r--r--src/version.c2
2 files changed, 36 insertions, 66 deletions
diff --git a/src/term.c b/src/term.c
index 827772f50..9cc480e6d 100644
--- a/src/term.c
+++ b/src/term.c
@@ -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
}
diff --git a/src/version.c b/src/version.c
index a99bede08..0857bcb7c 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4894,
+/**/
4893,
/**/
4892,