mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 8.1.1444: not using double line characters for popup border
Problem: Not using double line characters for popup border. Solution: Use double line characters if using utf-8.
This commit is contained in:
33
src/screen.c
33
src/screen.c
@@ -1031,6 +1031,12 @@ update_popups(void)
|
|||||||
int total_height;
|
int total_height;
|
||||||
int popup_attr;
|
int popup_attr;
|
||||||
int row;
|
int row;
|
||||||
|
int tl_corner_char = '+';
|
||||||
|
char *tr_corner_str = "+";
|
||||||
|
int bl_corner_char = '+';
|
||||||
|
char *br_corner_str = "+";
|
||||||
|
int hor_line_char = '-';
|
||||||
|
char *ver_line_str = "|";
|
||||||
|
|
||||||
// Find the window with the lowest zindex that hasn't been updated yet,
|
// Find the window with the lowest zindex that hasn't been updated yet,
|
||||||
// so that the window with a higher zindex is drawn later, thus goes on
|
// so that the window with a higher zindex is drawn later, thus goes on
|
||||||
@@ -1062,16 +1068,27 @@ update_popups(void)
|
|||||||
+ wp->w_height + wp->w_popup_padding[2] + wp->w_popup_border[2];
|
+ wp->w_height + wp->w_popup_padding[2] + wp->w_popup_border[2];
|
||||||
popup_attr = get_wcr_attr(wp);
|
popup_attr = get_wcr_attr(wp);
|
||||||
|
|
||||||
|
if (enc_utf8)
|
||||||
|
{
|
||||||
|
tl_corner_char = 0x2554;
|
||||||
|
tr_corner_str = "\xe2\x95\x97";
|
||||||
|
bl_corner_char = 0x255a;
|
||||||
|
br_corner_str = "\xe2\x95\x9d";
|
||||||
|
hor_line_char = 0x2550;
|
||||||
|
ver_line_str = "\xe2\x95\x91";
|
||||||
|
}
|
||||||
|
|
||||||
if (wp->w_popup_border[0] > 0)
|
if (wp->w_popup_border[0] > 0)
|
||||||
{
|
{
|
||||||
// top border
|
// top border
|
||||||
screen_fill(wp->w_winrow, wp->w_winrow + 1,
|
screen_fill(wp->w_winrow, wp->w_winrow + 1,
|
||||||
wp->w_wincol,
|
wp->w_wincol,
|
||||||
wp->w_wincol + total_width,
|
wp->w_wincol + total_width,
|
||||||
wp->w_popup_border[3] != 0 ? '+' : '-',
|
wp->w_popup_border[3] != 0
|
||||||
'-', popup_attr);
|
? tl_corner_char : hor_line_char,
|
||||||
|
hor_line_char, popup_attr);
|
||||||
if (wp->w_popup_border[1] > 0)
|
if (wp->w_popup_border[1] > 0)
|
||||||
screen_puts((char_u *)"+", wp->w_winrow,
|
screen_puts((char_u *)tr_corner_str, wp->w_winrow,
|
||||||
wp->w_wincol + total_width - 1, popup_attr);
|
wp->w_wincol + total_width - 1, popup_attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1091,14 +1108,14 @@ update_popups(void)
|
|||||||
{
|
{
|
||||||
// left border
|
// left border
|
||||||
if (wp->w_popup_border[3] > 0)
|
if (wp->w_popup_border[3] > 0)
|
||||||
screen_puts((char_u *)"|", row, wp->w_wincol, popup_attr);
|
screen_puts((char_u *)ver_line_str, row, wp->w_wincol, popup_attr);
|
||||||
// left padding
|
// left padding
|
||||||
if (wp->w_popup_padding[3] > 0)
|
if (wp->w_popup_padding[3] > 0)
|
||||||
screen_puts(get_spaces(wp->w_popup_padding[3]), row,
|
screen_puts(get_spaces(wp->w_popup_padding[3]), row,
|
||||||
wp->w_wincol + wp->w_popup_border[3], popup_attr);
|
wp->w_wincol + wp->w_popup_border[3], popup_attr);
|
||||||
// right border
|
// right border
|
||||||
if (wp->w_popup_border[1] > 0)
|
if (wp->w_popup_border[1] > 0)
|
||||||
screen_puts((char_u *)"|", row,
|
screen_puts((char_u *)ver_line_str, row,
|
||||||
wp->w_wincol + total_width - 1, popup_attr);
|
wp->w_wincol + total_width - 1, popup_attr);
|
||||||
// right padding
|
// right padding
|
||||||
if (wp->w_popup_padding[1] > 0)
|
if (wp->w_popup_padding[1] > 0)
|
||||||
@@ -1125,10 +1142,10 @@ update_popups(void)
|
|||||||
screen_fill(row , row + 1,
|
screen_fill(row , row + 1,
|
||||||
wp->w_wincol,
|
wp->w_wincol,
|
||||||
wp->w_wincol + total_width,
|
wp->w_wincol + total_width,
|
||||||
wp->w_popup_border[3] != 0 ? '+' : '-',
|
wp->w_popup_border[3] != 0 ? bl_corner_char : hor_line_char,
|
||||||
'-', popup_attr);
|
hor_line_char, popup_attr);
|
||||||
if (wp->w_popup_border[1] > 0)
|
if (wp->w_popup_border[1] > 0)
|
||||||
screen_puts((char_u *)"+", row,
|
screen_puts((char_u *)br_corner_str, row,
|
||||||
wp->w_wincol + total_width - 1, popup_attr);
|
wp->w_wincol + total_width - 1, popup_attr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
src/testdir/dumps/Test_popupwin_21.dump
Normal file
15
src/testdir/dumps/Test_popupwin_21.dump
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
>1+0&#ffffff0| @73
|
||||||
|
|2| |╔+0#0000001#ffd7ff255|═@11|╗| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|╔+0#0000001#ffd7ff255|═@11|╗| +0#0000000#ffffff0@18
|
||||||
|
|3| |║+0#0000001#ffd7ff255|h|e|l@1|o| |b|o|r|d|e|r|║| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255|h|e|l@1|o| |p|a|d@1|i|n|g| | +0#0000000#ffffff0@4|║+0#0000001#ffd7ff255| @11|║| +0#0000000#ffffff0@18
|
||||||
|
|4| |╚+0#0000001#ffd7ff255|═@11|╝| +0#0000000#ffffff0@5| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|║+0#0000001#ffd7ff255| |h|e|l@1|o| |b|o|t|h| |║| +0#0000000#ffffff0@18
|
||||||
|
|5| @40|║+0#0000001#ffd7ff255| @11|║| +0#0000000#ffffff0@18
|
||||||
|
|6| |╔+0#0000001#ffd7ff255|═@8| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@4|╚+0#0000001#ffd7ff255|═@11|╝| +0#0000000#ffffff0@18
|
||||||
|
|7| |║+0#0000001#ffd7ff255|b|o|r|d|e|r| |T|L| +0#0000000#ffffff0@9| +0#0000001#ffd7ff255@3|p|a|d@1|i|n|g|s| @2| +0#0000000#ffffff0@37
|
||||||
|
|8| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@37
|
||||||
|
|9| @20| +0#0000001#ffd7ff255@14| +0#0000000#ffffff0@37
|
||||||
|
|1|0| @72
|
||||||
|
|1@1| @72
|
||||||
|
|1|2| @72
|
||||||
|
|1|3| @72
|
||||||
|
|1|4| @72
|
||||||
|
@57|1|,|1| @10|T|o|p|
|
@@ -60,20 +60,22 @@ func Test_popup_with_border_and_padding()
|
|||||||
if !CanRunVimInTerminal()
|
if !CanRunVimInTerminal()
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call writefile([
|
|
||||||
\ "call setline(1, range(1, 100))",
|
|
||||||
\ "call popup_create('hello border', {'line': 2, 'col': 3, 'border': []})",
|
|
||||||
\ "call popup_create('hello padding', {'line': 2, 'col': 23, 'padding': []})",
|
|
||||||
\ "call popup_create('hello both', {'line': 2, 'col': 43, 'border': [], 'padding': []})",
|
|
||||||
\ "call popup_create('border TL', {'line': 6, 'col': 3, 'border': [1, 0, 0, 4]})",
|
|
||||||
\ "call popup_create('paddings', {'line': 6, 'col': 23, 'padding': [1, 3, 2, 4]})",
|
|
||||||
\], 'XtestPopupBorder')
|
|
||||||
let buf = RunVimInTerminal('-S XtestPopupBorder', {'rows': 15})
|
|
||||||
call VerifyScreenDump(buf, 'Test_popupwin_20', {})
|
|
||||||
|
|
||||||
" clean up
|
for iter in range(0, 1)
|
||||||
call StopVimInTerminal(buf)
|
call writefile([iter == 1 ? '' : 'set enc=latin1',
|
||||||
call delete('XtestPopupBorder')
|
\ "call setline(1, range(1, 100))",
|
||||||
|
\ "call popup_create('hello border', {'line': 2, 'col': 3, 'border': []})",
|
||||||
|
\ "call popup_create('hello padding', {'line': 2, 'col': 23, 'padding': []})",
|
||||||
|
\ "call popup_create('hello both', {'line': 2, 'col': 43, 'border': [], 'padding': []})",
|
||||||
|
\ "call popup_create('border TL', {'line': 6, 'col': 3, 'border': [1, 0, 0, 4]})",
|
||||||
|
\ "call popup_create('paddings', {'line': 6, 'col': 23, 'padding': [1, 3, 2, 4]})",
|
||||||
|
\], 'XtestPopupBorder')
|
||||||
|
let buf = RunVimInTerminal('-S XtestPopupBorder', {'rows': 15})
|
||||||
|
call VerifyScreenDump(buf, 'Test_popupwin_2' .. iter, {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('XtestPopupBorder')
|
||||||
|
endfor
|
||||||
|
|
||||||
let with_border_or_padding = {
|
let with_border_or_padding = {
|
||||||
\ 'line': 2,
|
\ 'line': 2,
|
||||||
|
@@ -767,6 +767,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 */
|
||||||
|
/**/
|
||||||
|
1444,
|
||||||
/**/
|
/**/
|
||||||
1443,
|
1443,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user