To: vim_dev@googlegroups.com Subject: Patch 9.0.0714 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 9.0.0714 Problem: With 'nowrap' two virtual text below not displayed correctly. Solution: Set text_prop_follows before continuing. Correct for number column. (closes #11333) Files: src/drawline.c, src/testdir/test_textprop.vim, src/testdir/dumps/Test_text_below_nowrap_1.dump *** ../vim-9.0.0713/src/drawline.c 2022-10-09 21:53:35.319363028 +0100 --- src/drawline.c 2022-10-10 15:36:35.450833662 +0100 *************** *** 578,584 **** int *n_used_ptr) { int space = (flags & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_ABOVE)) ! ? wp->w_width : added; int len = (int)STRLEN(text); int strsize = 0; int n_used; --- 578,584 ---- int *n_used_ptr) { int space = (flags & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_ABOVE)) ! ? wp->w_width - win_col_off(wp) : added; int len = (int)STRLEN(text); int strsize = 0; int n_used; *************** *** 634,639 **** --- 634,641 ---- int strsize = vim_strsize(*p_extra); int cells = wrap ? strsize : textprop_size_after_trunc(wp, tp->tp_flags, before, padding, *p_extra, &n_used); + int cont_on_next_line = below && col_with_padding > win_col_off(wp) + && !wp->w_p_wrap; if (wrap || right || above || below || padding > 0 || n_used < *n_extra) { *************** *** 736,742 **** *n_attr = mb_charlen(*p_extra); if (above) *n_attr -= padding + after; ! *n_attr_skip = before + padding + skip_add; } } } --- 738,748 ---- *n_attr = mb_charlen(*p_extra); if (above) *n_attr -= padding + after; ! ! // Add "skip_add" when starting a new line or wrapping, ! // n_attr_skip will then be decremented in the number column. ! *n_attr_skip = before + padding ! + (cont_on_next_line || before > 0 ? skip_add : 0); } } } *************** *** 1917,1922 **** --- 1923,1929 ---- -text_prop_id - 1]; int above = (tp->tp_flags & TP_FLAG_ALIGN_ABOVE); + int bail_out = FALSE; // reset the ID in the copy to avoid it being used // again *************** *** 2003,2009 **** break; } win_line_start(wp, &wlv, TRUE); ! continue; } } } --- 2010,2016 ---- break; } win_line_start(wp, &wlv, TRUE); ! bail_out = TRUE; } } } *************** *** 2017,2022 **** --- 2024,2033 ---- && (wp->w_p_wrap || (text_props[other_tpi].tp_flags & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_RIGHT))); + + if (bail_out) + // starting a new line for "below" + continue; } } else if (text_prop_next < text_prop_count *** ../vim-9.0.0713/src/testdir/test_textprop.vim 2022-10-09 21:53:35.319363028 +0100 --- src/testdir/test_textprop.vim 2022-10-10 15:25:02.855273591 +0100 *************** *** 3241,3246 **** --- 3241,3275 ---- call StopVimInTerminal(buf) endfunc + func Test_text_below_nowrap() + CheckRunVimInTerminal + + let lines =<< trim END + vim9script + setline(1, ['first line', 'second line '->repeat(50), 'third', 'fourth']) + set nowrap number + prop_type_add('theprop', {highlight: 'DiffChange'}) + prop_add(1, 0, { + type: 'theprop', + text: 'one below the text '->repeat(5), + text_align: 'below', + text_padding_left: 2, + }) + prop_add(1, 0, { + type: 'theprop', + text: 'two below the text '->repeat(5), + text_align: 'below', + text_padding_left: 2, + }) + normal 2Gw + END + call writefile(lines, 'XTextBelowNowrap', 'D') + let buf = RunVimInTerminal('-S XTextBelowNowrap', #{rows: 8, cols: 60}) + call VerifyScreenDump(buf, 'Test_text_below_nowrap_1', {}) + + call StopVimInTerminal(buf) + endfunc + func Test_insert_text_change_arg() CheckRunVimInTerminal *** ../vim-9.0.0713/src/testdir/dumps/Test_text_below_nowrap_1.dump 2022-10-10 15:38:56.177419195 +0100 --- src/testdir/dumps/Test_text_below_nowrap_1.dump 2022-10-10 15:25:29.755256980 +0100 *************** *** 0 **** --- 1,8 ---- + | +0#af5f00255#ffffff0@1|1| |f+0#0000000&|i|r|s|t| |l|i|n|e| @45 + | +0#af5f00255&@3| +0#0000000&@1|o+0&#ffd7ff255|n|e| |b|e|l|o|w| |t|h|e| |t|e|x|t| |o|n|e| |b|e|l|o|w| |t|h|e| |t|e|x|t| |o|n|e| |b|e|l|o|w| |t|h|e| |t|e + | +0#af5f00255#ffffff0@3| +0#0000000&@1|t+0&#ffd7ff255|w|o| |b|e|l|o|w| |t|h|e| |t|e|x|t| |t|w|o| |b|e|l|o|w| |t|h|e| |t|e|x|t| |t|w|o| |b|e|l|o|w| |t|h|e| |t|e + | +0#af5f00255#ffffff0@1|2| |s+0#0000000&|e|c|o|n|d| >l|i|n|e| |s|e|c|o|n|d| |l|i|n|e| |s|e|c|o|n|d| |l|i|n|e| |s|e|c|o|n|d| |l|i|n|e| |s|e|c|o|n|d| |l + | +0#af5f00255&@1|3| |t+0#0000000&|h|i|r|d| @50 + | +0#af5f00255&@1|4| |f+0#0000000&|o|u|r|t|h| @49 + |~+0#4040ff13&| @58 + | +0#0000000&@41|2|,|8| @10|A|l@1| *** ../vim-9.0.0713/src/version.c 2022-10-10 13:46:09.977158083 +0100 --- src/version.c 2022-10-10 15:38:44.741523005 +0100 *************** *** 701,702 **** --- 701,704 ---- { /* Add new patch number below this line */ + /**/ + 714, /**/ -- A computer programmer is a device for turning requirements into undocumented features. It runs on cola, pizza and Dilbert cartoons. Bram Moolenaar /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///