patch 9.0.1836: display wrong with virttext, linebreak and breakindent
Problem: Wrong display with "above" virtual text and 'linebreak' or
'breakindent' and 'showbreak'.
Solution: Exclude size of "above" virtual text when calculating them.
closes: #13000
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
diff --git a/src/testdir/dumps/Test_prop_above_and_before_1.dump b/src/testdir/dumps/Test_prop_above_and_before_1.dump
new file mode 100644
index 0000000..b44c5db
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_above_and_before_1.dump
@@ -0,0 +1,6 @@
+|a+0&#ffffff0| @73
+| +0#e000e06&@1|1|2|3| +0#0000000&@69
+@2|b|:+0#e000e06&| |4|5|6| +0#0000000&>c| @64
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|2|,|5|-|8|5| @7|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_above_and_before_2.dump b/src/testdir/dumps/Test_prop_above_and_before_2.dump
new file mode 100644
index 0000000..9fd4040
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_above_and_before_2.dump
@@ -0,0 +1,6 @@
+|a+0&#ffffff0| @73
+| +0#e000e06&@1|1|2|3| +0#0000000&@69
+@2|b|:+0#e000e06&| |4|5|6> +0#0000000&|c| @64
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|2|,|4|-|8|4| @7|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_above_and_before_3.dump b/src/testdir/dumps/Test_prop_above_and_before_3.dump
new file mode 100644
index 0000000..de63090
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_above_and_before_3.dump
@@ -0,0 +1,6 @@
+|a+0&#ffffff0| @73
+| +0#e000e06&@1|1|2|3| +0#0000000&@69
+@2>b|:+0#e000e06&| |4|5|6| +0#0000000&|c| @64
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|2|,|3|-|7|8| @7|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_above_and_before_4.dump b/src/testdir/dumps/Test_prop_above_and_before_4.dump
new file mode 100644
index 0000000..cf1a7a4
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_above_and_before_4.dump
@@ -0,0 +1,6 @@
+|a+0&#ffffff0| @73
+| +0#e000e06&@1|1|2|3| +0#0000000&@69
+@1> |b|:+0#e000e06&| |4|5|6| +0#0000000&|c| @64
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|2|,|2|-|7@1| @7|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_above_and_before_5.dump b/src/testdir/dumps/Test_prop_above_and_before_5.dump
new file mode 100644
index 0000000..d792715
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_above_and_before_5.dump
@@ -0,0 +1,6 @@
+|a+0&#ffffff0| @73
+| +0#e000e06&@1|1|2|3| +0#0000000&@69
+> @1|b|:+0#e000e06&| |4|5|6| +0#0000000&|c| @64
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|2|,|1|-|7|6| @7|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_above_linebreak_1.dump b/src/testdir/dumps/Test_prop_above_linebreak_1.dump
new file mode 100644
index 0000000..59b8108
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_above_linebreak_1.dump
@@ -0,0 +1,6 @@
+|1+0#e000e06#ffffff0|2|3| +0#0000000&@71
+|a| |b| @71
+|c| >d| @71
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|2|,|3| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_prop_above_linebreak_2.dump b/src/testdir/dumps/Test_prop_above_linebreak_2.dump
new file mode 100644
index 0000000..e97974c
--- /dev/null
+++ b/src/testdir/dumps/Test_prop_above_linebreak_2.dump
@@ -0,0 +1,6 @@
+|1+0#e000e06#ffffff0|2|3| +0#0000000&@71
+|a| >b| @71
+|c| |d| @71
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|1|,|3|-|7|8| @7|A|l@1|
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index c006912..736d50b 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -3523,6 +3523,51 @@
call StopVimInTerminal(buf)
endfunc
+func Test_prop_above_with_linebreak()
+ CheckRunVimInTerminal
+
+ let lines =<< trim END
+ setlocal linebreak breakindent breakindentopt=shift:4
+ call setline(1, ["a b", "c d"])
+ call prop_type_add('theprop' , #{highlight: 'Special'})
+ call prop_add(1, 0, #{type: 'theprop', text: '123', text_align: 'above'})
+ normal! 2gg$
+ END
+ call writefile(lines, 'XscriptPropAboveLinebreak', 'D')
+ let buf = RunVimInTerminal('-S XscriptPropAboveLinebreak', #{rows: 6})
+ call VerifyScreenDump(buf, 'Test_prop_above_linebreak_1', {})
+ call term_sendkeys(buf, 'k')
+ call VerifyScreenDump(buf, 'Test_prop_above_linebreak_2', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+func Test_prop_above_and_before()
+ CheckRunVimInTerminal
+
+ let lines =<< trim END
+ setlocal linebreak breakindent breakindentopt=shift:2
+ call setline(1, ["a", " b c"])
+ call prop_type_add('theprop' , #{highlight: 'Special'})
+ call prop_add(2, 0, #{type: 'theprop', text: ' 123', text_align: 'above'})
+ call prop_add(2, 4, #{type: 'theprop', text: ': 456'} )
+ normal! 2gg$
+ END
+ call writefile(lines, 'XscriptPropAboveAndBefore', 'D')
+ let buf = RunVimInTerminal('-S XscriptPropAboveAndBefore', #{rows: 6})
+ call VerifyScreenDump(buf, 'Test_prop_above_and_before_1', {})
+ call term_sendkeys(buf, 'h')
+ call VerifyScreenDump(buf, 'Test_prop_above_and_before_2', {})
+ call term_sendkeys(buf, 'h')
+ call VerifyScreenDump(buf, 'Test_prop_above_and_before_3', {})
+ call term_sendkeys(buf, 'h')
+ call VerifyScreenDump(buf, 'Test_prop_above_and_before_4', {})
+ call term_sendkeys(buf, 'h')
+ call VerifyScreenDump(buf, 'Test_prop_above_and_before_5', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
func Test_prop_below_split_line()
CheckRunVimInTerminal