summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-10-11 21:02:09 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-11 21:02:09 +0100
commit7e017461e21ac534f8a0d59c1165d11358c69d87 (patch)
treeea89af10bbb69abf0fe0f55a23002f54ba6490e1
parenta275f2cdcc4353e7653a69c7c818422db5da599d (diff)
downloadvim-git-7e017461e21ac534f8a0d59c1165d11358c69d87.tar.gz
patch 9.0.0725: virtual text "after" wraps to next line when 'wrap' is offv9.0.0725
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)
-rw-r--r--src/drawline.c8
-rw-r--r--src/testdir/dumps/Test_text_after_nowrap_5.dump8
-rw-r--r--src/testdir/test_textprop.vim20
-rw-r--r--src/version.c2
4 files changed, 35 insertions, 3 deletions
diff --git a/src/drawline.c b/src/drawline.c
index 3a4156bc2..bc3944213 100644
--- 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;
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
index 000000000..ffd57084b
--- /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|
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index 41d160943..9cdd0da68 100644
--- 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
diff --git a/src/version.c b/src/version.c
index 1af1bcb3b..aa5ca6794 100644
--- 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,