]> granicus.if.org Git - vim/commitdiff
patch 9.0.0962: virtual text below cannot be placed below empty lines v9.0.0962
authorporygonisaduck <alvaradx@umich.edu>
Sun, 27 Nov 2022 20:55:05 +0000 (20:55 +0000)
committerBram Moolenaar <Bram@vim.org>
Sun, 27 Nov 2022 20:55:05 +0000 (20:55 +0000)
Problem:    Virtual text below cannot be placed below empty lines.
Solution:   Add one character. (James Alvarado, closes #11606, closes #11520)

src/drawline.c
src/testdir/dumps/Test_prop_below_after_empty_1.dump [new file with mode: 0644]
src/testdir/test_textprop.vim
src/version.c

index 408f2d5bdb4c2b29cf6f92b24e41fb8b646c9300..8b19662c1323446eb67df05ca66cf64056802c67 100644 (file)
@@ -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 (file)
index 0000000..b6773df
--- /dev/null
@@ -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| 
index 3f24463c184bca13970c818a75f704abd88e6c47..a6ed0af2522267dc32875081214a515ee8cf775f 100644 (file)
@@ -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
 
index ecc4da430e3199da6e85af874be837cade93923a..c71f981b9a378b0eddda4fc43cb3b1592b80eee1 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    962,
 /**/
     961,
 /**/