Mercurial > vim
comparison src/term.c @ 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 | e1aff2f300be |
children | b01bca69b1d5 |
comparison
equal
deleted
inserted
replaced
28738:1b2e88f9a1eb | 28739:40b087823dc7 |
---|---|
6603 } | 6603 } |
6604 } | 6604 } |
6605 | 6605 |
6606 # ifdef FEAT_TERMGUICOLORS | 6606 # ifdef FEAT_TERMGUICOLORS |
6607 # define KSSIZE 20 | 6607 # define KSSIZE 20 |
6608 struct ks_tbl_s | 6608 |
6609 { | 6609 typedef enum |
6610 int code; // value of KS_ | 6610 { |
6611 char *vtp; // code in vtp mode | 6611 CMODE_INDEXED = 0, // Use cmd.exe 4bit palette. |
6612 char *vtp2; // code in vtp2 mode | 6612 CMODE_RGB, // Use 24bit RGB colors using VTP. |
6613 char buf[KSSIZE]; // save buffer in non-vtp mode | 6613 CMODE_256COL, // Emulate xterm's 256-color palette using VTP. |
6614 char vbuf[KSSIZE]; // save buffer in vtp mode | 6614 CMODE_LAST, |
6615 char v2buf[KSSIZE]; // save buffer in vtp2 mode | 6615 } cmode_T; |
6616 char arr[KSSIZE]; // real buffer | 6616 |
6617 struct ks_tbl_S | |
6618 { | |
6619 int code; // value of KS_ | |
6620 char *vtp; // code in RGB mode | |
6621 char *vtp2; // code in 256color mode | |
6622 char buf[CMODE_LAST][KSSIZE]; // real buffer | |
6617 }; | 6623 }; |
6618 | 6624 |
6619 static struct ks_tbl_s ks_tbl[] = | 6625 static struct ks_tbl_S ks_tbl[] = |
6620 { | 6626 { |
6621 {(int)KS_ME, "\033|0m", "\033|0m"}, // normal | 6627 {(int)KS_ME, "\033|0m", "\033|0m"}, // normal |
6622 {(int)KS_MR, "\033|7m", "\033|7m"}, // reverse | 6628 {(int)KS_MR, "\033|7m", "\033|7m"}, // reverse |
6623 {(int)KS_MD, "\033|1m", "\033|1m"}, // bold | 6629 {(int)KS_MD, "\033|1m", "\033|1m"}, // bold |
6624 {(int)KS_SO, "\033|91m", "\033|91m"}, // standout: bright red text | 6630 {(int)KS_SO, "\033|91m", "\033|91m"}, // standout: bright red text |
6625 {(int)KS_SE, "\033|39m", "\033|39m"}, // standout end: default color | 6631 {(int)KS_SE, "\033|39m", "\033|39m"}, // standout end: default color |
6626 {(int)KS_CZH, "\033|95m", "\033|95m"}, // italic: bright magenta text | 6632 {(int)KS_CZH, "\033|3m", "\033|3m"}, // italic |
6627 {(int)KS_CZR, "\033|0m", "\033|0m"}, // italic end | 6633 {(int)KS_CZR, "\033|0m", "\033|0m"}, // italic end |
6628 {(int)KS_US, "\033|4m", "\033|4m"}, // underscore | 6634 {(int)KS_US, "\033|4m", "\033|4m"}, // underscore |
6629 {(int)KS_UE, "\033|24m", "\033|24m"}, // underscore end | 6635 {(int)KS_UE, "\033|24m", "\033|24m"}, // underscore end |
6630 # ifdef TERMINFO | 6636 # ifdef TERMINFO |
6631 {(int)KS_CAB, "\033|%p1%db", "\033|%p14%dm"}, // set background color | 6637 {(int)KS_CAB, "\033|%p1%db", "\033|%p14%dm"}, // set background color |
6662 void | 6668 void |
6663 swap_tcap(void) | 6669 swap_tcap(void) |
6664 { | 6670 { |
6665 # ifdef FEAT_TERMGUICOLORS | 6671 # ifdef FEAT_TERMGUICOLORS |
6666 static int init_done = FALSE; | 6672 static int init_done = FALSE; |
6667 static int curr_mode; | 6673 static cmode_T curr_mode; |
6668 struct ks_tbl_s *ks; | 6674 struct ks_tbl_S *ks; |
6669 struct builtin_term *bt; | 6675 struct builtin_term *bt; |
6670 int mode; | 6676 cmode_T mode; |
6671 enum | 6677 |
6672 { | |
6673 CMODEINDEX, | |
6674 CMODE24, | |
6675 CMODE256 | |
6676 }; | |
6677 | |
6678 // buffer initialization | |
6679 if (!init_done) | 6678 if (!init_done) |
6680 { | 6679 { |
6681 for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++) | 6680 for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++) |
6682 { | 6681 { |
6683 bt = find_first_tcap(DEFAULT_TERM, ks->code); | 6682 bt = find_first_tcap(DEFAULT_TERM, ks->code); |
6684 if (bt != NULL) | 6683 if (bt != NULL) |
6685 { | 6684 { |
6686 STRNCPY(ks->buf, bt->bt_string, KSSIZE); | 6685 // Preserve the original value. |
6687 STRNCPY(ks->vbuf, ks->vtp, KSSIZE); | 6686 STRNCPY(ks->buf[CMODE_INDEXED], bt->bt_string, KSSIZE); |
6688 STRNCPY(ks->v2buf, ks->vtp2, KSSIZE); | 6687 STRNCPY(ks->buf[CMODE_RGB], ks->vtp, KSSIZE); |
6689 | 6688 STRNCPY(ks->buf[CMODE_256COL], ks->vtp2, KSSIZE); |
6690 STRNCPY(ks->arr, bt->bt_string, KSSIZE); | 6689 |
6691 bt->bt_string = &ks->arr[0]; | 6690 bt->bt_string = ks->buf[CMODE_INDEXED]; |
6692 } | 6691 } |
6693 } | 6692 } |
6694 init_done = TRUE; | 6693 init_done = TRUE; |
6695 curr_mode = CMODEINDEX; | 6694 curr_mode = CMODE_INDEXED; |
6696 } | 6695 } |
6697 | 6696 |
6698 if (p_tgc) | 6697 if (p_tgc) |
6699 mode = CMODE24; | 6698 mode = CMODE_RGB; |
6700 else if (t_colors >= 256) | 6699 else if (t_colors >= 256) |
6701 mode = CMODE256; | 6700 mode = CMODE_256COL; |
6702 else | 6701 else |
6703 mode = CMODEINDEX; | 6702 mode = CMODE_INDEXED; |
6703 | |
6704 if (mode == curr_mode) | |
6705 return; | |
6704 | 6706 |
6705 for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++) | 6707 for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++) |
6706 { | 6708 { |
6707 bt = find_first_tcap(DEFAULT_TERM, ks->code); | 6709 bt = find_first_tcap(DEFAULT_TERM, ks->code); |
6708 if (bt != NULL) | 6710 if (bt != NULL) |
6709 { | 6711 bt->bt_string = ks->buf[mode]; |
6710 switch (curr_mode) | 6712 } |
6711 { | 6713 |
6712 case CMODEINDEX: | 6714 curr_mode = mode; |
6713 STRNCPY(&ks->buf[0], bt->bt_string, KSSIZE); | |
6714 break; | |
6715 case CMODE24: | |
6716 STRNCPY(&ks->vbuf[0], bt->bt_string, KSSIZE); | |
6717 break; | |
6718 default: | |
6719 STRNCPY(&ks->v2buf[0], bt->bt_string, KSSIZE); | |
6720 } | |
6721 } | |
6722 } | |
6723 | |
6724 if (mode != curr_mode) | |
6725 { | |
6726 for (ks = ks_tbl; ks->code != (int)KS_NAME; ks++) | |
6727 { | |
6728 bt = find_first_tcap(DEFAULT_TERM, ks->code); | |
6729 if (bt != NULL) | |
6730 { | |
6731 switch (mode) | |
6732 { | |
6733 case CMODEINDEX: | |
6734 STRNCPY(bt->bt_string, &ks->buf[0], KSSIZE); | |
6735 break; | |
6736 case CMODE24: | |
6737 STRNCPY(bt->bt_string, &ks->vbuf[0], KSSIZE); | |
6738 break; | |
6739 default: | |
6740 STRNCPY(bt->bt_string, &ks->v2buf[0], KSSIZE); | |
6741 } | |
6742 } | |
6743 } | |
6744 | |
6745 curr_mode = mode; | |
6746 } | |
6747 # endif | 6715 # endif |
6748 } | 6716 } |
6749 | 6717 |
6750 #endif | 6718 #endif |
6751 | 6719 |