# HG changeset patch # User vimboss # Date 1245857521 0 # Node ID eac2556d46208785a173d44b4efff339a7e2fab8 # Parent 802898d3afd12da41c305c495b121e41ed880659 updated for version 7.2-215 diff --git a/src/fileio.c b/src/fileio.c --- a/src/fileio.c +++ b/src/fileio.c @@ -710,7 +710,8 @@ readfile(fname, sfname, from, lines_to_s #endif #ifdef UNIX /* Set swap file protection bits after creating it. */ - if (swap_mode > 0 && curbuf->b_ml.ml_mfp->mf_fname != NULL) + if (swap_mode > 0 && curbuf->b_ml.ml_mfp != NULL + && curbuf->b_ml.ml_mfp->mf_fname != NULL) (void)mch_setperm(curbuf->b_ml.ml_mfp->mf_fname, (long)swap_mode); #endif } @@ -8435,9 +8436,9 @@ 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. */ - curwin = aucmd_win; - curwin->w_buffer = buf; + aucmd_win->w_buffer = buf; ++buf->b_nwindows; + win_init_empty(aucmd_win); /* set cursor and topline to safe values */ #ifdef FEAT_WINDOWS /* Split the current window, put the aucmd_win in the upper half. */ @@ -8448,12 +8449,7 @@ aucmd_prepbuf(aco, buf) (void)win_comp_pos(); /* recompute window positions */ p_ea = save_ea; #endif - /* set cursor and topline to safe values */ - curwin_init(); -#ifdef FEAT_VERTSPLIT - curwin->w_wincol = 0; - curwin->w_width = Columns; -#endif + curwin = aucmd_win; } curbuf = buf; aco->new_curwin = curwin; diff --git a/src/proto/window.pro b/src/proto/window.pro --- a/src/proto/window.pro +++ b/src/proto/window.pro @@ -14,6 +14,7 @@ void win_free_all __ARGS((void)); win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp)); void close_others __ARGS((int message, int forceit)); void curwin_init __ARGS((void)); +void win_init_empty __ARGS((win_T *wp)); int win_alloc_first __ARGS((void)); void win_alloc_aucmd_win __ARGS((void)); void win_init_size __ARGS((void)); diff --git a/src/quickfix.c b/src/quickfix.c --- a/src/quickfix.c +++ b/src/quickfix.c @@ -3411,14 +3411,15 @@ load_dummy_buffer(fname) /* Init the options. */ buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP); - /* set curwin/curbuf to buf and save a few things */ - aucmd_prepbuf(&aco, newbuf); - - /* Need to set the filename for autocommands. */ - (void)setfname(curbuf, fname, NULL, FALSE); - - if (ml_open(curbuf) == OK) + /* need to open the memfile before putting the buffer in a window */ + if (ml_open(newbuf) == OK) { + /* set curwin/curbuf to buf and save a few things */ + aucmd_prepbuf(&aco, newbuf); + + /* Need to set the filename for autocommands. */ + (void)setfname(curbuf, fname, NULL, FALSE); + /* Create swap file now to avoid the ATTENTION message. */ check_need_swap(TRUE); @@ -3441,11 +3442,11 @@ load_dummy_buffer(fname) newbuf = curbuf; } } + + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); } - /* restore curwin/curbuf and a few other things */ - aucmd_restbuf(&aco); - if (!buf_valid(newbuf)) return NULL; if (failed) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -677,6 +677,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 215, +/**/ 214, /**/ 213, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -2354,13 +2354,6 @@ win_free_mem(win, dirp, tp) frame_T *frp; win_T *wp; -#ifdef FEAT_FOLDING - clearFolding(win); -#endif - - /* reduce the reference count to the argument list. */ - alist_unlink(win->w_alist); - /* Remove the window and its frame from the tree of frames. */ frp = win->w_frame; wp = winframe_remove(win, dirp, tp); @@ -2386,9 +2379,6 @@ win_free_all() tabpage_close(TRUE); # endif - while (firstwin != NULL) - (void)win_free_mem(firstwin, &dummy, NULL); - # ifdef FEAT_AUTOCMD if (aucmd_win != NULL) { @@ -2396,6 +2386,9 @@ win_free_all() aucmd_win = NULL; } # endif + + while (firstwin != NULL) + (void)win_free_mem(firstwin, &dummy, NULL); } #endif @@ -3204,27 +3197,34 @@ close_others(message, forceit) void curwin_init() { - redraw_win_later(curwin, NOT_VALID); - curwin->w_lines_valid = 0; - curwin->w_cursor.lnum = 1; - curwin->w_curswant = curwin->w_cursor.col = 0; + win_init_empty(curwin); +} + + void +win_init_empty(wp) + win_T *wp; +{ + redraw_win_later(wp, NOT_VALID); + wp->w_lines_valid = 0; + wp->w_cursor.lnum = 1; + wp->w_curswant = wp->w_cursor.col = 0; #ifdef FEAT_VIRTUALEDIT - curwin->w_cursor.coladd = 0; -#endif - curwin->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ - curwin->w_pcmark.col = 0; - curwin->w_prev_pcmark.lnum = 0; - curwin->w_prev_pcmark.col = 0; - curwin->w_topline = 1; + wp->w_cursor.coladd = 0; +#endif + wp->w_pcmark.lnum = 1; /* pcmark not cleared but set to line 1 */ + wp->w_pcmark.col = 0; + wp->w_prev_pcmark.lnum = 0; + wp->w_prev_pcmark.col = 0; + wp->w_topline = 1; #ifdef FEAT_DIFF - curwin->w_topfill = 0; -#endif - curwin->w_botline = 2; + wp->w_topfill = 0; +#endif + wp->w_botline = 2; #ifdef FEAT_FKMAP - if (curwin->w_p_rl) - curwin->w_farsi = W_CONV + W_R_L; + if (wp->w_p_rl) + wp->w_farsi = W_CONV + W_R_L; else - curwin->w_farsi = W_CONV; + wp->w_farsi = W_CONV; #endif } @@ -4325,6 +4325,13 @@ win_free(wp, tp) { int i; +#ifdef FEAT_FOLDING + clearFolding(wp); +#endif + + /* reduce the reference count to the argument list. */ + alist_unlink(wp->w_alist); + #ifdef FEAT_AUTOCMD /* Don't execute autocommands while the window is halfway being deleted. * gui_mch_destroy_scrollbar() may trigger a FocusGained event. */ @@ -4387,7 +4394,10 @@ win_free(wp, tp) } #endif /* FEAT_GUI */ - win_remove(wp, tp); +#ifdef FEAT_AUTOCMD + if (wp != aucmd_win) +#endif + win_remove(wp, tp); vim_free(wp); #ifdef FEAT_AUTOCMD