]> granicus.if.org Git - vim/commitdiff
patch 9.0.0725: virtual text "after" wraps to next line when 'wrap' is off v9.0.0725
authorBram Moolenaar <Bram@vim.org>
Tue, 11 Oct 2022 20:02:09 +0000 (21:02 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 11 Oct 2022 20:02:09 +0000 (21:02 +0100)
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)

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

index 3a4156bc2f6515347ce98b879ffee54ce77cb31e..bc39442132e6217398ce67cd5354012bb7c67b12 100644 (file)
@@ -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;
diff --git a/src/testdir/dumps/Test_text_after_nowrap_5.dump b/src/testdir/dumps/Test_text_after_nowrap_5.dump
new file mode 100644 (file)
index 0000000..ffd5708
--- /dev/null
@@ -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| 
index 41d1609434d831d8a3ea5ac6f9a7b06c03f845b0..9cdd0da68877a2a82244031361991d11c6df0ef6 100644 (file)
@@ -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
 
index 1af1bcb3be80e5c315e79ee63b55971f1f1ca756..aa5ca6794dbd744a0f9655466d8f18b5a811e62c 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    725,
 /**/
     724,
 /**/