Skip to content

Commit

Permalink
patch 9.0.0962: virtual text below cannot be placed below empty lines
Browse files Browse the repository at this point in the history
Problem:    Virtual text below cannot be placed below empty lines.
Solution:   Add one character. (James Alvarado, closes #11606, closes #11520)
  • Loading branch information
porygonisaduck authored and brammool committed Nov 27, 2022
1 parent 3da8597 commit 38854b5
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/drawline.c
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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)))
Expand Down
8 changes: 8 additions & 0 deletions 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|
33 changes: 33 additions & 0 deletions src/testdir/test_textprop.vim
Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -695,6 +695,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
962,
/**/
961,
/**/
Expand Down

0 comments on commit 38854b5

Please sign in to comment.