Mercurial > vim
changeset 31257:6ebd92646276 v9.0.0962
patch 9.0.0962: virtual text below cannot be placed below empty lines
Commit: https://github.com/vim/vim/commit/38854b565acba39eff36cf3c6396c911bf072bdc
Author: porygonisaduck <alvaradx@umich.edu>
Date: Sun Nov 27 20:55:05 2022 +0000
patch 9.0.0962: virtual text below cannot be placed below empty lines
Problem: Virtual text below cannot be placed below empty lines.
Solution: Add one character. (James Alvarado, closes https://github.com/vim/vim/issues/11606, closes https://github.com/vim/vim/issues/11520)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 27 Nov 2022 22:00:03 +0100 |
parents | 4dd9809b5c9c |
children | 83cca39db17d |
files | src/drawline.c src/testdir/dumps/Test_prop_below_after_empty_1.dump src/testdir/test_textprop.vim src/version.c |
diffstat | 4 files changed, 53 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- 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)))
new file mode 100644 --- /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|
--- a/src/testdir/test_textprop.vim +++ b/src/testdir/test_textprop.vim @@ -2714,6 +2714,39 @@ func Test_props_with_text_after_below_tr 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