mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
updated for version 7.2-241
This commit is contained in:
24
src/fileio.c
24
src/fileio.c
@@ -8420,6 +8420,10 @@ aucmd_prepbuf(aco, buf)
|
||||
if (aucmd_win == NULL)
|
||||
win = curwin;
|
||||
}
|
||||
if (win == NULL && aucmd_win_used)
|
||||
/* Strange recursive autocommand, fall back to using the current
|
||||
* window. Expect a few side effects... */
|
||||
win = curwin;
|
||||
|
||||
aco->save_curwin = curwin;
|
||||
aco->save_curbuf = curbuf;
|
||||
@@ -8428,6 +8432,7 @@ aucmd_prepbuf(aco, buf)
|
||||
/* There is a window for "buf" in the current tab page, make it the
|
||||
* curwin. This is preferred, it has the least side effects (esp. if
|
||||
* "buf" is curbuf). */
|
||||
aco->use_aucmd_win = FALSE;
|
||||
curwin = win;
|
||||
}
|
||||
else
|
||||
@@ -8436,9 +8441,20 @@ aucmd_prepbuf(aco, buf)
|
||||
* effects, insert it in a the current tab page.
|
||||
* Anything related to a window (e.g., setting folds) may have
|
||||
* unexpected results. */
|
||||
aco->use_aucmd_win = TRUE;
|
||||
aucmd_win_used = TRUE;
|
||||
aucmd_win->w_buffer = buf;
|
||||
++buf->b_nwindows;
|
||||
win_init_empty(aucmd_win); /* set cursor and topline to safe values */
|
||||
vim_free(aucmd_win->w_localdir);
|
||||
aucmd_win->w_localdir = NULL;
|
||||
|
||||
/* Make sure w_localdir and globaldir are NULL to avoid a chdir() in
|
||||
* win_enter_ext(). */
|
||||
aucmd_win->w_localdir = NULL;
|
||||
aco->globaldir = globaldir;
|
||||
globaldir = NULL;
|
||||
|
||||
|
||||
#ifdef FEAT_WINDOWS
|
||||
/* Split the current window, put the aucmd_win in the upper half.
|
||||
@@ -8472,7 +8488,7 @@ aucmd_restbuf(aco)
|
||||
int dummy;
|
||||
#endif
|
||||
|
||||
if (aco->new_curwin == aucmd_win)
|
||||
if (aco->use_aucmd_win)
|
||||
{
|
||||
--curbuf->b_nwindows;
|
||||
#ifdef FEAT_WINDOWS
|
||||
@@ -8499,6 +8515,7 @@ aucmd_restbuf(aco)
|
||||
/* Remove the window and frame from the tree of frames. */
|
||||
(void)winframe_remove(curwin, &dummy, NULL);
|
||||
win_remove(curwin, NULL);
|
||||
aucmd_win_used = FALSE;
|
||||
last_status(FALSE); /* may need to remove last status line */
|
||||
restore_snapshot(SNAP_AUCMD_IDX, FALSE);
|
||||
(void)win_comp_pos(); /* recompute window positions */
|
||||
@@ -8517,6 +8534,9 @@ aucmd_restbuf(aco)
|
||||
#endif
|
||||
curbuf = curwin->w_buffer;
|
||||
|
||||
vim_free(globaldir);
|
||||
globaldir = aco->globaldir;
|
||||
|
||||
/* the buffer contents may have changed */
|
||||
check_cursor();
|
||||
if (curwin->w_topline > curbuf->b_ml.ml_line_count)
|
||||
@@ -8541,7 +8561,7 @@ aucmd_restbuf(aco)
|
||||
#endif
|
||||
{
|
||||
/* Restore the buffer which was previously edited by curwin, if
|
||||
* it was chagned, we are still the same window and the buffer is
|
||||
* it was changed, we are still the same window and the buffer is
|
||||
* valid. */
|
||||
if (curwin == aco->new_curwin
|
||||
&& curbuf != aco->new_curbuf
|
||||
|
Reference in New Issue
Block a user