diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 89370ac..7b60f76 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Feb 24
+*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Feb 25
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,20 +30,17 @@
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Fix for hlsearch getting stuck on multibyte char also in 6.4.  reportec by
-Yukihiro Nakadaira.
-
-
 Tab pages:
+-   Add 'guitablabel' option.
 -   GTK GUI implementation for the tab pages line:
-      /tmp/vim61_tab.patch.bz2
-    Window height can be wrong:
-	:set go-=e
-	resize to fill screen
-	:set go+=e
-    Add 'guitabitem' option?
--   GUI implementation for the tab pages line for other systems.
+    handling of tab in insert mode (like clicking mouse in other window)
+    and cmdline mode (keep current tab)
+
+9   GUI implementation for the tab pages line for other systems.
+8   Make GUI menu in tab pages line configurable.  Like the popup menu.
 8   tab pages in the session file, if "tabpages" in 'sessionoptions'
+8   :tabmove +N	 move tab page N pages forward
+8   :tabmove -N	 move tab page N pages backward
 7   :tabdup	 duplicate the tab with all its windows.
 6   :tab ball    tab page for each buffer
 6   :tab all     tab page for each argument
@@ -136,6 +133,7 @@
 
 Mac unicode patch (Da Woon Jung):
 - configuration option for platform: i386, ppc or both.
+    Use __LITTLE_ENDIAN__ to test for current platform.
 - selecting proportional font breaks display
 - UTF-8 text causes display problems.  Font replacement causes this.
 - Command-key mappings do not work. (Alan Schmitt)
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 465c02c..50d33dc 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Feb 24
+*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Feb 25
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1749,4 +1749,11 @@
 
 ml_get errors when searching for "\n\zs" in an empty file.
 
+When selecting a block and using "$" to select until the end of every line and
+not highlighting the character under the cursor the first character of the
+block could be unhighlighted.
+
+When counting words for the Visual block area and using "$" to select until
+the end of every line only up to the length of the last line was counted.
+
  vim:tw=78:ts=8:ft=help:norl:
diff --git a/src/eval.c b/src/eval.c
index 52525e6..99fda40 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -14943,7 +14943,7 @@
 	if (arg != NULL)
 	{
 	    if (STRCMP(arg, "$") == 0)
-		nr = tabpage_index(NULL);
+		nr = tabpage_index(NULL) - 1;
 	    else
 		EMSG2(_(e_invexpr2), arg);
 	}
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 4cae9a1..2bf3799 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -3061,6 +3061,129 @@
 
 #if defined(FEAT_GUI_TABLINE) || defined(PROTO)
 static int ignore_tabline_evt = FALSE;
+static GtkWidget *tabline_menu;
+static int clicked_page;	    /* page clicked in tab line */
+
+/*
+ * Handle selecting an item in the tab line popup menu.
+ */
+/*ARGSUSED*/
+    static void
+tabline_menu_handler(GtkMenuItem *item, gpointer user_data)
+{
+    char_u	string[3];
+
+    /* Add the string cmd into input buffer */
+    string[0] = CSI;
+    string[1] = KS_TABMENU;
+    string[2] = KE_FILLER;
+    add_to_input_buf(string, 3);
+    string[0] = clicked_page;
+    string[1] = (char_u)(long)user_data;
+    add_to_input_buf_csi(string, 2);
+
+    if (gtk_main_level() > 0)
+	gtk_main_quit();
+}
+
+/*
+ * Send the event for clicking to select tab page "nr".
+ */
+    static void
+send_tabline_event(int nr)
+{
+    char_u string[3];
+
+    string[0] = CSI;
+    string[1] = KS_TABLINE;
+    string[2] = KE_FILLER;
+    add_to_input_buf(string, 3);
+    string[0] = nr;
+    add_to_input_buf_csi(string, 1);
+
+    if (gtk_main_level() > 0)
+	gtk_main_quit();
+}
+
+/*
+ * Create a menu for the tab line.
+ */
+    static GtkWidget *
+create_tabline_menu(void)
+{
+    GtkWidget *menu, *item;
+
+    menu = gtk_menu_new();
+
+    item = gtk_menu_item_new_with_label(_("Close"));
+    gtk_widget_show(item);
+    gtk_container_add(GTK_CONTAINER(menu), item);
+    gtk_signal_connect(GTK_OBJECT(item), "activate",
+	    GTK_SIGNAL_FUNC(tabline_menu_handler),
+	    (gpointer)TABLINE_MENU_CLOSE);
+
+    item = gtk_menu_item_new_with_label(_("New tab"));
+    gtk_widget_show(item);
+    gtk_container_add(GTK_CONTAINER(menu), item);
+    gtk_signal_connect(GTK_OBJECT(item), "activate",
+	    GTK_SIGNAL_FUNC(tabline_menu_handler),
+	    (gpointer)TABLINE_MENU_NEW);
+
+    item = gtk_menu_item_new_with_label(_("Open Tab..."));
+    gtk_widget_show(item);
+    gtk_container_add(GTK_CONTAINER(menu), item);
+    gtk_signal_connect(GTK_OBJECT(item), "activate",
+	    GTK_SIGNAL_FUNC(tabline_menu_handler),
+	    (gpointer)TABLINE_MENU_OPEN);
+
+    return menu;
+}
+
+    static gboolean
+on_tabline_menu(GtkWidget *widget, GdkEvent *event)
+{
+    /* Was this button press event ? */
+    if (event->type == GDK_BUTTON_PRESS)
+    {
+	GdkEventButton *bevent = (GdkEventButton *)event;
+	int		x = bevent->x;
+	GtkWidget	*page;
+	GtkWidget	*label;
+
+	/* Find out where the click was. */
+	for (clicked_page = 1;  ; ++clicked_page)
+	{
+	    page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(gui.tabline),
+							    clicked_page - 1);
+	    if (page == NULL)
+	    {
+		/* Past all the labels, return zero. */
+		clicked_page = 0;
+		break;
+	    }
+	    label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(gui.tabline), page);
+	    /* The label size apparently doesn't include the spacing, estimate
+	     * it by the page position. */
+	    if (page->allocation.x * 2 + label->allocation.x
+					    + label->allocation.width + 1>= x)
+		break;
+	}
+
+	/* If the event was generated for 3rd button popup the menu. */
+	if (bevent->button == 3)
+	{
+	    gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL,
+						bevent->button, bevent->time);
+	    /* We handled the event. */
+	    return TRUE;
+	}
+	else if (bevent->button == 1 && clicked_page == 0)
+	    /* Click after all tabs moves to next tab page. */
+	    send_tabline_event(0);
+    }
+    /* We didn't handle the event. */
+    return FALSE;
+}
 
 /*
  * Handle selecting one of the tabs.
@@ -3073,20 +3196,8 @@
 	gint		index,
 	gpointer	data)
 {
-    static char_u string[3];
-
     if (!ignore_tabline_evt)
-    {
-	string[0] = CSI;
-	string[1] = KS_TABLINE;
-	string[2] = KE_FILLER;
-	add_to_input_buf(string, 3);
-	string[0] = index + 1;
-	add_to_input_buf_csi(string, 1);
-
-	if (gtk_main_level() > 0)
-	    gtk_main_quit();
-    }
+	send_tabline_event(index + 1);
 }
 
 /*
@@ -3472,6 +3583,11 @@
     }
     gtk_signal_connect(GTK_OBJECT(gui.tabline), "switch_page",
 		       GTK_SIGNAL_FUNC(on_select_tab), NULL);
+
+    /* Create a popup menu for the tab line and connect it. */
+    tabline_menu = create_tabline_menu();
+    gtk_signal_connect_object(GTK_OBJECT(gui.tabline), "button_press_event",
+		  GTK_SIGNAL_FUNC(on_tabline_menu), GTK_OBJECT(tabline_menu));
 #endif
 
     gui.formwin = gtk_form_new();
