Mercurial > vim
changeset 28739:40b087823dc7 v8.2.4894
patch 8.2.4894: MS-Windows: not using italics
Commit: https://github.com/vim/vim/commit/5a7b6dc23cd16450b5773849520d513de56bccbf
Author: LemonBoy <thatlemon@gmail.com>
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)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 06 May 2022 19:45:02 +0200 |
parents | 1b2e88f9a1eb |
children | da9f84bdc1c8 |
files | src/term.c src/version.c |
diffstat | 2 files changed, 37 insertions(+), 67 deletions(-) [+] |
line wrap: on
line diff
--- 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 }