Skip to content

Commit

Permalink
patch 8.2.4906: MS-Windows: cannot use transparent background
Browse files Browse the repository at this point in the history
Problem:    MS-Windows: cannot use transparent background.
Solution:   Make transparent background work with 'termguicolors' and NONE
            background color. (Yasuhiro Matsumoto, closes #10310, closes #7162)
  • Loading branch information
mattn authored and brammool committed May 7, 2022
1 parent 3f1cfcb commit aa04e1b
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 10 deletions.
7 changes: 7 additions & 0 deletions runtime/doc/options.txt
Expand Up @@ -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.

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.

*'termwinkey'* *'twk'*
Expand Down
15 changes: 6 additions & 9 deletions src/os_win32.c
Expand Up @@ -211,7 +211,6 @@ static int g_color_index_bg = 0;
static int g_color_index_fg = 7;

# ifdef FEAT_TERMGUICOLORS
static int default_console_color_bg = 0x000000; // black
static int default_console_color_fg = 0xc0c0c0; // white
# endif

Expand Down Expand Up @@ -7846,7 +7845,7 @@ vtp_init(void)
HMODULE hKerneldll;
DYN_CONSOLE_SCREEN_BUFFER_INFOEX csbi;
# ifdef FEAT_TERMGUICOLORS
COLORREF fg, bg;
COLORREF fg;
# endif

// Use functions supported from Vista
Expand All @@ -7873,11 +7872,8 @@ vtp_init(void)
store_console_fg_rgb = save_console_fg_rgb;

# ifdef FEAT_TERMGUICOLORS
bg = (COLORREF)csbi.ColorTable[g_color_index_bg];
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);
default_console_color_bg = bg;
default_console_color_fg = fg;
# endif

Expand Down Expand Up @@ -8158,10 +8154,11 @@ get_default_console_color(
ctermbg = -1;
if (id > 0)
syn_id2cterm_bg(id, &ctermfg, &ctermbg);
guibg = ctermbg != -1 ? ctermtoxterm(ctermbg)
: default_console_color_bg;
cterm_normal_bg_gui_color = guibg;
ctermbg = ctermbg < 0 ? 0 : ctermbg;
cterm_normal_bg_gui_color = guibg =
ctermbg != -1 ? ctermtoxterm(ctermbg) : INVALCOLOR;

if (ctermbg < 0)
ctermbg = 0;
}

*cterm_fg = ctermfg;
Expand Down
3 changes: 2 additions & 1 deletion src/term.c
Expand Up @@ -3084,7 +3084,8 @@ term_fg_rgb_color(guicolor_T rgb)
void
term_bg_rgb_color(guicolor_T rgb)
{
term_rgb_color(T_8B, rgb);
if (rgb != INVALCOLOR)
term_rgb_color(T_8B, rgb);
}

void
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -746,6 +746,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4906,
/**/
4905,
/**/
Expand Down

0 comments on commit aa04e1b

Please sign in to comment.