patch 9.1.1425: tabpanel: there are still some problems with the tabpanel

Problem:  tabpanel: there are still some problems with the tabpanel with
          column handling
Solution: fix the problems and refactor Tabpanel feature (Hirohito
          Higashi).

fixes: #17423
fixes: #17332
closes: #17336

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
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
index 5fd8f9b..6076978 100644
--- a/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_dont_overflow_into_tabpanel_0.dump
@@ -7,4 +7,4 @@
 | +1#0000000&@9|~+0#4040ff13&| @33
 | +1#0000000&@9|~+0#4040ff13&| @33
 | +1#0000000&@9|~+0#4040ff13&| @33
-| +0#0000000&@36|1|,|1| @4
+| +0#0000000&@26|1|,|1| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_01.dump b/src/testdir/dumps/Test_tabpanel_drawing_01.dump
index 8601542..74ba073 100644
--- a/src/testdir/dumps/Test_tabpanel_drawing_01.dump
+++ b/src/testdir/dumps/Test_tabpanel_drawing_01.dump
@@ -3,4 +3,4 @@
 | +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|,
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_04.dump b/src/testdir/dumps/Test_tabpanel_drawing_04.dump
index 61b759e..dd3c82e 100644
--- a/src/testdir/dumps/Test_tabpanel_drawing_04.dump
+++ b/src/testdir/dumps/Test_tabpanel_drawing_04.dump
@@ -3,4 +3,4 @@
 | +1&&@15|f+0&&| @27
 | +1&&@15|~+0#4040ff13&| @27
 | +1#0000000&@15|~+0#4040ff13&| @27
-| +0#0000000&@42|1|,
+| +0#0000000&@26|1|,|1| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_05.dump b/src/testdir/dumps/Test_tabpanel_drawing_05.dump
index e9ea7cb..08e040b 100644
--- a/src/testdir/dumps/Test_tabpanel_drawing_05.dump
+++ b/src/testdir/dumps/Test_tabpanel_drawing_05.dump
@@ -3,4 +3,4 @@
 | +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|,
+| +0#0000000&@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
index 40e3bd7..4ca56d4 100644
--- a/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_drawing_fill_tailing_0.dump
@@ -7,4 +7,4 @@
 |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
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump
index 190e5d9..d98dbfd 100644
--- a/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_drawing_pum_0.dump
@@ -1,10 +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
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12|a+0#0000000#ffffff0@1> @22
+|++2&&| |b@2|.|t|x|t| @9| +0#0000001#e0e0e08|a@1| @12| +0#0000000#ffffff0@9
+| +1&&@18| +0#0000001#ffd7ff255|a@3| @10| +0#0000000#ffffff0@9
+| +1&&@18| +0#0000001#ffd7ff255|a@2|c| @10| +0#0000000#ffffff0@9
+| +1&&@18| +0#0000001#ffd7ff255|a@2|b| @10| +0#0000000#ffffff0@9
+| +1&&@19| +0&&@24
+| +1&&@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_pum_1.dump b/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump
index 9888bc0..17e0c97 100644
--- a/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump
+++ b/src/testdir/dumps/Test_tabpanel_drawing_pum_1.dump
@@ -1,10 +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
+|a+8#0000001#e0e0e08@2|.|t|x|t| @12|a+0#0000000#ffffff0@1| @22
+|++2&&| |b@2|.|t|x|t| @10|a+0&&@1| @22
+| +1&&@19|a+0&&| +0#0000001#ffd7ff255|a@1| @12| +0#0000000#ffffff0@7
+| +1&&@19|a+0&&| +0#0000001#ffd7ff255|a@3| @10| +0#0000000#ffffff0@7
+| +1&&@19|a+0&&| +0#0000001#ffd7ff255|a@2|c| @10| +0#0000000#ffffff0@7
+| +1&&@19| +0&&| +0#0000001#e0e0e08|a@2|b| @10| +0#0000000#ffffff0@7
+| +1&&@19| +0&&@1|a@2|b> @18
+| +1&&@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_pum_2.dump b/src/testdir/dumps/Test_tabpanel_drawing_pum_2.dump
new file mode 100644
index 0000000..4ea7b91
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_pum_2.dump
@@ -0,0 +1,10 @@
+|a+0&#ffffff0@1| @22|a+8#0000001#e0e0e08@2|.|t|x|t| @12
+|a+0#0000000#ffffff0@1| @22|++2&&| |b@2|.|t|x|t| @10
+|a+0&&@3| @20| +1&&@19
+|a+0&&@2|c| @17| +0#0000001#e0e0e08|a@1| @12| +1#0000000#ffffff0@6
+|a+0&&@2|b| @17| +0#0000001#ffd7ff255|a@3| @10| +1#0000000#ffffff0@6
+| +0&&@21| +0#0000001#ffd7ff255|a@2|c| @10| +1#0000000#ffffff0@6
+| +0&&@21| +0#0000001#ffd7ff255|a@2|b| @10| +1#0000000#ffffff0@6
+| +0&&@22|a@1| +1&&@19
+>~+0#4040ff13&| @23| +1#0000000&@19
+|-+2&&@1| |m+0#00e0003&|a|t|c|h| |1| |o|f| |4| +0#0000000&@29
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump
index 080fa27..7f390e7 100644
--- a/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_0.dump
@@ -1,10 +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
+|╔+0#ffffff16#e000002|═|╗|.+0#0000000#ffffff0@38|╔+0#ffffff16#e000002|═|╗
+|║|@|║|.+0#0000000#ffffff0@38|║+0#ffffff16#e000002|@|║
+|╚|═|╝|.+0#0000000#ffffff0@38|╚+0#ffffff16#e000002|═|╝
+|.+0#0000000#ffffff0@8|a+0#00e0003&|t|c|u|r|s|o|r|.+0#0000000&@27
+@9>.@35
+@45
+@45
+@45
+@45
 | @44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_1.dump b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_1.dump
new file mode 100644
index 0000000..72cf385
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_1.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10|╔+0#ffffff16#e000002|═|╗|.+0#0000000#ffffff0@18|╔+0#ffffff16#e000002|═|╗
+|[+2#0000000#ffffff0|S|c|r|a|t|c|h|]| @10|║+0#ffffff16#e000002|@|║|.+0#0000000#ffffff0@18|║+0#ffffff16#e000002|@|║
+| +1#0000000#ffffff0@19|╚+0#ffffff16#e000002|═|╝|.+0#0000000#ffffff0@18|╚+0#ffffff16#e000002|═|╝
+| +1#0000000#ffffff0@19|a+0#00e0003&|t|c|u|r|s|o|r|.+0#0000000&@16
+| +1&&@19|.+0&&@8>.@15
+| +1&&@19|.+0&&@24
+| +1&&@19|.+0&&@24
+| +1&&@19|.+0&&@24
+| +1&&@19|.+0&&@24
+| @44
diff --git a/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_2.dump b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_2.dump
new file mode 100644
index 0000000..bee1803
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_drawing_with_popupwin_2.dump
@@ -0,0 +1,10 @@
+|╔+0#ffffff16#e000002|═|╗|.+0#0000000#ffffff0@18|╔+0#ffffff16#e000002|═|╗|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10
+|║+0#ffffff16#e000002|@|║|.+0#0000000#ffffff0@18|║+0#ffffff16#e000002|@|║|[+2#0000000#ffffff0|S|c|r|a|t|c|h|]| @10
+|╚+0#ffffff16#e000002|═|╝|.+0#0000000#ffffff0@18|╚+0#ffffff16#e000002|═|╝| +1#0000000#ffffff0@19
+|.+0&&@8|a+0#00e0003&|t|c|u|r|s|o|r|.+0#0000000&@7| +1&&@19
+|.+0&&@8>.@15| +1&&@19
+|.+0&&@24| +1&&@19
+|.+0&&@24| +1&&@19
+|.+0&&@24| +1&&@19
+|.+0&&@24| +1&&@19
+| +0&&@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
index 9214434..dd930c4 100644
--- a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_0.dump
@@ -1,10 +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|$
+|$+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
index dae0d0b..21bb63b 100644
--- a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_statusline_tabline_1.dump
@@ -1,10 +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
+|$+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
index dd55218..b062f21 100644
--- a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_0.dump
@@ -7,4 +7,4 @@
 |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
+|"+0#0000000&|c@2|"| |[|N|e|w|]| @33
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
index 84bf683..4e5a3fb 100644
--- a/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump
+++ b/src/testdir/dumps/Test_tabpanel_eval_tabpanel_with_linebreaks_1.dump
@@ -7,4 +7,4 @@
 |~+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| 
+|:+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_many_tabpages_0.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump
index e974381..d5a0e4a 100644
--- a/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_0.dump
@@ -7,4 +7,4 @@
 |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
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump
index 3ac3dde..d946a31 100644
--- a/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_1.dump
@@ -7,4 +7,4 @@
 |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
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump
index 7b980e6..74b2b7b 100644
--- a/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_2.dump
@@ -7,4 +7,4 @@
 |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
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump
index fa3c09c..037a53a 100644
--- a/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_3.dump
@@ -7,4 +7,4 @@
 |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
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump b/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump
index 07ff180..70905a6 100644
--- a/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump
+++ b/src/testdir/dumps/Test_tabpanel_many_tabpages_4.dump
@@ -7,4 +7,4 @@
 |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
+|:+0#0000000&|t|a|b|n|e|x|t| |-|3| @15|0|,|0|-|1| @8|A|l@1| 
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
index 9214434..dd930c4 100644
--- a/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_0.dump
@@ -1,10 +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|$
+|$+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
index dae0d0b..21bb63b 100644
--- a/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump
+++ b/src/testdir/dumps/Test_tabpanel_noeval_tabpanel_statusline_tabline_1.dump
@@ -1,10 +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
+|$+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_quitall_0.dump b/src/testdir/dumps/Test_tabpanel_quitall_0.dump
new file mode 100644
index 0000000..7399ca1
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_quitall_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|+| |N|o| |N|a|m|e|]| | +1&&|X+8#0000001#e0e0e08
+|++2#0000000#ffffff0| |[|N|o| |N|a|m|e|]| @8>a+0&&@2| @21
+| +1&&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|<+3&&|o| |N|a|m|e|]| |[|+|]| |1|,|1| @5|A|l@1
+| +0&&@44
diff --git a/src/testdir/dumps/Test_tabpanel_ruler_0.dump b/src/testdir/dumps/Test_tabpanel_ruler_0.dump
new file mode 100644
index 0000000..d1e2d75
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_ruler_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@1|X+8#0000001#e0e0e08
+|[+2#0000000#ffffff0|N|o| |N|a|m|e|]| @10> +0&&@24
+| +1&&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +1#0000000&@19|~+0#4040ff13&| @23
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_stpl_eq_1_0.dump b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_0.dump
new file mode 100644
index 0000000..4c75895
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_0.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@77
+|~+0#4040ff13&| @76
+|~| @76
+|~| @76
+|~| @76
+|~| @76
+|~| @76
+|~| @76
+|~| @76
+| +0#0000000&@77
diff --git a/src/testdir/dumps/Test_tabpanel_stpl_eq_1_1.dump b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_1.dump
new file mode 100644
index 0000000..ac61649
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_1.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @11|[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@34|X+8#0000001#e0e0e08
+|[+2#0000000#ffffff0|N|o| |N|a|m|e|]| @10> +0&&@57
+| +1&&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +0#0000000&@77
diff --git a/src/testdir/dumps/Test_tabpanel_stpl_eq_1_2.dump b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_2.dump
new file mode 100644
index 0000000..6199036
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_2.dump
@@ -0,0 +1,10 @@
+|2+2#e000e06#ffffff0| +2#0000000&|[|N|o| |N|a|m|e|]| @9|2+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| | +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +1#0000000#ffffff0@32|X+8#0000001#e0e0e08
+|[|N|o| |N|a|m|e|]| @10> +0#0000000#ffffff0@28||+1&&| +0&&@27
+| +1&&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|[+3&&|N|o| |N|a|m|e|]| @20|[+1&&|N|o| |N|a|m|e|]| @18
+| +0&&@77
diff --git a/src/testdir/dumps/Test_tabpanel_stpl_eq_1_3.dump b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_3.dump
new file mode 100644
index 0000000..6311208
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_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&&@35|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10
+> +0#0000000#ffffff0@57|[+2&&|N|o| |N|a|m|e|]| @10
+|~+0#4040ff13&| @56| +1#0000000&@19
+|~+0#4040ff13&| @56| +1#0000000&@19
+|~+0#4040ff13&| @56| +1#0000000&@19
+|~+0#4040ff13&| @56| +1#0000000&@19
+|~+0#4040ff13&| @56| +1#0000000&@19
+|~+0#4040ff13&| @56| +1#0000000&@19
+|~+0#4040ff13&| @56| +1#0000000&@19
+| +0&&@77
diff --git a/src/testdir/dumps/Test_tabpanel_stpl_eq_1_4.dump b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_4.dump
new file mode 100644
index 0000000..3c88269
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_stpl_eq_1_4.dump
@@ -0,0 +1,10 @@
+| +2&#ffffff0|2+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| | +8#0000001#e0e0e08|[|N|o| |N|a|m|e|]| | +1#0000000#ffffff0@33|2+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| @8
+> +0&&@28||+1&&| +0&&@27|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10
+|~+0#4040ff13#ffffff0| @27||+1#0000000&|~+0#4040ff13&| @26| +1#0000000&@19
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26| +1#0000000&@19
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26| +1#0000000&@19
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26| +1#0000000&@19
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26| +1#0000000&@19
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26| +1#0000000&@19
+|[+3&&|N|o| |N|a|m|e|]| @20|[+1&&|N|o| |N|a|m|e|]| @38
+| +0&&@77
diff --git a/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump b/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump
index fdca7f1..14400e5 100644
--- a/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_tabline_and_tabpanel_0.dump
@@ -7,4 +7,4 @@
 | +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
+|"+0#0000000&|c@2|.|t|x|t|"| |[|N|e|w|]| @11|0|,|0|-|1| @8|A|l@1| 
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
index a50355f..284e23a 100644
--- a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_0.dump
@@ -7,4 +7,4 @@
 | +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
+| +0#0000000&@26|0|,|0|-|1| @8|A|l@1| 
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
index e347c7e..d3fec73 100644
--- a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_1.dump
@@ -7,4 +7,4 @@
 |│+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
+|:+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|,|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
index d1c5b92..fc0b17a 100644
--- a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_2.dump
@@ -7,4 +7,4 @@
 | +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
+|:+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@1|,|0|-|1| @8|A|l@1| 
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
index fc84c0b..24db3dd 100644
--- a/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump
+++ b/src/testdir/dumps/Test_tabpanel_vert_is_multibytes_left_3.dump
@@ -7,4 +7,4 @@
 | +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
+|:+0#0000000&|s|e|t| |t|a|b|p|a|n|e|l|o|p|t|=|c|o|l|u|m|n|s|:|2|,|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
index af7ba65..14d50af 100644
--- a/src/testdir/dumps/Test_tabpanel_visual_0.dump
+++ b/src/testdir/dumps/Test_tabpanel_visual_0.dump
@@ -7,4 +7,4 @@
 | +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
+|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@4|1@1| @7|1|,|1@1| @9|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_visual_1.dump b/src/testdir/dumps/Test_tabpanel_visual_1.dump
index 0cdc5f2..5d4a660 100644
--- a/src/testdir/dumps/Test_tabpanel_visual_1.dump
+++ b/src/testdir/dumps/Test_tabpanel_visual_1.dump
@@ -7,4 +7,4 @@
 | +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
+|-+2#0000000&@1| |V|I|S|U|A|L| |-@1| +0&&@4|9| @8|2|,|1|4| @9|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_visual_2.dump b/src/testdir/dumps/Test_tabpanel_visual_2.dump
index 9a307c1..c800684 100644
--- a/src/testdir/dumps/Test_tabpanel_visual_2.dump
+++ b/src/testdir/dumps/Test_tabpanel_visual_2.dump
@@ -7,4 +7,4 @@
 | +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
+|b+0#0000000&@2|2| |c@2|2| @17|2|,|6| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_with_vsplit_0.dump b/src/testdir/dumps/Test_tabpanel_with_vsplit_0.dump
new file mode 100644
index 0000000..836e07b
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_vsplit_0.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10> +0#0000000#ffffff0@57
+|[+2&&|N|o| |N|a|m|e|]| @10|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +1#0000000&@19|~+0#4040ff13&| @56
+| +0#0000000&@59|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_with_vsplit_1.dump b/src/testdir/dumps/Test_tabpanel_with_vsplit_1.dump
new file mode 100644
index 0000000..81653d7
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_vsplit_1.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10> +0#0000000#ffffff0@28||+1&&| +0&&@27
+|2+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| @8|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26
+| +1#0000000&@19|[+3&&|N|o| |N|a|m|e|]| @5|0|,|0|-|1| @5|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @4|0|,|0|-|1| @5|A|l@1
+|:+0&&|v|s|p|l|i|t| @70
diff --git a/src/testdir/dumps/Test_tabpanel_with_vsplit_2.dump b/src/testdir/dumps/Test_tabpanel_with_vsplit_2.dump
new file mode 100644
index 0000000..82d3356
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_vsplit_2.dump
@@ -0,0 +1,10 @@
+|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @10> +0#0000000#ffffff0@19||+1&&| +0&&@17||+1&&| +0&&@17
+|3+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| @8|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16
+| +1#0000000&@19|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16
+| +1#0000000&@19|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16
+| +1#0000000&@19|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16
+| +1#0000000&@19|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16
+| +1#0000000&@19|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16
+| +1#0000000&@19|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16
+| +1#0000000&@19|<+3&&|N|o| |N|a|m|e|]| |0|,|0|-|1| @1|A|l@1| |<+1&&|o| |N|a|m|e|]| |0|,|0|-|1| |A|l@1| |<|o| |N|a|m|e|]| |0|,|0|-|1| |A|l@1
+|:+0&&|v|s|p|l|i|t| @70
diff --git a/src/testdir/dumps/Test_tabpanel_with_vsplit_3.dump b/src/testdir/dumps/Test_tabpanel_with_vsplit_3.dump
new file mode 100644
index 0000000..6e5f8e4
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_vsplit_3.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@57||+1&&|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @9
+|~+0#4040ff13#ffffff0| @56||+1#0000000&|[+2&&|N|o| |N|a|m|e|]| @9
+|~+0#4040ff13&| @56||+1#0000000&| @18
+|~+0#4040ff13&| @56||+1#0000000&| @18
+|~+0#4040ff13&| @56||+1#0000000&| @18
+|~+0#4040ff13&| @56||+1#0000000&| @18
+|~+0#4040ff13&| @56||+1#0000000&| @18
+|~+0#4040ff13&| @56||+1#0000000&| @18
+|~+0#4040ff13&| @56||+1#0000000&| @18
+|:+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|,|v|e|r|t| @26|0|,|0|-|1| @8|A|l@1| 
diff --git a/src/testdir/dumps/Test_tabpanel_with_vsplit_4.dump b/src/testdir/dumps/Test_tabpanel_with_vsplit_4.dump
new file mode 100644
index 0000000..7978943
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_vsplit_4.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@28||+1&&| +0&&@27||+1&&|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @9
+|~+0#4040ff13#ffffff0| @27||+1#0000000&|~+0#4040ff13&| @26||+1#0000000&|2+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| @7
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26||+1#0000000&| @18
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26||+1#0000000&| @18
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26||+1#0000000&| @18
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26||+1#0000000&| @18
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26||+1#0000000&| @18
+|~+0#4040ff13&| @27||+1#0000000&|~+0#4040ff13&| @26||+1#0000000&| @18
+|[+3&&|N|o| |N|a|m|e|]| @5|0|,|0|-|1| @5|A|l@1| |[+1&&|N|o| |N|a|m|e|]| @4|0|,|0|-|1| @5|A|l@1||| @18
+|:+0&&|v|s|p|l|i|t| @70
diff --git a/src/testdir/dumps/Test_tabpanel_with_vsplit_5.dump b/src/testdir/dumps/Test_tabpanel_with_vsplit_5.dump
new file mode 100644
index 0000000..5744d13
--- /dev/null
+++ b/src/testdir/dumps/Test_tabpanel_with_vsplit_5.dump
@@ -0,0 +1,10 @@
+> +0&#ffffff0@19||+1&&| +0&&@17||+1&&| +0&&@17||+1&&|[+8#0000001#e0e0e08|N|o| |N|a|m|e|]| @9
+|~+0#4040ff13#ffffff0| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|3+2#e000e06&| +2#0000000&|[|N|o| |N|a|m|e|]| @7
+|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&| @18
+|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&| @18
+|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&| @18
+|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&| @18
+|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&| @18
+|~+0#4040ff13&| @18||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&|~+0#4040ff13&| @16||+1#0000000&| @18
+|<+3&&|N|o| |N|a|m|e|]| |0|,|0|-|1| @1|A|l@1| |<+1&&|o| |N|a|m|e|]| |0|,|0|-|1| |A|l@1| |<|o| |N|a|m|e|]| |0|,|0|-|1| |A|l@1||| @18
+|:+0&&|v|s|p|l|i|t| @70
diff --git a/src/testdir/test_tabpanel.vim b/src/testdir/test_tabpanel.vim
index e0a6a8c..c3288f8 100644
--- a/src/testdir/test_tabpanel.vim
+++ b/src/testdir/test_tabpanel.vim
@@ -10,6 +10,64 @@
   set showtabpanel&
 endfunc
 
+function Test_tabpanel_showtabpanel_eq_1()
+  CheckScreendump
+
+  let lines =<< trim END
+    set showtabpanel=1
+    set noruler
+  END
+  call writefile(lines, 'XTest_tabpanel_stpl_eq_1', 'D')
+
+  let buf = RunVimInTerminal('-S XTest_tabpanel_stpl_eq_1', {'rows': 10, 'cols': 78})
+  call term_sendkeys(buf, "\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_0', {})
+  call term_sendkeys(buf, ":tabnew\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_1', {})
+  call term_sendkeys(buf, ":tabfirst\<CR>:vsplit\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_2', {})
+  call term_sendkeys(buf, ":tabclose\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_0', {})
+
+  call term_sendkeys(buf, ":set tabpanelopt=align:right\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_0', {})
+  call term_sendkeys(buf, ":tabnew\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_3', {})
+  call term_sendkeys(buf, ":tabfirst\<CR>:vsplit\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_4', {})
+  call term_sendkeys(buf, ":tabclose\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_stpl_eq_1_0', {})
+  call StopVimInTerminal(buf)
+endfunc
+
+function Test_tabpanel_with_vsplit()
+  CheckScreendump
+
+  let lines =<< trim END
+    set showtabpanel=2
+    set tabpanelopt=columns:20
+    set showtabline=0
+    tabnew
+  END
+  call writefile(lines, 'XTest_tabpanel_with_vsplit', 'D')
+
+  let buf = RunVimInTerminal('-S XTest_tabpanel_with_vsplit', {'rows': 10, 'cols': 78})
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_vsplit_0', {})
+  call term_sendkeys(buf, ":vsplit\<CR>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_vsplit_1', {})
+  call term_sendkeys(buf, ":vsplit\<CR>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_vsplit_2', {})
+
+  call term_sendkeys(buf, ":only\<CR>")
+  call term_sendkeys(buf, ":set tabpanelopt=align:right,vert\<CR>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_vsplit_3', {})
+  call term_sendkeys(buf, ":vsplit\<CR>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_vsplit_4', {})
+  call term_sendkeys(buf, ":vsplit\<CR>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_with_vsplit_5', {})
+  call StopVimInTerminal(buf)
+endfunc
+
 function Test_tabpanel_mouse()
   let save_showtabline = &showtabline
   let save_mouse = &mouse
@@ -37,7 +95,8 @@
   call feedkeys("\<LeftMouse>", 'xt')
   call test_setmouse(2, 3)
   let pos = getmousepos()
-  call assert_equal(2, pos['winrow'])
+  call assert_equal(0, pos['winid'])
+  call assert_equal(0, pos['winrow'])
   call assert_equal(0, pos['wincol'])
   call assert_equal(2, pos['screenrow'])
   call assert_equal(3, pos['screencol'])
@@ -45,6 +104,7 @@
   call test_setmouse(1, 11)
   call feedkeys("\<LeftMouse>", 'xt')
   let pos = getmousepos()
+  call assert_notequal(0, pos['winid'])
   call assert_equal(1, pos['winrow'])
   call assert_equal(1, pos['wincol'])
   call assert_equal(1, pos['screenrow'])
@@ -56,6 +116,7 @@
   call test_setmouse(10, 11)
   call feedkeys("\<LeftMouse>", 'xt')
   let pos = getmousepos()
+  call assert_notequal(0, pos['winid'])
   call assert_equal(10, pos['winrow'])
   call assert_equal(1, pos['wincol'])
   call assert_equal(10, pos['screenrow'])
@@ -113,37 +174,39 @@
 function Test_tabpanel_drawing_with_popupwin()
   CheckScreendump
 
+  let tcols = 45
   let lines =<< trim END
-    set showtabpanel=2
+    set showtabpanel=0
     set tabpanelopt=columns:20
     set showtabline=0
+    set nowrap
+    set noruler
     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
+    call setbufline(bufnr(), 1, repeat([repeat('.', &columns)], &lines - &ch))
+    for col in [1, &columns - 2]
+      call popup_create(['@'],
+            \ {
+            \   'line': 1,
+            \   'col': col,
+            \   'border': [],
+            \   'highlight': 'ErrorMsg',
+            \ })
     endfor
-    call cursor(4, 10)
+    call cursor(5, 10)
     call popup_atcursor('atcursor', {
-      \   'highlight': 'TestingForTabPanelPopupwin',
+      \   'highlight': 'Question',
       \ })
   END
   call writefile(lines, 'XTest_tabpanel_with_popupwin', 'D')
-
-  let buf = RunVimInTerminal('-S XTest_tabpanel_with_popupwin', {'rows': 10, 'cols': 45})
-
+  let buf = RunVimInTerminal('-S XTest_tabpanel_with_popupwin', {'rows': 10, 'cols': tcols})
   call VerifyScreenDump(buf, 'Test_tabpanel_drawing_with_popupwin_0', {})
-
+  call term_sendkeys(buf, ":set showtabpanel=2\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_drawing_with_popupwin_1', {})
+  call term_sendkeys(buf, ":set tabpanelopt+=align:right\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_drawing_with_popupwin_2', {})
+  call term_sendkeys(buf, ":set showtabpanel=0\<CR>\<C-L>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_drawing_with_popupwin_0', {})
   call StopVimInTerminal(buf)
 endfunc
 
@@ -186,12 +249,20 @@
 
   let buf = RunVimInTerminal('-S XTest_tabpanel_pum', {'rows': 10, 'cols': 45})
 
-  call term_sendkeys(buf, "i\<C-x>\<C-v>")
+  call term_sendkeys(buf, "i\<CR>aa\<CR>aaaa\<CR>aaac\<CR>aaab\<CR>\<Esc>")
+  call term_sendkeys(buf, "ggi\<C-X>\<C-N>")
   call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_0', {})
 
-  call term_sendkeys(buf, "\<CR>  ab\<C-x>\<C-v>")
+  call term_sendkeys(buf, "\<Esc>Go  a\<C-X>\<C-P>")
   call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_1', {})
 
+  call term_sendkeys(buf, "\<C-U>\<CR>\<Esc>")
+  call term_sendkeys(buf, ":set tabpanelopt+=align:right\<CR>")
+  let num = 45 - 20 - 2  " term-win-width - tabpanel-columns - 2
+  call term_sendkeys(buf, num .. "a \<Esc>")
+  call term_sendkeys(buf, "a\<C-X>\<C-N>")
+  call VerifyScreenDump(buf, 'Test_tabpanel_drawing_pum_2', {})
+
   call StopVimInTerminal(buf)
 endfunc
 
@@ -338,59 +409,59 @@
   call StopVimInTerminal(buf)
 endfunc
 
-function Test_tabpanel_dont_vert_is_multibytes_left()
-  CheckScreendump
+"""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
 
-  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_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
@@ -406,7 +477,6 @@
     set tabline=%!Expr()
     set tabpanel=%!Expr()
     set tabpanelopt=columns:10,vert
-    set fillchars=tpl_vert:│
     e aaa
     tabnew
     e bbb
@@ -434,7 +504,6 @@
     set tabline=$%=[%f]%=$
     set tabpanel=$%=[%f]%=$
     set tabpanelopt=columns:10,vert
-    set fillchars=tpl_vert:│
     e aaa
     tabnew
     e bbb
@@ -461,6 +530,7 @@
     set showtabpanel=2
     set tabpanel=%!Expr()
     set tabpanelopt=columns:10
+    set noruler
     e aaa
     tabnew
     e bbb
@@ -521,6 +591,42 @@
   call StopVimInTerminal(buf)
 endfunc
 
+function Test_tabpanel_quitall()
+  CheckScreendump
+
+  let lines =<< trim END
+    tabnew
+    set showtabpanel=1
+    set laststatus=2
+    call setline(1, 'aaa')
+    normal gt
+    silent! quitall
+  END
+  call writefile(lines, 'XTest_tabpanel_quitall', 'D')
+
+  let buf = RunVimInTerminal('-S XTest_tabpanel_quitall', {'rows': 10, 'cols': 45})
+  call VerifyScreenDump(buf, 'Test_tabpanel_quitall_0', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
+function Test_tabpanel_ruler()
+  CheckScreendump
+
+  let lines =<< trim END
+    tabnew
+    set statusline& laststatus=0
+    set rulerformat& ruler
+    set showtabpanel=1
+  END
+  call writefile(lines, 'XTest_tabpanel_ruler', 'D')
+
+  let buf = RunVimInTerminal('-S XTest_tabpanel_ruler', {'rows': 10, 'cols': 45})
+  call VerifyScreenDump(buf, 'Test_tabpanel_ruler_0', {})
+
+  call StopVimInTerminal(buf)
+endfunc
+
 function Test_tabpanel_error()
   set tabpanel=%!NonExistingFunc()
   try
@@ -540,5 +646,4 @@
   set tabpanel&vim
   set showtabpanel&vim
 endfunc
-
 " vim: shiftwidth=2 sts=2 expandtab