summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorporygonisaduck <alvaradx@umich.edu>2022-11-27 20:55:05 +0000
committerBram Moolenaar <Bram@vim.org>2022-11-27 20:55:05 +0000
commit38854b565acba39eff36cf3c6396c911bf072bdc (patch)
tree229cef2a1c8e951af16695927d80c4bb9fbdffd8
parent3da8597fc07505c0f8839b0834aafe1c10ffb456 (diff)
downloadvim-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.c15
-rw-r--r--src/testdir/dumps/Test_prop_below_after_empty_1.dump8
-rw-r--r--src/testdir/test_textprop.vim33
-rw-r--r--src/version.c2
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,