mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.1096: terminal window in Normal mode has wrong background
Problem: Terminal window in Normal mode has wrong background. Solution: Store the default background and use it for clearning until the end of the line. Not for below the last line, since there is no text there.
This commit is contained in:
14
src/screen.c
14
src/screen.c
@@ -3139,6 +3139,7 @@ win_line(
|
|||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_TERMINAL
|
#ifdef FEAT_TERMINAL
|
||||||
int get_term_attr = FALSE;
|
int get_term_attr = FALSE;
|
||||||
|
int term_attr = 0; /* background for terminal window */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* draw_state: items that are drawn in sequence: */
|
/* draw_state: items that are drawn in sequence: */
|
||||||
@@ -3256,6 +3257,7 @@ win_line(
|
|||||||
{
|
{
|
||||||
extra_check = TRUE;
|
extra_check = TRUE;
|
||||||
get_term_attr = TRUE;
|
get_term_attr = TRUE;
|
||||||
|
term_attr = term_get_attr(wp->w_buffer, 0, 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -5056,6 +5058,9 @@ win_line(
|
|||||||
else if ((
|
else if ((
|
||||||
# ifdef FEAT_DIFF
|
# ifdef FEAT_DIFF
|
||||||
diff_hlf != (hlf_T)0 ||
|
diff_hlf != (hlf_T)0 ||
|
||||||
|
# endif
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
|
term_attr != 0 ||
|
||||||
# endif
|
# endif
|
||||||
line_attr != 0
|
line_attr != 0
|
||||||
) && (
|
) && (
|
||||||
@@ -5090,6 +5095,15 @@ win_line(
|
|||||||
HL_ATTR(HLF_CUL));
|
HL_ATTR(HLF_CUL));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
# endif
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
|
if (term_attr != 0)
|
||||||
|
{
|
||||||
|
char_attr = term_attr;
|
||||||
|
if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
|
||||||
|
char_attr = hl_combine_attr(char_attr,
|
||||||
|
HL_ATTR(HLF_CUL));
|
||||||
|
}
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -39,9 +39,6 @@
|
|||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* - patch to use GUI or cterm colors for vterm. Yasuhiro, #2067
|
* - patch to use GUI or cterm colors for vterm. Yasuhiro, #2067
|
||||||
* - when Normal background is not white or black, going to Terminal-Normal
|
|
||||||
* mode does not clear correctly. Use the terminal background color to erase
|
|
||||||
* the background.
|
|
||||||
* - patch to add tmap, jakalope (Jacob Askeland) #2073
|
* - patch to add tmap, jakalope (Jacob Askeland) #2073
|
||||||
* - Redirecting output does not work on MS-Windows.
|
* - Redirecting output does not work on MS-Windows.
|
||||||
* - implement term_setsize()
|
* - implement term_setsize()
|
||||||
@@ -130,6 +127,7 @@ struct terminal_S {
|
|||||||
|
|
||||||
garray_T tl_scrollback;
|
garray_T tl_scrollback;
|
||||||
int tl_scrollback_scrolled;
|
int tl_scrollback_scrolled;
|
||||||
|
cellattr_T tl_default_color;
|
||||||
|
|
||||||
VTermPos tl_cursor_pos;
|
VTermPos tl_cursor_pos;
|
||||||
int tl_cursor_visible;
|
int tl_cursor_visible;
|
||||||
@@ -2321,6 +2319,7 @@ term_change_in_curbuf(void)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the screen attribute for a position in the buffer.
|
* Get the screen attribute for a position in the buffer.
|
||||||
|
* Use a zero "lnum" to get the default background color.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
term_get_attr(buf_T *buf, linenr_T lnum, int col)
|
term_get_attr(buf_T *buf, linenr_T lnum, int col)
|
||||||
@@ -2329,12 +2328,16 @@ term_get_attr(buf_T *buf, linenr_T lnum, int col)
|
|||||||
sb_line_T *line;
|
sb_line_T *line;
|
||||||
cellattr_T *cellattr;
|
cellattr_T *cellattr;
|
||||||
|
|
||||||
if (lnum > term->tl_scrollback.ga_len)
|
if (lnum == 0 || lnum > term->tl_scrollback.ga_len)
|
||||||
return 0;
|
cellattr = &term->tl_default_color;
|
||||||
line = (sb_line_T *)term->tl_scrollback.ga_data + lnum - 1;
|
else
|
||||||
if (col >= line->sb_cols)
|
{
|
||||||
return 0;
|
line = (sb_line_T *)term->tl_scrollback.ga_data + lnum - 1;
|
||||||
cellattr = line->sb_cells + col;
|
if (col >= line->sb_cols)
|
||||||
|
cellattr = &term->tl_default_color;
|
||||||
|
else
|
||||||
|
cellattr = line->sb_cells + col;
|
||||||
|
}
|
||||||
return cell2attr(cellattr->attrs, cellattr->fg, cellattr->bg);
|
return cell2attr(cellattr->attrs, cellattr->fg, cellattr->bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2347,6 +2350,8 @@ create_vterm(term_T *term, int rows, int cols)
|
|||||||
VTerm *vterm;
|
VTerm *vterm;
|
||||||
VTermScreen *screen;
|
VTermScreen *screen;
|
||||||
VTermValue value;
|
VTermValue value;
|
||||||
|
VTermColor *fg, *bg;
|
||||||
|
int fgval, bgval;
|
||||||
|
|
||||||
vterm = vterm_new(rows, cols);
|
vterm = vterm_new(rows, cols);
|
||||||
term->tl_vterm = vterm;
|
term->tl_vterm = vterm;
|
||||||
@@ -2357,14 +2362,23 @@ create_vterm(term_T *term, int rows, int cols)
|
|||||||
|
|
||||||
/* Vterm uses a default black background. Set it to white when
|
/* Vterm uses a default black background. Set it to white when
|
||||||
* 'background' is "light". */
|
* 'background' is "light". */
|
||||||
|
vim_memset(&term->tl_default_color.attrs, 0, sizeof(VTermScreenCellAttrs));
|
||||||
|
term->tl_default_color.width = 1;
|
||||||
|
fg = &term->tl_default_color.fg;
|
||||||
|
bg = &term->tl_default_color.bg;
|
||||||
if (*p_bg == 'l')
|
if (*p_bg == 'l')
|
||||||
{
|
{
|
||||||
VTermColor fg, bg;
|
fgval = 0;
|
||||||
|
bgval = 255;
|
||||||
fg.red = fg.green = fg.blue = 0;
|
|
||||||
bg.red = bg.green = bg.blue = 255;
|
|
||||||
vterm_state_set_default_colors(vterm_obtain_state(vterm), &fg, &bg);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fgval = 255;
|
||||||
|
bgval = 0;
|
||||||
|
}
|
||||||
|
fg->red = fg->green = fg->blue = fgval;
|
||||||
|
bg->red = bg->green = bg->blue = bgval;
|
||||||
|
vterm_state_set_default_colors(vterm_obtain_state(vterm), fg, bg);
|
||||||
|
|
||||||
/* Required to initialize most things. */
|
/* Required to initialize most things. */
|
||||||
vterm_screen_reset(screen, 1 /* hard */);
|
vterm_screen_reset(screen, 1 /* hard */);
|
||||||
|
@@ -769,6 +769,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 */
|
||||||
|
/**/
|
||||||
|
1096,
|
||||||
/**/
|
/**/
|
||||||
1095,
|
1095,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user