]> granicus.if.org Git - vim/commitdiff
updated for version 7.2-241 v7.2.241
authorBram Moolenaar <Bram@vim.org>
Wed, 29 Jul 2009 10:10:29 +0000 (10:10 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 29 Jul 2009 10:10:29 +0000 (10:10 +0000)
src/fileio.c
src/globals.h
src/structs.h
src/version.c

index b17806bdec83b94183e21146b4e58c02dec29b0e..1e7db3391c6275e59cd9330dffd7d1b71ab4afd8 100644 (file)
@@ -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
index 8f373f69fcf063b735cc874c71009fd1e412ef66..2ff31740e198cf3242cba7cacc8a50a28f99192c 100644 (file)
@@ -541,6 +541,7 @@ EXTERN win_T        *curwin;        /* currently active window */
 
 #ifdef FEAT_AUTOCMD
 EXTERN win_T   *aucmd_win;     /* window used in aucmd_prepbuf() */
+EXTERN int     aucmd_win_used INIT(= FALSE);   /* aucmd_win is being used */
 #endif
 
 /*
index 658e098e1fe920ec60d6d4c94727e5531ece61e4..137352d95d3ff02cb10c7232a556bb2e726140b7 100644 (file)
@@ -2288,9 +2288,11 @@ typedef struct
 {
     buf_T      *save_curbuf;   /* saved curbuf */
 #ifdef FEAT_AUTOCMD
+    int                use_aucmd_win;  /* using aucmd_win */
     win_T      *save_curwin;   /* saved curwin */
     win_T      *new_curwin;    /* new curwin */
     buf_T      *new_curbuf;    /* new curbuf */
+    char_u     *globaldir;     /* saved value of globaldir */
 #endif
 } aco_save_T;
 
index ffaaa30862059b0b34b28e8f59159a5f5d21af9b..2b2431bc845db557304262c5370722ef31e671c6 100644 (file)
@@ -676,6 +676,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    241,
 /**/
     240,
 /**/