# HG changeset patch # User Bram Moolenaar # Date 1559415605 -7200 # Node ID 2bd51fdcc793a337d5997d28fd2f6f0b8bc533d4 # Parent 4aed9232c8b76468e981a5ce88f704e17d4b3f24 patch 8.1.1444: not using double line characters for popup border commit https://github.com/vim/vim/commit/3bfd04e672ea47e371595e50a92ddfb2223f6e3d Author: Bram Moolenaar Date: Sat Jun 1 20:45:21 2019 +0200 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. diff --git a/src/screen.c b/src/screen.c --- a/src/screen.c +++ b/src/screen.c @@ -1031,6 +1031,12 @@ update_popups(void) int total_height; int popup_attr; 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, // 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]; 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) { // top border screen_fill(wp->w_winrow, wp->w_winrow + 1, wp->w_wincol, wp->w_wincol + total_width, - wp->w_popup_border[3] != 0 ? '+' : '-', - '-', popup_attr); + wp->w_popup_border[3] != 0 + ? tl_corner_char : hor_line_char, + hor_line_char, popup_attr); 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); } @@ -1091,14 +1108,14 @@ update_popups(void) { // left border 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 if (wp->w_popup_padding[3] > 0) screen_puts(get_spaces(wp->w_popup_padding[3]), row, wp->w_wincol + wp->w_popup_border[3], popup_attr); // right border 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); // right padding if (wp->w_popup_padding[1] > 0) @@ -1125,10 +1142,10 @@ update_popups(void) screen_fill(row , row + 1, wp->w_wincol, wp->w_wincol + total_width, - wp->w_popup_border[3] != 0 ? '+' : '-', - '-', popup_attr); + wp->w_popup_border[3] != 0 ? bl_corner_char : hor_line_char, + hor_line_char, popup_attr); 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); } } diff --git a/src/testdir/dumps/Test_popupwin_21.dump b/src/testdir/dumps/Test_popupwin_21.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_popupwin_21.dump @@ -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| diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -60,20 +60,22 @@ func Test_popup_with_border_and_padding( if !CanRunVimInTerminal() return 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 - call StopVimInTerminal(buf) - call delete('XtestPopupBorder') + for iter in range(0, 1) + call writefile([iter == 1 ? '' : 'set enc=latin1', + \ "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 = { \ 'line': 2, diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -768,6 +768,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1444, +/**/ 1443, /**/ 1442,