diff options
author | porygonisaduck <alvaradx@umich.edu> | 2022-11-27 20:55:05 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-11-27 20:55:05 +0000 |
commit | 38854b565acba39eff36cf3c6396c911bf072bdc (patch) | |
tree | 229cef2a1c8e951af16695927d80c4bb9fbdffd8 | |
parent | 3da8597fc07505c0f8839b0834aafe1c10ffb456 (diff) | |
download | vim-git-38854b565acba39eff36cf3c6396c911bf072bdc.tar.gz |
patch 9.0.0962: virtual text below cannot be placed below empty linesv9.0.0962
Problem: Virtual text below cannot be placed below empty lines.
Solution: Add one character. (James Alvarado, closes #11606, closes #11520)
-rw-r--r-- | src/drawline.c | 15 | ||||
-rw-r--r-- | src/testdir/dumps/Test_prop_below_after_empty_1.dump | 8 | ||||
-rw-r--r-- | src/testdir/test_textprop.vim | 33 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 53 insertions, 5 deletions
diff --git a/src/drawline.c b/src/drawline.c index 408f2d5bd..8b19662c1 100644 --- a/src/drawline.c +++ b/src/drawline.c @@ -621,7 +621,7 @@ textprop_size_after_trunc( text_prop_position( win_T *wp, textprop_T *tp, - int vcol UNUSED, // current text column + int vcol, // current text column int scr_col, // current screen column int *n_extra, // nr of bytes for virtual text char_u **p_extra, // virtual text @@ -633,7 +633,7 @@ text_prop_position( int below = (tp->tp_flags & TP_FLAG_ALIGN_BELOW); int wrap = (tp->tp_flags & TP_FLAG_WRAP); int padding = tp->tp_col == MAXCOL && tp->tp_len > 1 - ? tp->tp_len - 1 : 0; + ? tp->tp_len - 1 : 0; int col_with_padding = scr_col + (below ? 0 : padding); int room = wp->w_width - col_with_padding; int before = room; // spaces before the text @@ -661,11 +661,16 @@ text_prop_position( // Right-align: fill with before if (right) before -= cells; + + // Below-align: empty line add one character + if (below && vcol == 0 && col_with_padding == 0 + && wp->w_width == before) + col_with_padding = 1; + if (before < 0 || !(right || below) - || (below - ? (col_with_padding <= col_off || !wp->w_p_wrap) - : (n_used < *n_extra))) + || (below ? (col_with_padding <= col_off || !wp->w_p_wrap) + : (n_used < *n_extra))) { if (right && (wrap || (room < PROP_TEXT_MIN_CELLS && wp->w_p_wrap))) diff --git a/src/testdir/dumps/Test_prop_below_after_empty_1.dump b/src/testdir/dumps/Test_prop_below_after_empty_1.dump new file mode 100644 index 000000000..b6773df42 --- /dev/null +++ b/src/testdir/dumps/Test_prop_below_after_empty_1.dump @@ -0,0 +1,8 @@ +>v+0&#ffffff0|i|m|9|s|c|r|i|p|t| @49 +@60 +@1|T+0#ffffff16#e000002|h|e| |q|u|i|c|k| |b|r|o|w|n| |f|o|x| |j|u|m|p|s| |o|v|e|r| |t|h|e| |l|a|z|y| |d|o|g| +0#0000000#ffffff0@15 +|t|h|r|e@1| @54 +@60 +|T+0&#ffd7ff255|h|e| |s|l|o|w| |f|o|x| |b|u|m|p|s| |i|n|t|o| |t|h|e| |l|a|z|y| |d|o|g| +0&#ffffff0@23 +|~+0#4040ff13&| @58 +| +0#0000000&@41|1|,|1| @10|A|l@1| diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim index 3f24463c1..a6ed0af25 100644 --- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -2714,6 +2714,39 @@ func Test_props_with_text_after_below_trunc() call StopVimInTerminal(buf) endfunc +func Test_prop_with_text_below_after_empty() + CheckRunVimInTerminal + + let lines =<< trim END + vim9script + + setline(1, ['vim9script', '', 'three', '']) + + # Add text prop below empty line 2 with padding. + prop_type_add('test', {highlight: 'ErrorMsg'}) + prop_add(2, 0, { + type: 'test', + text: 'The quick brown fox jumps over the lazy dog', + text_align: 'below', + text_padding_left: 1, + }) + + # Add text prop below empty line 4 without padding. + prop_type_add('other', {highlight: 'DiffChange'}) + prop_add(4, 0, { + type: 'other', + text: 'The slow fox bumps into the lazy dog', + text_align: 'below', + text_padding_left: 0, + }) + END + call writefile(lines, 'XscriptPropBelowAfterEmpty', 'D') + let buf = RunVimInTerminal('-S XscriptPropBelowAfterEmpty', #{rows: 8, cols: 60}) + call VerifyScreenDump(buf, 'Test_prop_below_after_empty_1', {}) + + call StopVimInTerminal(buf) +endfunc + func Test_prop_with_text_below_after_match() CheckRunVimInTerminal diff --git a/src/version.c b/src/version.c index ecc4da430..c71f981b9 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 962, +/**/ 961, /**/ 960, |