]> granicus.if.org Git - vim/commitdiff
updated for version 7.2-215 v7.2.215
authorBram Moolenaar <Bram@vim.org>
Wed, 24 Jun 2009 15:32:01 +0000 (15:32 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 24 Jun 2009 15:32:01 +0000 (15:32 +0000)
src/fileio.c
src/proto/window.pro
src/quickfix.c
src/version.c
src/window.c

index 9ce41d420aca98441e293906516eedc8dac2e98a..61c21480a423c9889e83e94cf1dc507d5c8a9d05 100644 (file)
@@ -710,7 +710,8 @@ readfile(fname, sfname, from, lines_to_skip, lines_to_read, eap, flags)
 #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;
index 6bc5f7e9e2812467eda56dc3681a9f2667199190..7b019a780e3996934dffba97d1499135c71b0a5c 100644 (file)
@@ -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));
index 3c0ed203bb00ca0b3f5445c1574b7fa75ec81dd4..5fc36bc5e00577baba656d11433257fcc129f10f 100644 (file)
@@ -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 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);
+       /* Need to set the filename for autocommands. */
+       (void)setfname(curbuf, fname, NULL, FALSE);
 
-    if (ml_open(curbuf) == OK)
-    {
        /* Create swap file now to avoid the ATTENTION message. */
        check_need_swap(TRUE);
 
@@ -3441,10 +3442,10 @@ 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;
index 0ef972ad33dcf5e824cd071f0702c7b4ba023a16..e4ac33303e138f79dbdca966551d4f6238d6868b 100644 (file)
@@ -676,6 +676,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    215,
 /**/
     214,
 /**/
index 0c3a7f3837e0aaecfec27812d380240e4f6516f5..c1955ad7000245234310f67e78bfaf339458db54 100644 (file)
@@ -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;
+    wp->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_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;
+    wp->w_topfill = 0;
 #endif
-    curwin->w_botline = 2;
+    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