# HG changeset patch # User Bram Moolenaar # Date 1651859102 -7200 # Node ID 40b087823dc71ad793c2cb4a9530020014d98ef6 # Parent 1b2e88f9a1eb2eaafa6e77b47ed1986a369c69a8 patch 8.2.4894: MS-Windows: not using italics Commit: https://github.com/vim/vim/commit/5a7b6dc23cd16450b5773849520d513de56bccbf Author: LemonBoy Date: Fri May 6 18:38:41 2022 +0100 patch 8.2.4894: MS-Windows: not using italics Problem: MS-Windows: not using italics. Solution: Use italics. Simplify the code. (closes https://github.com/vim/vim/issues/10359) diff --git a/src/term.c b/src/term.c --- 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 + +typedef enum { - 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 + 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 - }; - - // buffer initialization + cmode_T mode; + 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); - - STRNCPY(ks->arr, bt->bt_string, KSSIZE); - bt->bt_string = &ks->arr[0]; + // 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); + + 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 --- 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,