patch 9.1.1391: Vim does not have a vertical tabpanel
Problem: Vim does not have a tabpanel
Solution: include the tabpanel feature
(Naruhiko Nishino, thinca)
closes: #17263
Co-authored-by: thinca <thinca@gmail.com>
Signed-off-by: Naruhiko Nishino <naru123456789@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 88bf5c3..ef86a7d 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -311,6 +311,7 @@
test_tab \
test_tabline \
test_tabpage \
+ test_tabpanel \
test_tagcase \
test_tagfunc \
test_tagjump \
@@ -567,6 +568,7 @@
test_system.res \
test_tab.res \
test_tabpage.res \
+ test_tabpanel.res \
test_tagjump.res \
test_taglist.res \
test_tcl.res \
diff --git a/src/testdir/dumps/Test_tabpanel_commandline_0.dump b/src/testdir/dumps/Test_tabpanel_commandline_0.dump
new file mode 100644
index 0000000..5ed359c
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_commandline_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| | +0#0000000#ffffff0@34
+|[+2&&|N|o| |N|a|m|e|]| |~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+|a+0#0000001#ffff4012|b@1|r|e|v|i|a|t|e| +3#0000000#ffffff0@1|a|b|c|l|e|a|r| @1|a|b|o|v|e|l|e|f|t| @1|a|b|s|t|r|a|c|t| @4
+|:+0&&|a|b@1|r|e|v|i|a|t|e> @33
diff --git a/src/testdir/dumps/Test_tabpanel_commandline_1.dump b/src/testdir/dumps/Test_tabpanel_commandline_1.dump
new file mode 100644
index 0000000..a44f54e
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_commandline_1.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| | +0#0000000#ffffff0@34
+|[+2&&|N|o| |N|a|m|e|]| |~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +0#0000001#e0e0e08|a|b@1|r|e|v|i|a|t|e| @4| +0#4040ff13#ffffff0@28
+| +0#0000001#ffd7ff255|a|b|c|l|e|a|r| @7| +0#4040ff13#ffffff0@28
+| +0#0000001#ffd7ff255|a|b|o|v|e|l|e|f|t| @5| +0#4040ff13#ffffff0@28
+| +0#0000001#ffd7ff255|a|b|s|t|r|a|c|t| @6| +0#4040ff13#ffffff0@28
+|:+0#0000000&|a|b@1|r|e|v|i|a|t|e> @33
diff --git a/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump b/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump
new file mode 100644
index 0000000..5fd8f9b
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @1|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|+| |[|N|o| |N|a|m|e|]| | +1&&@9|X+8#0000001#e0e0e08
+|++2#0000000#ffffff0| |[|N|o| |N|a|m|e>x+0&&@34
+| +1&&@9|x+0&&@34
+| +1&&@9|x+0&&@29| @4
+| +1&&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +0#0000000&@36|1|,|1| @4
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_00.dump b/src/testdir/dumps/Test_tabpanel_drawing_00.dump
new file mode 100644
index 0000000..1491b66
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_00.dump
@@ -0,0 +1,6 @@
+> +0&#ffffff0@44
+|~+0#4040ff13&| @43
+|~| @43
+|~| @43
+|~| @43
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_01.dump b/src/testdir/dumps/Test_tabpanel_drawing_01.dump
new file mode 100644
index 0000000..8601542
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_01.dump
@@ -0,0 +1,6 @@
+|X+2&#ffffff0|t|a|b|p|a|n|e|l|1| @5> +0&&@28
+| +1&&@15|~+0#4040ff13&| @27
+| +1#0000000&@15|~+0#4040ff13&| @27
+| +1#0000000&@15|~+0#4040ff13&| @27
+| +1#0000000&@15|~+0#4040ff13&| @27
+| +0#0000000&@26|0|,|0|-|1| @8|A|l|0|,
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_02.dump b/src/testdir/dumps/Test_tabpanel_drawing_02.dump
new file mode 100644
index 0000000..f7567dc
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_02.dump
@@ -0,0 +1,6 @@
+|2+2#e000e06#ffffff0| +2#0000000&|X|t|a|b|p|a|n|e|l|1| @3> +0&&@19||+1&&| +0&&@7
+| +1&&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6
+| +1#0000000&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6
+| +1#0000000&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6
+| +1#0000000&@15|<+3&&|a|b|p|a|n|e|l|1| |0|,|0|-|1| @1|A|l@1| |<+1&&|l|1| |0|,|0|-
+| +0&&@44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_03.dump b/src/testdir/dumps/Test_tabpanel_drawing_03.dump
new file mode 100644
index 0000000..cb67b9e
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_03.dump
@@ -0,0 +1,6 @@
+|2+2#e000e06#ffffff0|++2#0000000&| |X|t|a|b|p|a|n|e|l|1| @2>a+0&&| @18||+1&&|a+0&&| @6
+| +1&&@15|b+0&&| @18||+1&&|b+0&&| @6
+| +1&&@15|c+0&&| @18||+1&&|c+0&&| @6
+| +1&&@15|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6
+| +1#0000000&@15|<+3&&|n|e|l|1| |[|+|]| |1|,|1| @3|A|l@1| |<+1&&|+|]| |1|,|1|
+| +0&&@44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_04.dump b/src/testdir/dumps/Test_tabpanel_drawing_04.dump
new file mode 100644
index 0000000..61b759e
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_04.dump
@@ -0,0 +1,6 @@
+|2+8#e000e06#e0e0e08|++8#0000001&| |X|t|a|b|p|a|n|e|l|1| @2>d+0#0000000#ffffff0| @27
+|++2&&| |X|t|a|b|p|a|n|e|l|2| @3|e+0&&| @27
+| +1&&@15|f+0&&| @27
+| +1&&@15|~+0#4040ff13&| @27
+| +1#0000000&@15|~+0#4040ff13&| @27
+| +0#0000000&@42|1|,
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_05.dump b/src/testdir/dumps/Test_tabpanel_drawing_05.dump
new file mode 100644
index 0000000..e9ea7cb
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_05.dump
@@ -0,0 +1,6 @@
+| +8#0000001#e0e0e08@15>d+0#0000000#ffffff0| @27
+|1+8#0000001#e0e0e08|:|X+2#4040ff13#ffffff0|t|a|b|p|a|n|e|l|1| +8#0000001#e0e0e08@3|e+0#0000000#ffffff0| @27
+| +2&&@15|f+0&&| @27
+|2+2&&|:|X+0#4040ff13&|t|a|b|p|a|n|e|l|2| +2#0000000&@3|~+0#4040ff13&| @27
+| +1#0000000&@15|~+0#4040ff13&| @27
+| +0#0000000&@42|1|,
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_06.dump b/src/testdir/dumps/Test_tabpanel_drawing_06.dump
new file mode 100644
index 0000000..b5935d3
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_06.dump
@@ -0,0 +1,6 @@
+>d+0&#ffffff0| @27| +8#0000001#e0e0e08@15
+|e+0#0000000#ffffff0| @27|1+8#0000001#e0e0e08|:|X+2#4040ff13#ffffff0|t|a|b|p|a|n|e|l|1| +8#0000001#e0e0e08@3
+|f+0#0000000#ffffff0| @27| +2&&@15
+|~+0#4040ff13&| @27|2+2#0000000&|:|X+0#4040ff13&|t|a|b|p|a|n|e|l|2| +2#0000000&@3
+|~+0#4040ff13&| @27| +1#0000000&@15
+| +0&&@26|1|,|1| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_07.dump b/src/testdir/dumps/Test_tabpanel_drawing_07.dump
new file mode 100644
index 0000000..440988b
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_07.dump
@@ -0,0 +1,6 @@
+> +0&#ffffff0@28| +8#0000001#e0e0e08@15
+|~+0#4040ff13#ffffff0| @27|1+8#0000001#e0e0e08|:|X+2#4040ff13#ffffff0|t|a|b|p|a|n|e|l|1| +8#0000001#e0e0e08@3
+|~+0#4040ff13#ffffff0| @27| +8#0000001#e0e0e08@15
+|~+0#4040ff13#ffffff0| @27|2+8#0000001#e0e0e08|:|X+0#4040ff13#ffffff0|t|a|b|p|a|n|e|l|2| +8#0000001#e0e0e08@3
+|~+0#4040ff13#ffffff0| @27| +2#0000000&@15
+| +0&&@26|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_08.dump b/src/testdir/dumps/Test_tabpanel_drawing_08.dump
new file mode 100644
index 0000000..57bbf92
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_08.dump
@@ -0,0 +1,6 @@
+>a+0&#ffffff0| @18||+1&&|a+0&&| @6| +2&&@15
+|b+0&&| @18||+1&&|b+0&&| @6|1+2&&|:|X+0#4040ff13&|t|a|b|p|a|n|e|l|1| +2#0000000&@3
+|c+0&&| @18||+1&&|c+0&&| @6| +1&&@15
+|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @6| +1#0000000&@15
+|<+3&&|n|e|l|1| |[|+|]| |1|,|1| @3|A|l@1| |<+1&&|+|]| |1|,|1| @16
+| +0&&@26|1|,|1| @10|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump
new file mode 100644
index 0000000..40e3bd7
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump
@@ -0,0 +1,10 @@
+| +8#0000001#e0e0e08@19> +0#0000000#ffffff0@24
+|T+8#0000001#e0e0e08|O|P| @16|~+0#4040ff13#ffffff0| @23
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12|~+0#4040ff13#ffffff0| @23
+|B+8#0000001#e0e0e08|O|T@1|O|M| @13|~+0#4040ff13#ffffff0| @23
+| +2#0000000&@19|~+0#4040ff13&| @23
+|T+2#0000000&|O|P| @16|~+0#4040ff13&| @23
+|b+2#0000000&@2|.|t|x|t| @12|~+0#4040ff13&| @23
+|B+2#0000000&|O|T@1|O|M| @13|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +0#0000000&@44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump
new file mode 100644
index 0000000..190e5d9
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump
@@ -0,0 +1,10 @@
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12|!+0#0000000#ffffff0> @23
+|b+2&&@2|.|t|x|t| @12|!+0#0000001#e0e0e08| @14| +0#0000000#0000001| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|#+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|&+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|*+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|++0#0000001#ffd7ff255@1| @13| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|-+0#0000001#ffd7ff255@1| @13| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|<+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|=+0#0000001#ffd7ff255| @14| +0#0000000#a8a8a8255| +0#4040ff13#ffffff0@7
+|-+2#0000000&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |5|9|6| +0#0000000&@27
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump b/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump
new file mode 100644
index 0000000..9888bc0
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump
@@ -0,0 +1,10 @@
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12|!+0#0000000#ffffff0| @23
+|++2&&| |b@2|.|t|x|t| @10| +0&&@1|a|b@1|r|e|v|i|a|t|e> @12
+| +1&&@19|~+0#4040ff13&| +0#0000001#e0e0e08|a|b@1|r|e|v|i|a|t|e| @4| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|~+0#4040ff13&| +0#0000001#ffd7ff255|a|b|c|l|e|a|r| @7| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|~+0#4040ff13&| +0#0000001#ffd7ff255|a|b|o|v|e|l|e|f|t| @5| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|~+0#4040ff13&| +0#0000001#ffd7ff255|a|b|s|t|r|a|c|t| @6| +0#4040ff13#ffffff0@7
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+|-+2#0000000&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |4| +0#0000000&@29
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_0.dump
new file mode 100644
index 0000000..fa1947e
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_0.dump
@@ -0,0 +1,10 @@
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0@1|9| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|1|
+|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&|1|0| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|2|
+| +1#0000000&@19| +0#af5f00255&|1@1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|3|
+| +1#0000000&@19| +0#af5f00255&|1|2| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|4|
+| +1#0000000&@19| +0#af5f00255&|1|3| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|5|
+| +1#0000000&@19| +0#af5f00255&|1|4| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|6|
+| +1#0000000&@19| +0#af5f00255&|1|5| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|7|
+| +1#0000000&@19| +0#af5f00255&|1|6| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t||+1&&| +0#af5f00255&@1|8|
+| +1#0000000&@19|<+3&&|.|t|x|t| |[|+|]| |1|2|,|1| @3|8|%| |<+1&&| |1|,
+| +0&&@44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_1.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_1.dump
new file mode 100644
index 0000000..6370449
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_1.dump
@@ -0,0 +1,10 @@
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0@1|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&@1|2| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&@1|3| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19|b@2|.|t|x|t| |[|+|]| @1|1|,|1| @5|T|o|p
+| @19| +0#af5f00255&|1|5| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&|1|6| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&|1|7| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&|1|8| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19|b+3&&@2|.|t|x|t| |[|+|]| @1|1|6|,|1| @4|1|4|%
+| +0&&@44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_2.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_2.dump
new file mode 100644
index 0000000..50b55ea
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_2.dump
@@ -0,0 +1,10 @@
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0|1|9| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&|2|0| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&|2|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&|2@1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19|b+3&&@2|.|t|x|t| |[|+|]| @1|2|0|,|1| @4|1|8|%
+| +1&&@19| +0#af5f00255&@1|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&@1|2| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19| +0#af5f00255&@1|3| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t|e|x|t| @1
+| +1&&@19|b@2|.|t|x|t| |[|+|]| @1|1|,|1| @5|T|o|p
+| +0&&@44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_scrolling_3.dump b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_3.dump
new file mode 100644
index 0000000..fdde1ab
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_scrolling_3.dump
@@ -0,0 +1,10 @@
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12| +0#af5f00255#ffffff0@1|1| ||+1#0000000&| +0#af5f00255&|2|5| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+|2+2#e000e06&|++2#0000000&| |b@2|.|t|x|t| @9| +0#af5f00255&@1|2| ||+1#0000000&| +0#af5f00255&|2|6| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+| +1&&@19| +0#af5f00255&@1|3| ||+1#0000000&| +0#af5f00255&|2|7| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+| +1&&@19| +0#af5f00255&@1|4| ||+1#0000000&| +0#af5f00255&|2|8| >@+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+| +1&&@19| +0#af5f00255&@1|5| ||+1#0000000&| +0#af5f00255&|2|9| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+| +1&&@19| +0#af5f00255&@1|6| ||+1#0000000&| +0#af5f00255&|3|0| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+| +1&&@19| +0#af5f00255&@1|7| ||+1#0000000&| +0#af5f00255&|3|1| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+| +1&&@19| +0#af5f00255&@1|8| ||+1#0000000&| +0#af5f00255&|3|2| |t+0#0000000&|e|x|t| |t|e|x|t| |t|e|x|t| |t
+| +1&&@19|<| |1|,| |<+3&&|.|t|x|t| |[|+|]| |2|8|,|1| @2|2|6|%
+| +0&&@44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump
new file mode 100644
index 0000000..080fa27
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10|╔+0#0000000#ffffff0|═|╗|.@18|╔|═|╗
+|[+2&&|S|c|r|a|t|c|h|]| @10|║+0&&|@|║|.@18|║|@|║
+| +1&&@19|╚+0&&|═|╝|.@5|a|t|c|u|r|s|o|r|.@4|╚|═|╝
+| +1&&@19|.+0&&@8>.@15
+| +1&&@19|.+0&&@24
+| +1&&@19|╔+0&&|═|╗|.@18|╔|═|╗
+| +1&&@19|║+0&&|@|║|.@18|║|@|║
+| +1&&@19|╚+0&&|═|╝|.@18|╚|═|╝
+| +1&&@19|.+0&&@24
+| @44
diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump
new file mode 100644
index 0000000..9214434
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump
@@ -0,0 +1,10 @@
+|$+8#0000001#e0e0e08| |[|a@2|]| |$|│+1#0000000#ffffff0|$| @13|[|c@2|]| @13|$
+|$+8#0000001#e0e0e08| |[|b@2|]| |$|│+1#0000000#ffffff0> +0&&@34
+|$+2&&| |[|c@2|]| |$|│+1&&|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|$+3&&| @13|[|c@2|]| @13|$
+|"+0&&|c@2|"| |[|N|e|w|]| @33
diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump
new file mode 100644
index 0000000..dae0d0b
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump
@@ -0,0 +1,10 @@
+|$+1&#ffffff0| @13|[|c@2|]| @13|$|│|$+8#0000001#e0e0e08| |[|a@2|]| |$
+> +0#0000000#ffffff0@34|│+1&&|$+8#0000001#e0e0e08| |[|b@2|]| |$
+|~+0#4040ff13#ffffff0| @33|│+1#0000000&|$+2&&| |[|c@2|]| |$
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|$+3&&| @13|[|c@2|]| @13|$|│+1&&| @8
+|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|+|=|a|l|i|g|n|:|r|i|g|h|t| @15
diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump
new file mode 100644
index 0000000..dd55218
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump
@@ -0,0 +1,10 @@
+|t+8#0000001#e0e0e08|o|p| @7|a@2| @1|b@2| | +2#0000000#ffffff0|c@2| | +1&&@18|X+8#0000001#e0e0e08
+|$| |[|a@2|]| @1|$> +0#0000000#ffffff0@34
+|b+8#0000001#e0e0e08|o|t@1|o|m| @3|~+0#4040ff13#ffffff0| @33
+|t+8#0000001#e0e0e08|o|p| @6|~+0#4040ff13#ffffff0| @33
+|$+8#0000001#e0e0e08| |[|b@2|]| @1|$|~+0#4040ff13#ffffff0| @33
+|b+8#0000001#e0e0e08|o|t@1|o|m| @3|~+0#4040ff13#ffffff0| @33
+|t+2#0000000&|o|p| @6|~+0#4040ff13&| @33
+|$+2#0000000&| |[|c@2|]| @1|$|~+0#4040ff13&| @33
+|b+2#0000000&|o|t@1|o|m| @3|~+0#4040ff13&| @33
+|"+0#0000000&|c@2|"| |[|N|e|w|]| @25|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump
new file mode 100644
index 0000000..84bf683
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump
@@ -0,0 +1,10 @@
+| +8#0000001#e0e0e08|a@2| @1|b@2| | +2#0000000#ffffff0|c@2| | +1&&@19|t+8#0000001#e0e0e08|o|p| @6
+> +0#0000000#ffffff0@34|$+8#0000001#e0e0e08| |[|a@2|]| @1|$
+|~+0#4040ff13#ffffff0| @33|b+8#0000001#e0e0e08|o|t@1|o|m| @3
+|~+0#4040ff13#ffffff0| @33|t+8#0000001#e0e0e08|o|p| @6
+|~+0#4040ff13#ffffff0| @33|$+8#0000001#e0e0e08| |[|b@2|]| @1|$
+|~+0#4040ff13#ffffff0| @33|b+8#0000001#e0e0e08|o|t@1|o|m| @3
+|~+0#4040ff13#ffffff0| @33|t+2#0000000&|o|p| @6
+|~+0#4040ff13&| @33|$+2#0000000&| |[|c@2|]| @1|$
+|~+0#4040ff13&| @33|b+2#0000000&|o|t@1|o|m| @3
+|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|+|=|a|l|i|g|n|:|r|i|g|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump
new file mode 100644
index 0000000..e974381
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump
@@ -0,0 +1,10 @@
+|1+2&#ffffff0|:|t|a|b| @4> +0&&@34
+|2+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|3+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|4+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+| +0#0000000&@36|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump
new file mode 100644
index 0000000..3ac3dde
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump
@@ -0,0 +1,10 @@
+|1+8#0000001#e0e0e08|:|t|a|b| @4> +0#0000000#ffffff0@34
+|2+2&&|:|t|a|b| @4|~+0#4040ff13&| @33
+|3+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|4+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+| +0#0000000&@36|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump
new file mode 100644
index 0000000..7b980e6
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump
@@ -0,0 +1,10 @@
+|1+8#0000001#e0e0e08|:|t|a|b| @4> +0#0000000#ffffff0@34
+|2+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|3+2#0000000&|:|t|a|b| @4|~+0#4040ff13&| @33
+|4+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+| +0#0000000&@36|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump
new file mode 100644
index 0000000..fa3c09c
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump
@@ -0,0 +1,10 @@
+|1+8#0000001#e0e0e08|:|t|a|b| @4> +0#0000000#ffffff0@34
+|2+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|3+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|4+2#0000000&|:|t|a|b| @4|~+0#4040ff13&| @33
+|5+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|6+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|7+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|8+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+|9+8#0000001#e0e0e08|:|t|a|b| @4|~+0#4040ff13#ffffff0| @33
+| +0#0000000&@36|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump
new file mode 100644
index 0000000..07ff180
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump
@@ -0,0 +1,10 @@
+|1+8#0000001#e0e0e08|0|:|t|a|b| @3> +0#0000000#ffffff0@34
+|1+2&&@1|:|t|a|b| @3|~+0#4040ff13&| @33
+|1+8#0000001#e0e0e08|2|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33
+|1+8#0000001#e0e0e08|3|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33
+|1+8#0000001#e0e0e08|4|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33
+|1+8#0000001#e0e0e08|5|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33
+|1+8#0000001#e0e0e08|6|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33
+|1+8#0000001#e0e0e08|7|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33
+|1+8#0000001#e0e0e08|8|:|t|a|b| @3|~+0#4040ff13#ffffff0| @33
+|:+0#0000000&|t|a|b|n|e|x|t| |-|3| @25|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump
new file mode 100644
index 0000000..9214434
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump
@@ -0,0 +1,10 @@
+|$+8#0000001#e0e0e08| |[|a@2|]| |$|│+1#0000000#ffffff0|$| @13|[|c@2|]| @13|$
+|$+8#0000001#e0e0e08| |[|b@2|]| |$|│+1#0000000#ffffff0> +0&&@34
+|$+2&&| |[|c@2|]| |$|│+1&&|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|$+3&&| @13|[|c@2|]| @13|$
+|"+0&&|c@2|"| |[|N|e|w|]| @33
diff --git a/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump
new file mode 100644
index 0000000..dae0d0b
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump
@@ -0,0 +1,10 @@
+|$+1&#ffffff0| @13|[|c@2|]| @13|$|│|$+8#0000001#e0e0e08| |[|a@2|]| |$
+> +0#0000000#ffffff0@34|│+1&&|$+8#0000001#e0e0e08| |[|b@2|]| |$
+|~+0#4040ff13#ffffff0| @33|│+1#0000000&|$+2&&| |[|c@2|]| |$
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|$+3&&| @13|[|c@2|]| @13|$|│+1&&| @8
+|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|+|=|a|l|i|g|n|:|r|i|g|h|t| @15
diff --git a/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump b/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump
new file mode 100644
index 0000000..fdca7f1
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump
@@ -0,0 +1,10 @@
+|a+8#0000001#e0e0e08@2|.|t|x|t| @1|│+1#0000000#ffffff0| +8#0000001#e0e0e08|a@2|.|t|x|t| @1|b@2|.|t|x|t| | +2#0000000#ffffff0|c@2|.|t|x|t| | +1&&@6|X+8#0000001#e0e0e08
+|b@2|.|t|x|t| @1|│+1#0000000#ffffff0> +0&&@34
+|c+2&&@2|.|t|x|t| @1|│+1&&|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+|"+0#0000000&|c@2|.|t|x|t|"| |[|N|e|w|]| @21|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump
new file mode 100644
index 0000000..a50355f
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]|│+1#0000000#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@11|X+8#0000001#e0e0e08
+|[+2#0000000#ffffff0|N|o| |N|a|m|e|]|│+1&&> +0&&@34
+| +1&&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +0#0000000&@36|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump
new file mode 100644
index 0000000..e347c7e
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump
@@ -0,0 +1,10 @@
+|│+1&#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@20|X+8#0000001#e0e0e08
+|│+1#0000000#ffffff0> +0&&@43
+|│+1&&|~+0#4040ff13&| @42
+|│+1#0000000&|~+0#4040ff13&| @42
+|│+1#0000000&|~+0#4040ff13&| @42
+|│+1#0000000&|~+0#4040ff13&| @42
+|│+1#0000000&|~+0#4040ff13&| @42
+|│+1#0000000&|~+0#4040ff13&| @42
+|│+1#0000000&|~+0#4040ff13&| @42
+|:+0#0000000&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|1|,|v|0|,|0|-|1| @8|A|l@1
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump
new file mode 100644
index 0000000..d1c5b92
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]|│+1#0000000#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@11|X+8#0000001#e0e0e08
+|[+2#0000000#ffffff0|N|o| |N|a|m|e|]|│+1&&> +0&&@34
+| +1&&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+| +1#0000000&@8|│|~+0#4040ff13&| @33
+|:+0#0000000&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|1|0|,|v|e|r|t| @4|0|,|0|-|1| @2
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump
new file mode 100644
index 0000000..fc84c0b
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|│+1#0000000#ffffff0| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@19|X+8#0000001#e0e0e08
+|[+2#0000000#ffffff0|│+1&&> +0&&@42
+| +1&&|│|~+0#4040ff13&| @41
+| +1#0000000&|│|~+0#4040ff13&| @41
+| +1#0000000&|│|~+0#4040ff13&| @41
+| +1#0000000&|│|~+0#4040ff13&| @41
+| +1#0000000&|│|~+0#4040ff13&| @41
+| +1#0000000&|│|~+0#4040ff13&| @41
+| +1#0000000&|│|~+0#4040ff13&| @41
+|:+0#0000000&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|2|,|v|e|0|,|0|-|1| @8|A|l
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_0.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_0.dump
new file mode 100644
index 0000000..02aa109
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_0.dump
@@ -0,0 +1,10 @@
+| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@12|│|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]
+> +0#0000000#ffffff0@34|│+1&&|[+2&&|N|o| |N|a|m|e|]
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+| +0&&@26|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_1.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_1.dump
new file mode 100644
index 0000000..8e97a7e
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_1.dump
@@ -0,0 +1,10 @@
+| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@21|│
+> +0&&@43|│+1&&
+|~+0#4040ff13&| @42|│+1#0000000&
+|~+0#4040ff13&| @42|│+1#0000000&
+|~+0#4040ff13&| @42|│+1#0000000&
+|~+0#4040ff13&| @42|│+1#0000000&
+|~+0#4040ff13&| @42|│+1#0000000&
+|~+0#4040ff13&| @42|│+1#0000000&
+|~+0#4040ff13&| @42|│+1#0000000&
+|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|a|l|i|g|n|:|r|i|g|h|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_2.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_2.dump
new file mode 100644
index 0000000..6e33239
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_2.dump
@@ -0,0 +1,10 @@
+| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@12|│|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]
+> +0#0000000#ffffff0@34|│+1&&|[+2&&|N|o| |N|a|m|e|]
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|~+0#4040ff13&| @33|│+1#0000000&| @8
+|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|a|l|i|g|n|:|r|i|g|h|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_3.dump b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_3.dump
new file mode 100644
index 0000000..1f9255b
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_right_3.dump
@@ -0,0 +1,10 @@
+| +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@20|│|[+8#0000001#e0e0e08
+> +0#0000000#ffffff0@42|│+1&&|[+2&&
+|~+0#4040ff13&| @41|│+1#0000000&|
+|~+0#4040ff13&| @41|│+1#0000000&|
+|~+0#4040ff13&| @41|│+1#0000000&|
+|~+0#4040ff13&| @41|│+1#0000000&|
+|~+0#4040ff13&| @41|│+1#0000000&|
+|~+0#4040ff13&| @41|│+1#0000000&|
+|~+0#4040ff13&| @41|│+1#0000000&|
+|:+0&&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|a|l|i|g|n|:|r|i|g|h|0|,|0|-|1| @8|A|l@1|
diff --git a/src/testdir/dumps/Test_tabpanel_visual_0.dump b/src/testdir/dumps/Test_tabpanel_visual_0.dump
new file mode 100644
index 0000000..af7ba65
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_visual_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| |a+0&#a8a8a8255@2|1| |b@2|1| >c+0#0000000#ffffff0@2|1| |d@2|1| @15
+|++2&&| |[|N|o| |N|a|m|e|a+0&&@2|2| |b@2|2| |c@2|2| |d@2|2| @15
+| +1&&@9|a+0&&@2|3| |b@2|3| |c@2|3| |d@2|3| @15
+| +1&&@9|a+0&&@2|4| |b@2|4| |c@2|4| |d@2|4| @15
+| +1&&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@4|1@1| @17|1|,|1@1| @3
diff --git a/src/testdir/dumps/Test_tabpanel_visual_1.dump b/src/testdir/dumps/Test_tabpanel_visual_1.dump
new file mode 100644
index 0000000..0cdc5f2
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_visual_1.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| |a+0#0000000#ffffff0@2|1| |b@2|1| |c@2|1| |d@2|1| @15
+|++2&&| |[|N|o| |N|a|m|e|a+0&&@2|2| |b+0#0000001#a8a8a8255@2|2| |c@2>2+0#0000000#ffffff0| |d@2|2| @15
+| +1&&@9|a+0&&@2|3| |b@2|3| |c@2|3| |d@2|3| @15
+| +1&&@9|a+0&&@2|4| |b@2|4| |c@2|4| |d@2|4| @15
+| +1&&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@4|9| @18|2|,|1|4| @3
diff --git a/src/testdir/dumps/Test_tabpanel_visual_2.dump b/src/testdir/dumps/Test_tabpanel_visual_2.dump
new file mode 100644
index 0000000..9a307c1
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_visual_2.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| |a+0#0000000#ffffff0@2|1| |b@2|1| |c@2|1| |d@2|1| @15
+|++2&&| |[|N|o| |N|a|m|e|a+0&&@2|2| >b@2|2| |c@2|2| |d@2|2| @15
+| +1&&@9|a+0&&@2|3| |b@2|3| |c@2|3| |d@2|3| @15
+| +1&&@9|a+0&&@2|4| |b@2|4| |c@2|4| |d@2|4| @15
+| +1&&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+| +1#0000000&@9|~+0#4040ff13&| @33
+|b+0#0000000&@2|2| |c@2|2| @27|2|,|6| @4
diff --git a/src/testdir/gen_opt_test.vim b/src/testdir/gen_opt_test.vim
index 3d798e9..1f15453 100644
--- a/src/testdir/gen_opt_test.vim
+++ b/src/testdir/gen_opt_test.vim
@@ -94,6 +94,7 @@
\ 'scrolljump': [[-100, -1, 0, 1, 2, 15], [-101, 999]],
\ 'scrolloff': [[0, 1, 8, 999], [-1]],
\ 'shiftwidth': [[0, 1, 8, 999], [-1]],
+ \ 'showtabpanel': [[0, 1, 2], []],
\ 'sidescroll': [[0, 1, 8, 999], [-1]],
\ 'sidescrolloff': [[0, 1, 8, 999], [-1]],
\ 'tabstop': [[1, 4, 8, 12, 9999], [-1, 0, 10000]],
@@ -301,6 +302,11 @@
\ ['xxx']],
\ 'tabclose': [['', 'left', 'uselast', 'left,uselast'], ['xxx']],
\ 'tabline': [['', 'xxx'], ['%$', '%{', '%{%', '%{%}', '%(', '%)']],
+ \ 'tabpanel': [['', 'aaa', 'bbb'], []],
+ \ 'tabpanelopt': [['', 'align:left', 'align:right', 'vert', 'columns:0',
+ \ 'columns:20', 'columns:999'],
+ \ ['xxx', 'align:', 'align:middle', 'colomns:', 'cols:10',
+ \ 'cols:-1']],
\ 'tagcase': [['followic', 'followscs', 'ignore', 'match', 'smart'],
\ ['', 'xxx', 'smart,match']],
\ 'termencoding': [has('gui_gtk') ? [] : ['', 'utf-8'], ['xxx']],
@@ -373,8 +379,17 @@
\ 'verbosefile': [[], ['call delete("Xfile")']],
\}
-const invalid_options = test_values->keys()
+let invalid_options = test_values->keys()
\->filter({-> v:val !~# '^other' && !exists($"&{v:val}")})
+for s:skip_option in [
+ \ [!has('tabpanel'), 'tabpanel'],
+ \ [!has('tabpanel'), 'tabpanelopt'],
+ \ [!has('tabpanel'), 'showtabpanel'],
+ \ ]
+ if s:skip_option[0]
+ call remove(invalid_options, s:skip_option[1])
+ endif
+endfor
if !empty(invalid_options)
throw $"Invalid option name in test_values: '{invalid_options->join("', '")}'"
endif
@@ -406,6 +421,8 @@
let [pre_processing, post_processing] = get(test_prepost, fullname, [[], []])
let script += pre_processing
+ " Setting an option can only fail when it's implemented.
+ call add(script, $"if exists('+{fullname}')")
if line =~ 'P_BOOL'
for opt in [fullname, shortname]
for cmd in ['set', 'setlocal', 'setglobal']
@@ -439,8 +456,6 @@
endfor
" Failure tests
- " Setting an option can only fail when it's implemented.
- call add(script, $"if exists('+{fullname}')")
for opt in [fullname, shortname]
for cmd in ['set', 'setlocal', 'setglobal']
for val in invalid_values
@@ -464,7 +479,6 @@
endfor
endfor
endfor
- call add(script, "endif")
endif
" Cannot change 'termencoding' in GTK
@@ -476,6 +490,8 @@
call add(script, 'endif')
endif
+ call add(script, "endif")
+
let script += post_processing
call add(script, 'endfunc')
endwhile
diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim
index 68933a3..9a3fe20 100644
--- a/src/testdir/test_cmdline.vim
+++ b/src/testdir/test_cmdline.vim
@@ -4345,4 +4345,9 @@
set wildoptions&
endfunc
+func Test_redrawtabpanel_error()
+ CheckNotFeature tabpanel
+ call assert_fails(':redrawtabpanel', 'E1547:')
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim
new file mode 100644
index 0000000..630226f
--- /dev/null
+++ b/src/testdir/test_tabpanel.vim
@@ -0,0 +1,480 @@
+" Tests for tabpanel
+
+source check.vim
+source screendump.vim
+CheckFeature tabpanel
+
+function! s:reset()
+ set tabpanel&
+ set tabpanelopt&
+ set showtabpanel&
+endfunc
+
+function! Test_tabpanel_mouse()
+ let save_showtabline = &showtabline
+ let save_mouse = &mouse
+ set showtabline=0 mouse=a
+
+ tabnew
+ tabnew
+
+ call test_setmouse(1, 1)
+ call feedkeys("\<LeftMouse>", 'xt')
+ call assert_equal(3, tabpagenr())
+
+ set showtabpanel=2 tabpanelopt=columns:10
+
+ call test_setmouse(1, 1)
+ call feedkeys("\<LeftMouse>", 'xt')
+ call assert_equal(1, tabpagenr())
+ call test_setmouse(2, 1)
+ call feedkeys("\<LeftMouse>", 'xt')
+ call assert_equal(2, tabpagenr())
+ call test_setmouse(3, 1)
+ call feedkeys("\<LeftMouse>", 'xt')
+ call assert_equal(3, tabpagenr())
+
+ call feedkeys("\<LeftMouse>", 'xt')
+ call test_setmouse(2, 3)
+ let pos = getmousepos()
+ call assert_equal(2, pos['winrow'])
+ call assert_equal(0, pos['wincol'])
+ call assert_equal(2, pos['screenrow'])
+ call assert_equal(3, pos['screencol'])
+
+ call test_setmouse(1, 11)
+ call feedkeys("\<LeftMouse>", 'xt')
+ let pos = getmousepos()
+ call assert_equal(1, pos['winrow'])
+ call assert_equal(1, pos['wincol'])
+ call assert_equal(1, pos['screenrow'])
+ call assert_equal(11, pos['screencol'])
+
+ new
+ wincmd x
+
+ call test_setmouse(10, 11)
+ call feedkeys("\<LeftMouse>", 'xt')
+ let pos = getmousepos()
+ call assert_equal(10, pos['winrow'])
+ call assert_equal(1, pos['wincol'])
+ call assert_equal(10, pos['screenrow'])
+ call assert_equal(11, pos['screencol'])
+
+ tabonly!
+ call s:reset()
+ let &mouse = save_mouse
+ let &showtabline = save_showtabline
+endfunc
+
+function! Test_tabpanel_drawing()
+ CheckScreendump
+
+ let lines =<< trim END
+ function! MyTabPanel()
+ let n = g:actual_curtabpage
+ let hi = n == tabpagenr() ? 'TabLineSel' : 'TabLine'
+ let label = printf("\n%%#%sTabNumber#%d:%%#%s#", hi, n, hi)
+ let label ..= '%1*%f%*'
+ return label
+ endfunction
+ hi User1 ctermfg=12
+
+ set showtabline=0
+ set showtabpanel=0
+ set tabpanelopt=columns:16
+ set tabpanel=
+ silent edit Xtabpanel1
+
+ nnoremap \01 <Cmd>set showtabpanel=2<CR>
+ nnoremap \02 <C-w>v
+ nnoremap \03 <Cmd>call setline(1, ['a', 'b', 'c'])<CR>
+ nnoremap \04 <Cmd>silent tabnew Xtabpanel2<CR><Cmd>call setline(1, ['d', 'e', 'f'])<CR>
+ nnoremap \05 <Cmd>set tabpanel=%!MyTabPanel()<CR>
+ nnoremap \06 <Cmd>set tabpanelopt+=align:right<CR>
+ nnoremap \07 <Cmd>tab terminal NONE<CR><C-w>N
+ nnoremap \08 <Cmd>tabclose!<CR><Cmd>tabclose!<CR>
+ END
+ call writefile(lines, 'XTest_tabpanel', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel', {'rows': 6, 'cols': 45})
+
+ call VerifyScreenDump(buf, 'Test_tabpanel_drawing_00', {})
+
+ for i in range(1, 8)
+ let n = printf('%02d', i)
+ call term_sendkeys(buf, '\' .. n)
+ call VerifyScreenDump(buf, 'Test_tabpanel_drawing_' .. n, {})
+ endfor
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_drawing_with_popupwin()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:20
+ set showtabline=0
+ tabnew
+ setlocal buftype=nofile
+ call setbufline(bufnr(), 1, repeat([repeat('.', &columns - 20)], &lines))
+ highlight TestingForTabPanelPopupwin guibg=#7777ff guifg=#000000
+ for line in [1, &lines]
+ for col in [1, &columns - 20 - 2]
+ call popup_create([
+ \ '@',
+ \ ], {
+ \ 'line': line,
+ \ 'col': col,
+ \ 'border': [],
+ \ 'highlight': 'TestingForTabPanelPopupwin',
+ \ })
+ endfor
+ endfor
+ call cursor(4, 10)
+ call popup_atcursor('atcursor', {
+ \ 'highlight': 'TestingForTabPanelPopupwin',
+ \ })
+ END
+ call writefile(lines, 'XTest_tabpanel_with_popupwin', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_with_popupwin', {'rows': 10, 'cols': 45})
+
+ call VerifyScreenDump(buf, 'Test_tabpanel_drawing_with_popupwin_0', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_drawing_fill_tailing()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:20
+ set showtabline=0
+ e aaa.txt
+ tabnew
+ e bbb.txt
+ let &tabpanel = "abc"
+ redraw!
+ " Check whether "abc" is cleared
+ let &tabpanel = "\nTOP\n%f\nBOTTOM"
+ END
+ call writefile(lines, 'XTest_tabpanel_fill_tailing', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_fill_tailing', {'rows': 10, 'cols': 45})
+
+ call VerifyScreenDump(buf, 'Test_tabpanel_drawing_fill_tailing_0', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_drawing_pum()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:20
+ set showtabline=0
+ e aaa.txt
+ tabnew
+ e bbb.txt
+ END
+ call writefile(lines, 'XTest_tabpanel_pum', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_pum', {'rows': 10, 'cols': 45})
+
+ call term_sendkeys(buf, "i\<C-x>\<C-v>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_0', {})
+
+ call term_sendkeys(buf, "\<cr> ab\<C-x>\<C-v>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_1', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_scrolling()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:20
+ set showtabline=0
+ set nowrap
+ set number
+ e aaa.txt
+ tabnew
+ e bbb.txt
+ vsplit
+ call setbufline(bufnr(), 1, repeat(['text text text text'], 100))
+ wincmd =
+ END
+ call writefile(lines, 'XTest_tabpanel_scrolling', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_scrolling', {'rows': 10, 'cols': 45})
+ let n = 0
+ for c in ['H', 'J', 'K', 'L']
+ call term_sendkeys(buf, ":wincmd " .. c .. "\<cr>")
+ call term_sendkeys(buf, "\<C-d>\<C-d>")
+ call term_sendkeys(buf, "r@")
+ call VerifyScreenDump(buf, 'Test_tabpanel_drawing_scrolling_' .. n, {})
+ let n += 1
+ endfor
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_many_tabpages()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:10
+ set showtabline=0
+ set tabpanel=%{g:actual_curtabpage}:tab
+ execute join(repeat(['tabnew'], 20), ' | ')
+ END
+ call writefile(lines, 'XTest_tabpanel_many_tabpages', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_many_tabpages', {'rows': 10, 'cols': 45})
+ for n in range(0, 3)
+ call term_sendkeys(buf, "gt")
+ call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_' .. n, {})
+ endfor
+ call term_sendkeys(buf, ":tabnext +10\<cr>")
+ call term_sendkeys(buf, ":tabnext -3\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_many_tabpages_4', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_visual()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:10
+ set showtabline=0
+ tabnew
+ call setbufline(bufnr(), 1, ['aaa1 bbb1 ccc1 ddd1', 'aaa2 bbb2 ccc2 ddd2', 'aaa3 bbb3 ccc3 ddd3', 'aaa4 bbb4 ccc4 ddd4'])
+ END
+ call writefile(lines, 'XTest_tabpanel_visual', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_visual', {'rows': 10, 'cols': 45})
+ call term_sendkeys(buf, "v2w")
+ call VerifyScreenDump(buf, 'Test_tabpanel_visual_0', {})
+ call term_sendkeys(buf, "\<esc>0jw")
+ call term_sendkeys(buf, "v2wge")
+ call VerifyScreenDump(buf, 'Test_tabpanel_visual_1', {})
+ call term_sendkeys(buf, "y:echo @\"\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_visual_2', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_commandline()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:10
+ set showtabline=0
+ tabnew
+ END
+ call writefile(lines, 'XTest_tabpanel_commandline', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_commandline', {'rows': 10, 'cols': 45})
+ call term_sendkeys(buf, ":ab\<tab>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_commandline_0', {})
+
+ call term_sendkeys(buf, "\<esc>")
+ call term_sendkeys(buf, ":set wildoptions=pum\<cr>")
+ call term_sendkeys(buf, ":ab\<tab>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_commandline_1', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_tabline_and_tabpanel()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:10,vert
+ set fillchars=tpl_vert:│
+ set showtabline=2
+ e aaa.txt
+ tabnew
+ e bbb.txt
+ tabnew
+ e ccc.txt
+ END
+ call writefile(lines, 'XTest_tabpanel_tabline_and_tabpanel', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_tabline_and_tabpanel', {'rows': 10, 'cols': 45})
+ call VerifyScreenDump(buf, 'Test_tabpanel_tabline_and_tabpanel_0', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_dont_overflow_into_tabpanel()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:10
+ set showtabline=2
+ tabnew
+ call setline(1, repeat('x', 100))
+ set wrap
+ END
+ call writefile(lines, 'XTest_tabpanel_dont_overflow_into_tabpanel', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_dont_overflow_into_tabpanel', {'rows': 10, 'cols': 45})
+ call VerifyScreenDump(buf, 'Test_tabpanel_dont_overflow_into_tabpanel_0', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_dont_vert_is_multibytes_left()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=columns:10,vert
+ set fillchars=tpl_vert:│
+ set showtabline=2
+ tabnew
+ END
+ call writefile(lines, 'XTest_tabpanel_vert_is_multibyte_lefts', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibyte_lefts', {'rows': 10, 'cols': 45})
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_0', {})
+
+ call term_sendkeys(buf, ":set tabpanelopt=columns:1,vert\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_1', {})
+
+ call term_sendkeys(buf, ":set tabpanelopt=columns:10,vert\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_2', {})
+
+ call term_sendkeys(buf, ":set tabpanelopt=columns:2,vert\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_left_3', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_dont_vert_is_multibytes_right()
+ CheckScreendump
+
+ let lines =<< trim END
+ set showtabpanel=2
+ set tabpanelopt=align:right,columns:10,vert
+ set fillchars=tpl_vert:│
+ set showtabline=2
+ tabnew
+ END
+ call writefile(lines, 'XTest_tabpanel_vert_is_multibytes_right', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_vert_is_multibytes_right', {'rows': 10, 'cols': 45})
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_0', {})
+
+ call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:1,vert\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_1', {})
+
+ call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:10,vert\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_2', {})
+
+ call term_sendkeys(buf, ":set tabpanelopt=align:right,columns:2,vert\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_vert_is_multibytes_right_3', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_eval_tabpanel_statusline_tabline()
+ CheckScreendump
+
+ let lines =<< trim END
+ function! Expr()
+ return "$%=[%f]%=$"
+ endfunction
+ set laststatus=2
+ set showtabline=2
+ set showtabpanel=2
+ set statusline=%!Expr()
+ set tabline=%!Expr()
+ set tabpanel=%!Expr()
+ set tabpanelopt=columns:10,vert
+ set fillchars=tpl_vert:│
+ e aaa
+ tabnew
+ e bbb
+ tabnew
+ e ccc
+ END
+ call writefile(lines, 'XTest_tabpanel_eval_tabpanel_statusline_tabline', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45})
+ call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_0', {})
+ call term_sendkeys(buf, ":set tabpanelopt+=align:right\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_statusline_tabline_1', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_noeval_tabpanel_statusline_tabline()
+ CheckScreendump
+
+ let lines =<< trim END
+ set laststatus=2
+ set showtabline=2
+ set showtabpanel=2
+ set statusline=$%=[%f]%=$
+ set tabline=$%=[%f]%=$
+ set tabpanel=$%=[%f]%=$
+ set tabpanelopt=columns:10,vert
+ set fillchars=tpl_vert:│
+ e aaa
+ tabnew
+ e bbb
+ tabnew
+ e ccc
+ END
+ call writefile(lines, 'XTest_tabpanel_noeval_tabpanel_statusline_tabline', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_noeval_tabpanel_statusline_tabline', {'rows': 10, 'cols': 45})
+ call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_0', {})
+ call term_sendkeys(buf, ":set tabpanelopt+=align:right\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_noeval_tabpanel_statusline_tabline_1', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+function! Test_tabpanel_eval_tabpanel_with_linebreaks()
+ CheckScreendump
+
+ let lines =<< trim END
+ function! Expr()
+ return "top\n$%=[%f]%=$\nbottom"
+ endfunction
+ set showtabpanel=2
+ set tabpanel=%!Expr()
+ set tabpanelopt=columns:10
+ e aaa
+ tabnew
+ e bbb
+ tabnew
+ e ccc
+ END
+ call writefile(lines, 'XTest_tabpanel_eval_tabpanel_with_linebreaks', 'D')
+
+ let buf = RunVimInTerminal('-S XTest_tabpanel_eval_tabpanel_with_linebreaks', {'rows': 10, 'cols': 45})
+ call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_0', {})
+ call term_sendkeys(buf, ":set tabpanelopt+=align:right\<cr>")
+ call VerifyScreenDump(buf, 'Test_tabpanel_eval_tabpanel_with_linebreaks_1', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab