diff options
author | Bram Moolenaar <Bram@vim.org> | 2006-02-20 21:27:21 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2006-02-20 21:27:21 +0000 |
commit | 2a0449d129e211ce0b87a248e6205a11b49a203c (patch) | |
tree | 28eff7f965560f72afa4be77cc35f273fc46afa3 /src/ex_docmd.c | |
parent | 7e8fd63682801d6cdd7f31972540c21f148b289e (diff) | |
download | vim-git-2a0449d129e211ce0b87a248e6205a11b49a203c.tar.gz |
updated for version 7.0202
Diffstat (limited to 'src/ex_docmd.c')
-rw-r--r-- | src/ex_docmd.c | 118 |
1 files changed, 32 insertions, 86 deletions
diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 1a8788684..1eefcd892 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -163,7 +163,6 @@ static void ex_tabs __ARGS((exarg_T *eap)); # define ex_resize ex_ni # define ex_splitview ex_ni # define ex_stag ex_ni -# define ex_tabedit ex_ni # define ex_tab ex_ni # define ex_tabs ex_ni # define ex_tabclose ex_ni @@ -6305,7 +6304,8 @@ tabpage_close(forceit) { /* First close all the windows but the current one. If that worked then * close the last window in this tab, that will close it. */ - close_others(TRUE, forceit); + if (lastwin != firstwin) + close_others(TRUE, forceit); if (lastwin == firstwin) ex_win_close(forceit, curwin, NULL); # ifdef FEAT_GUI @@ -6863,12 +6863,17 @@ ex_wrongmodifier(eap) * :new [[+command] file] split window with no or new file * :vnew [[+command] file] split vertically window with no or new file * :sfind [+command] file split window with file in 'path' + * + * :tabedit open new Tab page with empty window + * :tabedit [+command] file open new Tab page and edit "file" + * :tabnew [[+command] file] just like :tabedit + * :tabfind [+command] file open new Tab page and find "file" */ void ex_splitview(eap) exarg_T *eap; { - win_T *old_curwin; + win_T *old_curwin = curwin; # if defined(FEAT_SEARCHPATH) || defined(FEAT_BROWSE) char_u *fname = NULL; # endif @@ -6884,7 +6889,6 @@ ex_splitview(eap) } # endif - old_curwin = curwin; # ifdef FEAT_GUI need_mouse_correct = TRUE; # endif @@ -6904,7 +6908,7 @@ ex_splitview(eap) # endif # ifdef FEAT_SEARCHPATH - if (eap->cmdidx == CMD_sfind) + if (eap->cmdidx == CMD_sfind || eap->cmdidx == CMD_tabfind) { fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg), FNAME_MESS, TRUE, curbuf->b_ffname); @@ -6946,7 +6950,26 @@ ex_splitview(eap) cmdmod.browse = FALSE; /* Don't browse again in do_ecmd(). */ # endif - if (win_split(eap->addr_count > 0 ? (int)eap->line2 : 0, + /* + * Either open new tab page or split the window. + */ + if (eap->cmdidx == CMD_tabedit + || eap->cmdidx == CMD_tabfind + || eap->cmdidx == CMD_tabnew) + { + if (win_new_tabpage() != FAIL) + { + do_exedit(eap, NULL); + + /* set the alternate buffer for the window we came from */ + if (curwin != old_curwin + && win_valid(old_curwin) + && old_curwin->w_buffer != curbuf + && !cmdmod.keepalt) + old_curwin->w_alt_fnum = curbuf->b_fnum; + } + } + else if (win_split(eap->addr_count > 0 ? (int)eap->line2 : 0, *eap->cmd == 'v' ? WSP_VERT : 0) != FAIL) { # ifdef FEAT_SCROLLBIND @@ -6975,85 +6998,6 @@ theend: } /* - * :tabedit open new Tab page with empty window - * :tabedit [+command] file open new Tab page and edit "file" - * :tabnew [[+command] file] just like :tabedit - * :tabfind [+command] file open new Tab page and find "file" - */ - void -ex_tabedit(eap) - exarg_T *eap; -{ -# if defined(FEAT_SEARCHPATH) || defined(FEAT_BROWSE) - char_u *fname = NULL; -# endif -# ifdef FEAT_BROWSE - int browse_flag = cmdmod.browse; -# endif - -# ifdef FEAT_GUI - need_mouse_correct = TRUE; -# endif - -# ifdef FEAT_SEARCHPATH - if (eap->cmdidx == CMD_tabfind) - { - fname = find_file_in_path(eap->arg, (int)STRLEN(eap->arg), - FNAME_MESS, TRUE, curbuf->b_ffname); - if (fname == NULL) - goto theend; - eap->arg = fname; - } -# ifdef FEAT_BROWSE - else -# endif -# endif -# ifdef FEAT_BROWSE - if (cmdmod.browse) - { - if ( -# ifdef FEAT_GUI - !gui.in_use && -# endif - au_has_group((char_u *)"FileExplorer")) - { - /* No browsing supported but we do have the file explorer: - * Edit the directory. */ - if (*eap->arg == NUL || !mch_isdir(eap->arg)) - eap->arg = (char_u *)"."; - } - else - { - fname = do_browse(0, (char_u *)_("Edit File in new tab page"), - eap->arg, NULL, NULL, NULL, curbuf); - if (fname == NULL) - goto theend; - eap->arg = fname; - } - } - cmdmod.browse = FALSE; /* Don't browse again in do_ecmd(). */ -# endif - - if (win_new_tabpage() != FAIL) - { -# ifdef FEAT_SCROLLBIND - curwin->w_p_scb = FALSE; -# endif - if (*eap->arg != NUL) - do_exedit(eap, NULL); - } - -# ifdef FEAT_BROWSE - cmdmod.browse = browse_flag; -# endif - -# if defined(FEAT_SEARCHPATH) || defined(FEAT_BROWSE) -theend: - vim_free(fname); -# endif -} - -/* * :tab command */ void @@ -7316,12 +7260,14 @@ do_exedit(eap, old_curwin) } if ((eap->cmdidx == CMD_new + || eap->cmdidx == CMD_tabnew + || eap->cmdidx == CMD_tabedit #ifdef FEAT_VERTSPLIT || eap->cmdidx == CMD_vnew #endif ) && *eap->arg == NUL) { - /* ":new" without argument: edit an new empty buffer */ + /* ":new" or ":tabnew" without argument: edit an new empty buffer */ setpcmark(); (void)do_ecmd(0, NULL, NULL, eap, ECMD_ONE, ECMD_HIDE + (eap->forceit ? ECMD_FORCEIT : 0)); |