From ba6c05240fc0333f3e2249ca8a6b7d51bdad2316 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 25 Feb 2006 21:45:02 +0000 Subject: updated for version 7.0207 --- runtime/doc/tabpage.txt | 58 +++++++++++++++++++++++++++++++++++++++++++++++-- src/buffer.c | 12 +++++----- src/normal.c | 40 ++++++++++++++++++++++++++++++++++ src/window.c | 2 +- 4 files changed, 104 insertions(+), 8 deletions(-) diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt index 7469869d8..85fc1d7d0 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 101d33f83..697599abb 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 cc9d0d165..405f55867 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 f0a4265b0..0c0fb30d5 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) -- cgit v1.2.1