updated for version 7.0207
diff --git a/src/buffer.c b/src/buffer.c
index 101d33f..697599a 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3197,7 +3197,7 @@
 
 #endif /* FEAT_TITLE */
 
-#if defined(FEAT_STL_OPT) || defined(PROTO)
+#if defined(FEAT_STL_OPT) || defined(FEAT_GUI_TABLINE) || defined(PROTO)
 /*
  * Build a string from the status line items in "fmt".
  * Return length of string in screen cells.
@@ -3212,10 +3212,11 @@
  * If maxwidth is not zero, the string will be filled at any middle marker
  * or truncated if too long, fillchar is used for all whitespace.
  */
+/*ARGSUSED*/
     int
 build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab)
     win_T	*wp;
-    char_u	*out;		/* buffer to write into */
+    char_u	*out;		/* buffer to write into != NameBuff */
     size_t	outlen;		/* length of out[] */
     char_u	*fmt;
     int		use_sandbox;	/* "fmt" was set insecurely, use sandbox */
@@ -3632,8 +3633,8 @@
 		str = tmp;
 	    break;
 	case STL_PAGENUM:
-#ifdef FEAT_PRINTER
-	    num = get_printer_page_num();
+#if defined(FEAT_PRINTER) || defined(FEAT_WINDOWS)
+	    num = printer_page_num;
 #else
 	    num = 0;
 #endif
@@ -4020,7 +4021,8 @@
 }
 #endif /* FEAT_STL_OPT */
 
-#if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) || defined(PROTO)
+#if defined(FEAT_STL_OPT) || defined(FEAT_CMDL_INFO) \
+	    || defined(FEAT_GUI_TABLINE) || defined(PROTO)
 /*
  * Get relative cursor position in window into "str[]", in the form 99%, using
  * "Top", "Bot" or "All" when appropriate.
diff --git a/src/normal.c b/src/normal.c
index cc9d0d1..405f558 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -76,6 +76,7 @@
 #endif
 #ifdef FEAT_GUI_TABLINE
 static void	nv_tabline __ARGS((cmdarg_T *cap));
+static void	nv_tabmenu __ARGS((cmdarg_T *cap));
 #endif
 static void	nv_exmode __ARGS((cmdarg_T *cap));
 static void	nv_colon __ARGS((cmdarg_T *cap));
@@ -423,6 +424,7 @@
 #endif
 #ifdef FEAT_GUI_TABLINE
     {K_TABLINE, nv_tabline,	0,			0},
+    {K_TABMENU, nv_tabmenu,	0,			0},
 #endif
 #ifdef FEAT_FKMAP
     {K_F8,	farsi_fkey,	0,			0},
@@ -4997,6 +4999,44 @@
     /* Even if an operator was pending, we still want to jump tabs. */
     goto_tabpage(current_tab);
 }
+
+/*
+ * Selected item in tab line menu.
+ */
+    static void
+nv_tabmenu(cap)
+    cmdarg_T	*cap;
+{
+    if (cap->oap->op_type != OP_NOP)
+	clearopbeep(cap->oap);
+
+    /* Even if an operator was pending, we still want to jump tabs. */
+    switch (current_tabmenu)
+    {
+	case TABLINE_MENU_CLOSE:
+	    if (current_tab == 0)
+		do_cmdline_cmd((char_u *)"tabclose");
+	    else
+	    {
+		vim_snprintf((char *)IObuff, IOSIZE, "tabclose %d",
+								 current_tab);
+		do_cmdline_cmd(IObuff);
+	    }
+	    break;
+
+	case TABLINE_MENU_NEW:
+	    if (current_tab > 0)
+		goto_tabpage(current_tab);
+	    do_cmdline_cmd((char_u *)"tabnew");
+	    break;
+
+	case TABLINE_MENU_OPEN:
+	    if (current_tab > 0)
+		goto_tabpage(current_tab);
+	    do_cmdline_cmd((char_u *)"browse tabnew");
+	    break;
+    }
+}
 #endif
 
 /*
diff --git a/src/window.c b/src/window.c
index f0a4265..0c0fb30 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3143,7 +3143,7 @@
 
 /*
  * Get index of tab page "tp".  First one has index 1.
- * When not found returns number of tab pages.
+ * When not found returns number of tab pages plus one.
  */
     int
 tabpage_index(ftp)