summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2009-06-24 15:32:01 +0000
committervimboss <devnull@localhost>2009-06-24 15:32:01 +0000
commitac1474b7ebb507ab448d60f0e8f112dd16c3529e (patch)
treeb651159e169232a892bad6ceda78461e4ca850c9
parent567112e68dd63bbf25432a77856b24317dc16474 (diff)
downloadvim-7-2-215.tar.gz
updated for version 7.2-215v7.2.215v7-2-215
-rw-r--r--src/fileio.c14
-rw-r--r--src/proto/window.pro1
-rw-r--r--src/quickfix.c19
-rw-r--r--src/version.c2
-rw-r--r--src/window.c62
5 files changed, 54 insertions, 44 deletions
diff --git a/src/fileio.c b/src/fileio.c
index 9ce41d42..61c21480 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -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;
diff --git a/src/proto/window.pro b/src/proto/window.pro
index 6bc5f7e9..7b019a78 100644
--- 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
index 3c0ed203..5fc36bc5 100644
--- 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 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;
diff --git a/src/version.c b/src/version.c
index 0ef972ad..e4ac3330 100644
--- 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
index 0c3a7f38..c1955ad7 100644
--- 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;
+ 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