mirror of
https://github.com/vim/vim.git
synced 2025-10-02 05:04:20 -04:00
patch 8.1.2351: 'wincolor' not used for > for not fitting double width char
Problem: 'wincolor' not used for > for not fitting double width char. Also: popup drawn on right half of double width character looks wrong. Solution: Adjust color for > character. Clear left half of double width character if right half is being overwritten.
This commit is contained in:
@@ -1230,7 +1230,6 @@ win_line(
|
|||||||
if (tocol == vcol)
|
if (tocol == vcol)
|
||||||
tocol += n_extra;
|
tocol += n_extra;
|
||||||
// combine 'showbreak' with 'wincolor'
|
// combine 'showbreak' with 'wincolor'
|
||||||
if (win_attr != 0)
|
|
||||||
char_attr = hl_combine_attr(win_attr, char_attr);
|
char_attr = hl_combine_attr(win_attr, char_attr);
|
||||||
# ifdef FEAT_SYN_HL
|
# ifdef FEAT_SYN_HL
|
||||||
// combine 'showbreak' with 'cursorline'
|
// combine 'showbreak' with 'cursorline'
|
||||||
@@ -1616,6 +1615,8 @@ win_line(
|
|||||||
if (cul_attr)
|
if (cul_attr)
|
||||||
multi_attr = hl_combine_attr(multi_attr, cul_attr);
|
multi_attr = hl_combine_attr(multi_attr, cul_attr);
|
||||||
#endif
|
#endif
|
||||||
|
multi_attr = hl_combine_attr(win_attr, multi_attr);
|
||||||
|
|
||||||
// put the pointer back to output the double-width
|
// put the pointer back to output the double-width
|
||||||
// character at the start of the next line.
|
// character at the start of the next line.
|
||||||
++n_extra;
|
++n_extra;
|
||||||
@@ -1790,7 +1791,7 @@ win_line(
|
|||||||
mb_c = c;
|
mb_c = c;
|
||||||
mb_utf8 = FALSE;
|
mb_utf8 = FALSE;
|
||||||
mb_l = 1;
|
mb_l = 1;
|
||||||
multi_attr = HL_ATTR(HLF_AT);
|
multi_attr = hl_combine_attr(win_attr, HL_ATTR(HLF_AT));
|
||||||
// Put pointer back so that the character will be
|
// Put pointer back so that the character will be
|
||||||
// displayed at the start of the next line.
|
// displayed at the start of the next line.
|
||||||
--ptr;
|
--ptr;
|
||||||
|
12
src/screen.c
12
src/screen.c
@@ -460,6 +460,18 @@ screen_line(
|
|||||||
}
|
}
|
||||||
#endif /* FEAT_RIGHTLEFT */
|
#endif /* FEAT_RIGHTLEFT */
|
||||||
|
|
||||||
|
#ifdef FEAT_TEXT_PROP
|
||||||
|
// First char of a popup window may go on top of the right half of a
|
||||||
|
// double-wide character. Clear the left half to avoid it getting the popup
|
||||||
|
// window background color.
|
||||||
|
if (coloff > 0 && ScreenLines[off_to] == 0)
|
||||||
|
{
|
||||||
|
ScreenLines[off_to - 1] = ' ';
|
||||||
|
ScreenLinesUC[off_to - 1] = 0;
|
||||||
|
screen_char(off_to - 1, row, col + coloff - 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
redraw_next = char_needs_redraw(off_from, off_to, endcol - col);
|
redraw_next = char_needs_redraw(off_from, off_to, endcol - col);
|
||||||
|
|
||||||
while (col < endcol)
|
while (col < endcol)
|
||||||
|
10
src/testdir/dumps/Test_popupwin_doublewidth_1.dump
Normal file
10
src/testdir/dumps/Test_popupwin_doublewidth_1.dump
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
>x+0&#ffffff0| |你*0#0000001#ffd7ff255|好|,|世|界| +&|-| |>+0#4040ff13&| +0#0000000#ffffff0|好*&|世|界|你|好| +&@47
|
||||||
|
|你*&|你*0#0000001#ffd7ff255|好|,|世|界|x+&@3|好*0#0000000#ffffff0|世|界|你|好| +&@48
|
||||||
|
|x| |x+0#0000001#ffd7ff255| @12| +0#0000000#ffffff0|好*&|世|界|你|好| +&@47
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
|~| @73
|
||||||
|
| +0#0000000&@56|1|,|1| @10|A|l@1|
|
@@ -737,6 +737,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 */
|
||||||
|
/**/
|
||||||
|
2351,
|
||||||
/**/
|
/**/
|
||||||
2350,
|
2350,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user