summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2006-02-25 21:45:02 +0000
committervimboss <devnull@localhost>2006-02-25 21:45:02 +0000
commitdc01ee3fca9a3150b4669edf80eb8eed7a86a0c0 (patch)
treeec2dc1699cf8f7a11e74ff2b91586abe030ddede
parentdbf52794eab652930b07fc541f50505502cd8d93 (diff)
downloadvim-dc01ee3fca9a3150b4669edf80eb8eed7a86a0c0.tar.gz
updated for version 7.0207
-rw-r--r--runtime/doc/tabpage.txt58
-rw-r--r--src/buffer.c12
-rw-r--r--src/normal.c40
-rw-r--r--src/window.c2
4 files changed, 104 insertions, 8 deletions
diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt
index 7469869d..85fc1d7d 100644
--- a/runtime/doc/tabpage.txt
+++ b/runtime/doc/tabpage.txt
@@ -1,4 +1,4 @@
-*tabpage.txt* For Vim version 7.0aa. Last change: 2006 Feb 24
+*tabpage.txt* For Vim version 7.0aa. Last change: 2006 Feb 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -14,6 +14,7 @@ when used in combination with more than one tab page.
2. Commands |tab-page-commands|
3. Other items |tab-page-other|
4. Setting 'tabline' |setting-tabline|
+5. Setting 'guitablabel' |setting-guitablabel|
{Vi does not have any of these commands}
{not able to use multiple tab pages when the |+windows| feature was disabled
@@ -133,7 +134,7 @@ gT Go to the previous tab page. Wraps around from the first one
to the last one.
:tabr[ewind] *:tabfir* *:tabfirst* *:tabr* *:tabrewind*
-:tabl[ast] Go to the first tab page.
+:tabfir[st] Go to the first tab page.
*:tabl* *:tablast*
:tabl[ast] Go to the last tab page.
@@ -205,6 +206,9 @@ When switching to another tab page the order is:
==============================================================================
4. Setting 'tabline' *setting-tabline*
+The 'tabline' option specifies what the line with tab pages labels looks like.
+It is only used when there is no GUI tab line.
+
You can use the 'showtabline' option to specify when you want the line with
tab page labels to appear: never, when there is more than one tab page or
always.
@@ -269,4 +273,54 @@ trunctating the names. You will want to reduce the width of labels in a
clever way when there is not enough room. Check the 'columns' option for the
space available.
+==============================================================================
+5. Setting 'guitablabel' *setting-guitablabel*
+
+When the GUI tab pages line is displayed, 'guitablabel' can be used to
+specify the label to display for each tab page. Unlike 'tabline', which
+specifies the whole tab pages line at once, 'guitablabel' is used for each
+label separately.
+
+See the 'statusline' option for the format of the value.
+
+The "%N" item can be used for the current tab page number. The |v:lnum|
+variable is also set to this number.
+
+Note that syntax highlighting is not used for 'guitablabel'. The %T and %X
+are also ignored.
+
+A simple example that puts the tab page number and the buffer name in the label: >
+
+ :set guitablabel=%N\ %f
+
+An example that resembles the default: Show the number of windows in the tab
+page and a '+' if there is a modifed buffer: >
+
+ function! GuiTabLabel()
+ let label = ''
+ let bufnrlist = tabpagebuflist(v:lnum)
+
+ " Add '+' if one of the buffers in the tab page is modified
+ for bufnr in bufnrlist
+ if getbufvar(bufnr, "&modified")
+ let label = '+'
+ break
+ endif
+ endfor
+
+ " Append the number of windows in the tab page if more than one
+ let wincount = tabpagewinnr(v:lnum, '$')
+ if wincount > 1
+ let label .= wincount
+ endif
+ if label != ''
+ let label .= ' '
+ endif
+
+ " Append the buffer name
+ return label . bufname(bufnrlist[tabpagewinnr(v:lnum) - 1])
+ endfunction
+ set guitablabel=%{GuiTabLabel()}
+<
+
vim:tw=78:ts=8:ft=help:norl:
diff --git a/src/buffer.c b/src/buffer.c
index 101d33f8..697599ab 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3197,7 +3197,7 @@ free_titles()
#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 @@ free_titles()
* 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 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
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 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, t
}
#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 cc9d0d16..405f5586 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -76,6 +76,7 @@ static void nv_hor_scrollbar __ARGS((cmdarg_T *cap));
#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 @@ static const struct nv_cmd
#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 @@ nv_tabline(cap)
/* 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 f0a4265b..0c0fb30d 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3143,7 +3143,7 @@ find_tabpage(n)
/*
* 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)