changeset 30781:82fd47d71971 v9.0.0725

patch 9.0.0725: virtual text "after" wraps to next line when 'wrap' is off Commit: https://github.com/vim/vim/commit/7e017461e21ac534f8a0d59c1165d11358c69d87 Author: Bram Moolenaar <Bram@vim.org> Date: Tue Oct 11 21:02:09 2022 +0100 patch 9.0.0725: virtual text "after" wraps to next line when 'wrap' is off Problem: Virtual text "after" wraps to next line even when 'wrap' is off and 'list' is set. Solution: Do not use the minimum width when 'wrap' is off. (issue #11336)
author Bram Moolenaar <Bram@vim.org>
date Tue, 11 Oct 2022 22:15:03 +0200
parents 807248283844
children fe19e25c311a
files src/drawline.c src/testdir/dumps/Test_text_after_nowrap_5.dump src/testdir/test_textprop.vim src/version.c
diffstat 4 files changed, 35 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/drawline.c
+++ b/src/drawline.c
@@ -583,8 +583,9 @@ textprop_size_after_trunc(
     int strsize = 0;
     int n_used;
 
-    // if the remaining size is to small wrap anyway and use the next line
-    if (space < PROP_TEXT_MIN_CELLS)
+    // if the remaining size is to small and 'wrap' is set we wrap anyway and
+    // use the next line
+    if (space < PROP_TEXT_MIN_CELLS && wp->w_p_wrap)
 	space += wp->w_width;
     if (flags & (TP_FLAG_ALIGN_BELOW | TP_FLAG_ALIGN_ABOVE))
 	space -= padding;
@@ -658,7 +659,8 @@ text_prop_position(
 			? (col_with_padding <= col_off || !wp->w_p_wrap)
 			: (n_used < *n_extra)))
 	    {
-		if (right && (wrap || room < PROP_TEXT_MIN_CELLS))
+		if (right && (wrap
+			      || (room < PROP_TEXT_MIN_CELLS && wp->w_p_wrap)))
 		{
 		    // right-align on next line instead of wrapping if possible
 		    before = wp->w_width - col_off - strsize + room;
new file mode 100644
--- /dev/null
+++ b/src/testdir/dumps/Test_text_after_nowrap_5.dump
@@ -0,0 +1,8 @@
+|f+0&#ffffff0|i|r|s|t| |l|i|n|e|$+0#4040ff13&| +0#0000000&@1|j+0&#ffd7ff255|u|s|t| |a|f|t|e|r| |t|x|t| |j|u|s|t| |a|f|t|e|r| |t|x|t| |j|u|s|t| |a|f|t|e|r| |t|x|t| | +0&#ffffff0|i+0&#ffd7ff255
+>0+0&#ffffff0| |1| |2| |3| |4| |5| |6| |7| |8| |9| |1|0| |1@1| |1|2| |1|3| |1|4| |1|5| |1|6| |1|7| |1|8| |1|9| |2|0| |2|1| |2@1| |2
+|t|h|i|r|d|$+0#4040ff13&| +0#0000000&@53
+|f|o|u|r|t|h|$+0#4040ff13&| +0#0000000&@52
+|~+0#4040ff13&| @58
+|~| @58
+|~| @58
+|:+0#0000000&|c|a|l@1| |C|h|a|n|g|e|T|e|x|t|(|)| @23|2|,|1| @10|A|l@1| 
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -3289,6 +3289,22 @@ func Test_text_after_nowrap()
           text_padding_left: 1,
       })
       normal 2Gw
+      def g:ChangeText()
+        prop_clear(1)
+        set list
+        prop_add(1, 0, {
+            type: 'theprop',
+            text: 'just after txt '->repeat(3),
+            text_align: 'after',
+            text_padding_left: 2,
+        })
+        prop_add(1, 0, {
+            type: 'theprop',
+            text: 'in the middle '->repeat(4),
+            text_align: 'after',
+            text_padding_left: 1,
+        })
+      enddef
   END
   call writefile(lines, 'XTextAfterNowrap', 'D')
   let buf = RunVimInTerminal('-S XTextAfterNowrap', #{rows: 8, cols: 60})
@@ -3303,6 +3319,10 @@ func Test_text_after_nowrap()
   call term_sendkeys(buf, "$")
   call VerifyScreenDump(buf, 'Test_text_after_nowrap_4', {})
 
+  call term_sendkeys(buf, "0")
+  call term_sendkeys(buf, ":call ChangeText()\<CR>")
+  call VerifyScreenDump(buf, 'Test_text_after_nowrap_5', {})
+
   call StopVimInTerminal(buf)
 endfunc
 
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    725,
+/**/
     724,
 /**/
     723,