0
0
mirror of https://github.com/vim/vim.git synced 2025-09-26 04:04:07 -04:00

patch 8.2.4906: MS-Windows: cannot use transparent background

Problem:    MS-Windows: cannot use transparent background.
Solution:   Make transparent background work with 'termguicolors' and NONE
            background color. (Yasuhiro Matsumoto, closes #10310, closes #7162)
This commit is contained in:
Yasuhiro Matsumoto
2022-05-07 14:09:19 +01:00
committed by Bram Moolenaar
parent 3f1cfcb864
commit aa04e1b0be
4 changed files with 17 additions and 10 deletions

View File

@@ -8079,6 +8079,13 @@ A jump table for the options with a short description can be found at |Q_op|.
< This requires Vim to be built with the |+vtp| feature. < This requires Vim to be built with the |+vtp| feature.
Note that the "cterm" attributes are still used, not the "gui" ones. Note that the "cterm" attributes are still used, not the "gui" ones.
When using Vim with Windows Terminal, the background of Windows
Terminal is normally filled with the Vim background color. Setting
'termguicolors' and the guibg of the Normal highlight group to NONE
will make the background transparent: >
:hi Normal guibg=NONE
<
NOTE: This option is reset when 'compatible' is set. NOTE: This option is reset when 'compatible' is set.
*'termwinkey'* *'twk'* *'termwinkey'* *'twk'*

View File

@@ -211,7 +211,6 @@ static int g_color_index_bg = 0;
static int g_color_index_fg = 7; static int g_color_index_fg = 7;
# ifdef FEAT_TERMGUICOLORS # ifdef FEAT_TERMGUICOLORS
static int default_console_color_bg = 0x000000; // black
static int default_console_color_fg = 0xc0c0c0; // white static int default_console_color_fg = 0xc0c0c0; // white
# endif # endif
@@ -7846,7 +7845,7 @@ vtp_init(void)
HMODULE hKerneldll; HMODULE hKerneldll;
DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi; DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi;
# ifdef FEAT_TERMGUICOLORS # ifdef FEAT_TERMGUICOLORS
COLORREF fg, bg; COLORREF fg;
# endif # endif
// Use functions supported from Vista // Use functions supported from Vista
@@ -7873,11 +7872,8 @@ vtp_init(void)
store_console_fg_rgb = save_console_fg_rgb; store_console_fg_rgb = save_console_fg_rgb;
# ifdef FEAT_TERMGUICOLORS # ifdef FEAT_TERMGUICOLORS
bg = (COLORREF)csbi.ColorTable[g_color_index_bg];
fg = (COLORREF)csbi.ColorTable[g_color_index_fg]; fg = (COLORREF)csbi.ColorTable[g_color_index_fg];
bg = (GetRValue(bg) << 16) | (GetGValue(bg) << 8) | GetBValue(bg);
fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg); fg = (GetRValue(fg) << 16) | (GetGValue(fg) << 8) | GetBValue(fg);
default_console_color_bg = bg;
default_console_color_fg = fg; default_console_color_fg = fg;
# endif # endif
@@ -8158,10 +8154,11 @@ get_default_console_color(
ctermbg = -1; ctermbg = -1;
if (id > 0) if (id > 0)
syn_id2cterm_bg(id, &ctermfg, &ctermbg); syn_id2cterm_bg(id, &ctermfg, &ctermbg);
guibg = ctermbg != -1 ? ctermtoxterm(ctermbg) cterm_normal_bg_gui_color = guibg =
: default_console_color_bg; ctermbg != -1 ? ctermtoxterm(ctermbg) : INVALCOLOR;
cterm_normal_bg_gui_color = guibg;
ctermbg = ctermbg < 0 ? 0 : ctermbg; if (ctermbg < 0)
ctermbg = 0;
} }
*cterm_fg = ctermfg; *cterm_fg = ctermfg;

View File

@@ -3084,6 +3084,7 @@ term_fg_rgb_color(guicolor_T rgb)
void void
term_bg_rgb_color(guicolor_T rgb) term_bg_rgb_color(guicolor_T rgb)
{ {
if (rgb != INVALCOLOR)
term_rgb_color(T_8B, rgb); term_rgb_color(T_8B, rgb);
} }

View File

@@ -746,6 +746,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
4906,
/**/ /**/
4905, 4905,
/**/ /**/