 +	bool	changedir;
 +};
 +
++struct VimTablineMsg {
++	int		index;
++};
++
++struct VimTablineMenuMsg {
++	int		index;
++	int		event;
++};
++
 +struct VimMsg {
 +	enum VimMsgType {
-+		Key, Resize, ScrollBar, Menu, Mouse, MouseMoved, Focus, Refs
++		Key, Resize, ScrollBar, Menu, Mouse, MouseMoved, Focus, Refs, Tabline, TablineMenu
 +	};
 +
 +	union {

diff -Naur vim73/src/normal.c vim73.haiku/src/normal.c
--- vim73/src/normal.c	2010-07-31 13:25:19.021233664 +0000
+++ vim73.haiku/src/normal.c	2010-08-20 22:44:36.301203456 +0000
@@ -5385,7 +5385,8 @@
 {
     if (!checkclearop(cap->oap))
     {

+		}
+	}
+}
+
+#if defined(FEAT_GUI_TABLINE) || defined(PROTO)
+
+/*
+ * Show or hide the tabline.
+ */
+    void
+gui_mch_show_tabline(int showit)
+{
+	VimTabLine *tabLine = gui.vimForm->TabLine();
+
+    if (tabLine == NULL)
+		return;
+
+    if (!showit != !gui.vimForm->IsShowingTabLine()) {
+		gui.vimForm->SetShowingTabLine(showit != 0);
+		gui.tabline_height = gui.vimForm->TablineHeight();
+    }
+}
+
+	void 
+gui_mch_set_tabline_pos(int x, int y, int w, int h)
+{
+	VimTabLine *tabLine = gui.vimForm->TabLine();
+	if(tabLine != NULL) {
+		if (gui.vimWindow->Lock()) {
+			tabLine->MoveTo(x, y);
+			tabLine->ResizeTo(w - 1, h - 1);
+			gui.vimWindow->Unlock();
+		}
+	}
+}
+
+/*
+ * Return TRUE when tabline is displayed.
+ */
+    int
+gui_mch_showing_tabline()
+{
+	VimTabLine *tabLine = gui.vimForm->TabLine();
+    return tabLine != NULL && gui.vimForm->IsShowingTabLine();
+}
+
+/*
+ * Update the labels of the tabline.
+ */
+    void
+gui_mch_update_tabline()
+{
+    tabpage_T	*tp;
+    int		nr = 0;
+    int		curtabidx = 0;
+
+	VimTabLine *tabLine = gui.vimForm->TabLine();
+
+    if (tabLine == NULL)
+		return;
+
+	gui.vimWindow->Lock();
+
+    /* Add a label for each tab page.  They all contain the same text area. */
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr) {
+		if (tp == curtab)
+		    curtabidx = nr;
+
+		BTab* tab = tabLine->TabAt(nr);
+
+		if (tab == NULL) {
+			tab = new VimTabLine::VimTab();
+			tabLine->AddTab(NULL, tab);
+		}
+		
+		get_tabline_label(tp, FALSE);
+		tab->SetLabel((const char*)NameBuff);
+		tabLine->Invalidate();
+    }
+
+    /* Remove any old labels. */
+	while (nr < tabLine->CountTabs())
+		tabLine->RemoveTab(nr);
+	
+	if(tabLine->Selection() != curtabidx)
+		tabLine->Select(curtabidx);
+
+	gui.vimWindow->Unlock();
+}
+
+/*
+ * Set the current tab to "nr".  First tab is 1.
+ */
+    void
+gui_mch_set_curtab(int nr)
+{
+	VimTabLine *tabLine = gui.vimForm->TabLine();
+	if(tabLine == NULL)
+		return;
+
+	gui.vimWindow->Lock();
+	
+	if(tabLine->Selection() != nr -1)
+		tabLine->Select(nr -1);
+	
+	gui.vimWindow->Unlock();
+}
+
+#endif //FEAT_GUI_TABLINE
+
diff -Naur vim73/src/gui_beos.h vim73.haiku/src/gui_beos.h
--- vim73/src/gui_beos.h	1970-01-01 00:00:00.000000000 +0000
+++ vim73.haiku/src/gui_beos.h	2010-08-20 22:25:02.562298880 +0000
