changeset 1918:eac2556d4620 v7.2.215

updated for version 7.2-215
author vimboss
date Wed, 24 Jun 2009 15:32:01 +0000
parents 802898d3afd1
children 6e9c10c63e25
files src/fileio.c src/proto/window.pro src/quickfix.c src/version.c src/window.c
diffstat 5 files changed, 57 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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));
--- 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)
--- 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,
--- 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