components/vim/vim72-patches/7.2.203
changeset 379 c6a17bba1da3
parent 378 f0b61ed1d10d
child 380 e92b3b4a1c66
--- a/components/vim/vim72-patches/7.2.203	Thu Jul 07 19:05:29 2011 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1496 +0,0 @@
-To: [email protected]
-Subject: Patch 7.2.203
-Fcc: outbox
-From: Bram Moolenaar <[email protected]>
-Mime-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-------------
-
-Patch 7.2.203
-Problem:    When reloading a buffer or doing anything else with a buffer that
-	    is not displayed in a visible window, autocommands may be applied
-	    to the current window, folds messed up, etc.
-Solution:   Instead of using the current window for the hidden buffer use a
-	    special window, splitting the current one temporarily.
-Files:	    src/fileio.c, src/globals.h, src/gui.c, src/if_perl.xs,
-	    src/proto/gui.pro, src/proto/window.pro, src/screen.c,
-	    src/structs.h, src/window.c
-
-
-*** ../vim-7.2.202/src/fileio.c	2009-06-16 15:35:46.000000000 +0200
---- src/fileio.c	2009-06-11 21:22:37.000000000 +0200
-***************
-*** 8365,8371 ****
-  
-  	    /* Execute the modeline settings, but don't set window-local
-  	     * options if we are using the current window for another buffer. */
-! 	    do_modelines(aco.save_curwin == NULL ? OPT_NOWIN : 0);
-  
-  	    /* restore the current window */
-  	    aucmd_restbuf(&aco);
---- 8365,8371 ----
-  
-  	    /* Execute the modeline settings, but don't set window-local
-  	     * options if we are using the current window for another buffer. */
-! 	    do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
-  
-  	    /* restore the current window */
-  	    aucmd_restbuf(&aco);
-***************
-*** 8381,8388 ****
-  
-  /*
-   * Prepare for executing autocommands for (hidden) buffer "buf".
-!  * Search a window for the current buffer.  Save the cursor position and
-!  * screen offset.
-   * Set "curbuf" and "curwin" to match "buf".
-   * When FEAT_AUTOCMD is not defined another version is used, see below.
-   */
---- 8381,8388 ----
-  
-  /*
-   * Prepare for executing autocommands for (hidden) buffer "buf".
-!  * Search for a visible window containing the current buffer.  If there isn't
-!  * one then use "aucmd_win".
-   * Set "curbuf" and "curwin" to match "buf".
-   * When FEAT_AUTOCMD is not defined another version is used, see below.
-   */
-***************
-*** 8392,8399 ****
-      buf_T	*buf;		/* new curbuf */
-  {
-      win_T	*win;
-! 
-!     aco->new_curbuf = buf;
-  
-      /* Find a window that is for the new buffer */
-      if (buf == curbuf)		/* be quick when buf is curbuf */
---- 8392,8400 ----
-      buf_T	*buf;		/* new curbuf */
-  {
-      win_T	*win;
-! #ifdef FEAT_WINDOWS
-!     int		save_ea;
-! #endif
-  
-      /* Find a window that is for the new buffer */
-      if (buf == curbuf)		/* be quick when buf is curbuf */
-***************
-*** 8407,8448 ****
-  	win = NULL;
-  #endif
-  
-!     /*
-!      * Prefer to use an existing window for the buffer, it has the least side
-!      * effects (esp. if "buf" is curbuf).
-!      * Otherwise, use curwin for "buf".  It might make some items in the
-!      * window invalid.  At least save the cursor and topline.
-!      */
-      if (win != NULL)
-      {
-! 	/* there is a window for "buf", make it the curwin */
-! 	aco->save_curwin = curwin;
-  	curwin = win;
-- 	aco->save_buf = win->w_buffer;
-- 	aco->new_curwin = win;
-      }
-      else
-      {
-! 	/* there is no window for "buf", use curwin */
-! 	aco->save_curwin = NULL;
-! 	aco->save_buf = curbuf;
-! 	--curbuf->b_nwindows;
-  	curwin->w_buffer = buf;
-  	++buf->b_nwindows;
-  
-! 	/* save cursor and topline, set them to safe values */
-! 	aco->save_cursor = curwin->w_cursor;
-! 	curwin->w_cursor.lnum = 1;
-! 	curwin->w_cursor.col = 0;
-! 	aco->save_topline = curwin->w_topline;
-! 	curwin->w_topline = 1;
-! #ifdef FEAT_DIFF
-! 	aco->save_topfill = curwin->w_topfill;
-! 	curwin->w_topfill = 0;
-  #endif
-      }
-- 
-      curbuf = buf;
-  }
-  
-  /*
---- 8408,8460 ----
-  	win = NULL;
-  #endif
-  
-!     /* Allocate "aucmd_win" when needed.  If this fails (out of memory) fall
-!      * back to using the current window. */
-!     if (win == NULL && aucmd_win == NULL)
-!     {
-! 	win_alloc_aucmd_win();
-! 	if (aucmd_win == NULL)
-! 	    win = curwin;
-!     }
-! 
-!     aco->save_curwin = curwin;
-!     aco->save_curbuf = curbuf;
-      if (win != NULL)
-      {
-! 	/* 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). */
-  	curwin = win;
-      }
-      else
-      {
-! 	/* There is no window for "buf", use "aucmd_win".  To minimize the side
-! 	 * 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;
-  	++buf->b_nwindows;
-  
-! #ifdef FEAT_WINDOWS
-! 	/* Split the current window, put the aucmd_win in the upper half. */
-! 	make_snapshot(SNAP_AUCMD_IDX);
-! 	save_ea = p_ea;
-! 	p_ea = FALSE;
-! 	(void)win_split_ins(0, WSP_TOP, aucmd_win, 0);
-! 	(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
-      }
-      curbuf = buf;
-+     aco->new_curwin = curwin;
-+     aco->new_curbuf = curbuf;
-  }
-  
-  /*
-***************
-*** 8454,8474 ****
-  aucmd_restbuf(aco)
-      aco_save_T	*aco;		/* structure holding saved values */
-  {
-!     if (aco->save_curwin != NULL)
-      {
-  	/* restore curwin */
-  #ifdef FEAT_WINDOWS
-  	if (win_valid(aco->save_curwin))
-  #endif
-  	{
-! 	    /* restore the buffer which was previously edited by curwin, if
-! 	     * it's still the same window and it's valid */
-  	    if (curwin == aco->new_curwin
-! 		    && buf_valid(aco->save_buf)
-! 		    && aco->save_buf->b_ml.ml_mfp != NULL)
-  	    {
-  		--curbuf->b_nwindows;
-! 		curbuf = aco->save_buf;
-  		curwin->w_buffer = curbuf;
-  		++curbuf->b_nwindows;
-  	    }
---- 8466,8551 ----
-  aucmd_restbuf(aco)
-      aco_save_T	*aco;		/* structure holding saved values */
-  {
-! #ifdef FEAT_WINDOWS
-!     int dummy;
-! #endif
-! 
-!     if (aco->new_curwin == aucmd_win)
-!     {
-! 	--curbuf->b_nwindows;
-! #ifdef FEAT_WINDOWS
-! 	/* Find "aucmd_win", it can't be closed, but it may be in another tab
-! 	 * page. */
-! 	if (curwin != aucmd_win)
-! 	{
-! 	    tabpage_T	*tp;
-! 	    win_T	*wp;
-! 
-! 	    FOR_ALL_TAB_WINDOWS(tp, wp)
-! 	    {
-! 		if (wp == aucmd_win)
-! 		{
-! 		    if (tp != curtab)
-! 			goto_tabpage_tp(tp);
-! 		    win_goto(aucmd_win);
-! 		    break;
-! 		}
-! 	    }
-! 	}
-! 
-! 	/* Remove the window and frame from the tree of frames. */
-! 	(void)winframe_remove(curwin, &dummy, NULL);
-! 	win_remove(curwin, NULL);
-! 	last_status(FALSE);	    /* may need to remove last status line */
-! 	restore_snapshot(SNAP_AUCMD_IDX, FALSE);
-! 	(void)win_comp_pos();   /* recompute window positions */
-! 
-! 	if (win_valid(aco->save_curwin))
-! 	    curwin = aco->save_curwin;
-! 	else
-! 	    /* Hmm, original window disappeared.  Just use the first one. */
-! 	    curwin = firstwin;
-! # ifdef FEAT_EVAL
-! 	vars_clear(&aucmd_win->w_vars.dv_hashtab);  /* free all w: variables */
-! # endif
-! #else
-! 	curwin = aco->save_curwin;
-! #endif
-! 	curbuf = curwin->w_buffer;
-! 
-! 	/* the buffer contents may have changed */
-! 	check_cursor();
-! 	if (curwin->w_topline > curbuf->b_ml.ml_line_count)
-! 	{
-! 	    curwin->w_topline = curbuf->b_ml.ml_line_count;
-! #ifdef FEAT_DIFF
-! 	    curwin->w_topfill = 0;
-! #endif
-! 	}
-! #if defined(FEAT_GUI)
-! 	/* Hide the scrollbars from the aucmd_win and update. */
-! 	gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_LEFT], FALSE);
-! 	gui_mch_enable_scrollbar(&aucmd_win->w_scrollbars[SBAR_RIGHT], FALSE);
-! 	gui_may_update_scrollbars();
-! #endif
-!     }
-!     else
-      {
-  	/* restore curwin */
-  #ifdef FEAT_WINDOWS
-  	if (win_valid(aco->save_curwin))
-  #endif
-  	{
-! 	    /* Restore the buffer which was previously edited by curwin, if
-! 	     * it was chagned, we are still the same window and the buffer is
-! 	     * valid. */
-  	    if (curwin == aco->new_curwin
-! 		    && curbuf != aco->new_curbuf
-! 		    && buf_valid(aco->new_curbuf)
-! 		    && aco->new_curbuf->b_ml.ml_mfp != NULL)
-  	    {
-  		--curbuf->b_nwindows;
-! 		curbuf = aco->new_curbuf;
-  		curwin->w_buffer = curbuf;
-  		++curbuf->b_nwindows;
-  	    }
-***************
-*** 8477,8510 ****
-  	    curbuf = curwin->w_buffer;
-  	}
-      }
--     else
--     {
-- 	/* restore buffer for curwin if it still exists and is loaded */
-- 	if (buf_valid(aco->save_buf) && aco->save_buf->b_ml.ml_mfp != NULL)
-- 	{
-- 	    --curbuf->b_nwindows;
-- 	    curbuf = aco->save_buf;
-- 	    curwin->w_buffer = curbuf;
-- 	    ++curbuf->b_nwindows;
-- 	    curwin->w_cursor = aco->save_cursor;
-- 	    check_cursor();
-- 	    /* check topline < line_count, in case lines got deleted */
-- 	    if (aco->save_topline <= curbuf->b_ml.ml_line_count)
-- 	    {
-- 		curwin->w_topline = aco->save_topline;
-- #ifdef FEAT_DIFF
-- 		curwin->w_topfill = aco->save_topfill;
-- #endif
-- 	    }
-- 	    else
-- 	    {
-- 		curwin->w_topline = curbuf->b_ml.ml_line_count;
-- #ifdef FEAT_DIFF
-- 		curwin->w_topfill = 0;
-- #endif
-- 	    }
-- 	}
--     }
-  }
-  
-  static int	autocmd_nested = FALSE;
---- 8554,8559 ----
-***************
-*** 9419,9427 ****
-      aco_save_T	*aco;		/* structure to save values in */
-      buf_T	*buf;		/* new curbuf */
-  {
-!     aco->save_buf = curbuf;
-      curbuf = buf;
-      curwin->w_buffer = buf;
-  }
-  
-  /*
---- 9468,9478 ----
-      aco_save_T	*aco;		/* structure to save values in */
-      buf_T	*buf;		/* new curbuf */
-  {
-!     aco->save_curbuf = curbuf;
-!     --curbuf->b_nwindows;
-      curbuf = buf;
-      curwin->w_buffer = buf;
-+     ++curbuf->b_nwindows;
-  }
-  
-  /*
-***************
-*** 9432,9439 ****
-  aucmd_restbuf(aco)
-      aco_save_T	*aco;		/* structure holding saved values */
-  {
-!     curbuf = aco->save_buf;
-      curwin->w_buffer = curbuf;
-  }
-  
-  #endif	/* FEAT_AUTOCMD */
---- 9483,9492 ----
-  aucmd_restbuf(aco)
-      aco_save_T	*aco;		/* structure holding saved values */
-  {
-!     --curbuf->b_nwindows;
-!     curbuf = aco->save_curbuf;
-      curwin->w_buffer = curbuf;
-+     ++curbuf->b_nwindows;
-  }
-  
-  #endif	/* FEAT_AUTOCMD */
-*** ../vim-7.2.202/src/globals.h	2009-06-16 15:23:07.000000000 +0200
---- src/globals.h	2009-06-12 21:10:30.000000000 +0200
-***************
-*** 539,544 ****
---- 539,548 ----
-  
-  EXTERN win_T	*curwin;	/* currently active window */
-  
-+ #ifdef FEAT_AUTOCMD
-+ EXTERN win_T	*aucmd_win;	/* window used in aucmd_prepbuf() */
-+ #endif
-+ 
-  /*
-   * The window layout is kept in a tree of frames.  topframe points to the top
-   * of the tree.
-*** ../vim-7.2.202/src/gui.c	2009-05-21 23:25:38.000000000 +0200
---- src/gui.c	2009-06-11 20:58:05.000000000 +0200
-***************
-*** 3879,3884 ****
---- 3879,3899 ----
-   * Scrollbar stuff:
-   */
-  
-+ /*
-+  * Called when something in the window layout has changed.
-+  */
-+     void
-+ gui_may_update_scrollbars()
-+ {
-+     if (gui.in_use && starting == 0)
-+     {
-+ 	out_flush();
-+ 	gui_init_which_components(NULL);
-+ 	gui_update_scrollbars(TRUE);
-+     }
-+     need_mouse_correct = TRUE;
-+ }
-+ 
-      void
-  gui_update_scrollbars(force)
-      int		force;	    /* Force all scrollbars to get updated */
-*** ../vim-7.2.202/src/if_perl.xs	2008-12-03 13:18:16.000000000 +0100
---- src/if_perl.xs	2009-06-03 17:52:51.000000000 +0200
-***************
-*** 1234,1240 ****
-  		    {
-  			ml_delete(lnum, 0);
-  			deleted_lines_mark(lnum, 1L);
-! 			if (aco.save_buf == curbuf)
-  			    check_cursor();
-  		    }
-  
---- 1236,1242 ----
-  		    {
-  			ml_delete(lnum, 0);
-  			deleted_lines_mark(lnum, 1L);
-! 			if (aco.save_curbuf == curbuf)
-  			    check_cursor();
-  		    }
-  
-*** ../vim-7.2.202/src/proto/gui.pro	2007-05-05 19:42:19.000000000 +0200
---- src/proto/gui.pro	2009-06-11 20:58:08.000000000 +0200
-***************
-*** 43,48 ****
---- 43,49 ----
-  void gui_create_scrollbar __ARGS((scrollbar_T *sb, int type, win_T *wp));
-  scrollbar_T *gui_find_scrollbar __ARGS((long ident));
-  void gui_drag_scrollbar __ARGS((scrollbar_T *sb, long value, int still_dragging));
-+ void gui_may_update_scrollbars __ARGS((void));
-  void gui_update_scrollbars __ARGS((int force));
-  int gui_do_scroll __ARGS((void));
-  int gui_do_horiz_scroll __ARGS((void));
-*** ../vim-7.2.202/src/proto/window.pro	2007-07-26 22:57:45.000000000 +0200
---- src/proto/window.pro	2009-06-10 21:20:39.000000000 +0200
-***************
-*** 1,6 ****
---- 1,7 ----
-  /* window.c */
-  void do_window __ARGS((int nchar, long Prenum, int xchar));
-  int win_split __ARGS((int size, int flags));
-+ int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
-  int win_valid __ARGS((win_T *win));
-  int win_count __ARGS((void));
-  int make_windows __ARGS((int count, int vertical));
-***************
-*** 10,18 ****
---- 11,21 ----
-  void win_close __ARGS((win_T *win, int free_buf));
-  void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
-  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));
-  int win_alloc_first __ARGS((void));
-+ void win_alloc_aucmd_win __ARGS((void));
-  void win_init_size __ARGS((void));
-  void free_tabpage __ARGS((tabpage_T *tp));
-  int win_new_tabpage __ARGS((int after));
-***************
-*** 30,35 ****
---- 33,40 ----
-  void win_enter __ARGS((win_T *wp, int undo_sync));
-  win_T *buf_jump_open_win __ARGS((buf_T *buf));
-  win_T *buf_jump_open_tab __ARGS((buf_T *buf));
-+ void win_append __ARGS((win_T *after, win_T *wp));
-+ void win_remove __ARGS((win_T *wp, tabpage_T *tp));
-  int win_alloc_lines __ARGS((win_T *wp));
-  void win_free_lsize __ARGS((win_T *wp));
-  void shell_new_rows __ARGS((void));
-***************
-*** 58,63 ****
---- 63,70 ----
-  int min_rows __ARGS((void));
-  int only_one_window __ARGS((void));
-  void check_lnums __ARGS((int do_curwin));
-+ void make_snapshot __ARGS((int idx));
-+ void restore_snapshot __ARGS((int idx, int close_curwin));
-  int win_hasvertsplit __ARGS((void));
-  int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
-  int match_delete __ARGS((win_T *wp, int id, int perr));
-*** ../vim-7.2.202/src/screen.c	2009-05-17 13:30:58.000000000 +0200
---- src/screen.c	2009-06-10 16:41:45.000000000 +0200
-***************
-*** 7495,7500 ****
---- 7495,7504 ----
-  #endif
-  	}
-      }
-+ #ifdef FEAT_AUTOCMD
-+     if (aucmd_win != NULL && win_alloc_lines(aucmd_win) == FAIL)
-+ 	outofmem = TRUE;
-+ #endif
-  #ifdef FEAT_WINDOWS
-  give_up:
-  #endif
-*** ../vim-7.2.202/src/structs.h	2009-05-16 16:36:25.000000000 +0200
---- src/structs.h	2009-06-13 12:51:56.000000000 +0200
-***************
-*** 1621,1626 ****
---- 1621,1634 ----
-  };
-  #endif
-  
-+ #define SNAP_HELP_IDX	0
-+ #ifdef FEAT_AUTOCMD
-+ # define SNAP_AUCMD_IDX 1
-+ # define SNAP_COUNT	2
-+ #else
-+ # define SNAP_COUNT	1
-+ #endif
-+ 
-  /*
-   * Tab pages point to the top frame of each tab page.
-   * Note: Most values are NOT valid for the current tab page!  Use "curwin",
-***************
-*** 1649,1655 ****
-      buf_T	    *(tp_diffbuf[DB_COUNT]);
-      int		    tp_diff_invalid;	/* list of diffs is outdated */
-  #endif
-!     frame_T	    *tp_snapshot;    /* window layout snapshot */
-  #ifdef FEAT_EVAL
-      dictitem_T	    tp_winvar;	    /* variable for "t:" Dictionary */
-      dict_T	    tp_vars;	    /* internal variables, local to tab page */
---- 1657,1663 ----
-      buf_T	    *(tp_diffbuf[DB_COUNT]);
-      int		    tp_diff_invalid;	/* list of diffs is outdated */
-  #endif
-!     frame_T	    *(tp_snapshot[SNAP_COUNT]);  /* window layout snapshots */
-  #ifdef FEAT_EVAL
-      dictitem_T	    tp_winvar;	    /* variable for "t:" Dictionary */
-      dict_T	    tp_vars;	    /* internal variables, local to tab page */
-***************
-*** 2276,2291 ****
-   */
-  typedef struct
-  {
-!     buf_T	*save_buf;	/* saved curbuf */
-  #ifdef FEAT_AUTOCMD
-!     buf_T	*new_curbuf;	/* buffer to be used */
-!     win_T	*save_curwin;	/* saved curwin, NULL if it didn't change */
-!     win_T	*new_curwin;	/* new curwin if save_curwin != NULL */
-!     pos_T	save_cursor;	/* saved cursor pos of save_curwin */
-!     linenr_T	save_topline;	/* saved topline of save_curwin */
-! # ifdef FEAT_DIFF
-!     int		save_topfill;	/* saved topfill of save_curwin */
-! # endif
-  #endif
-  } aco_save_T;
-  
---- 2284,2294 ----
-   */
-  typedef struct
-  {
-!     buf_T	*save_curbuf;	/* saved curbuf */
-  #ifdef FEAT_AUTOCMD
-!     win_T	*save_curwin;	/* saved curwin */
-!     win_T	*new_curwin;	/* new curwin */
-!     buf_T	*new_curbuf;	/* new curbuf */
-  #endif
-  } aco_save_T;
-  
-*** ../vim-7.2.202/src/window.c	2009-05-21 23:25:38.000000000 +0200
---- src/window.c	2009-06-12 22:29:33.000000000 +0200
-***************
-*** 11,18 ****
-  
-  static int path_is_url __ARGS((char_u *p));
-  #if defined(FEAT_WINDOWS) || defined(PROTO)
-- static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
-  static void win_init __ARGS((win_T *newp, win_T *oldp, int flags));
-  static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col));
-  static void frame_setheight __ARGS((frame_T *curfrp, int height));
-  #ifdef FEAT_VERTSPLIT
---- 11,18 ----
-  
-  static int path_is_url __ARGS((char_u *p));
-  #if defined(FEAT_WINDOWS) || defined(PROTO)
-  static void win_init __ARGS((win_T *newp, win_T *oldp, int flags));
-+ static void win_init_some __ARGS((win_T *newp, win_T *oldp));
-  static void frame_comp_pos __ARGS((frame_T *topfrp, int *row, int *col));
-  static void frame_setheight __ARGS((frame_T *curfrp, int height));
-  #ifdef FEAT_VERTSPLIT
-***************
-*** 23,30 ****
-  static void win_totop __ARGS((int size, int flags));
-  static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
-  static int last_window __ARGS((void));
-  static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
-- static win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp));
-  static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
-  static tabpage_T *alt_tabpage __ARGS((void));
-  static win_T *frame2win __ARGS((frame_T *frp));
---- 23,30 ----
-  static void win_totop __ARGS((int size, int flags));
-  static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
-  static int last_window __ARGS((void));
-+ static int one_window __ARGS((void));
-  static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
-  static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
-  static tabpage_T *alt_tabpage __ARGS((void));
-  static win_T *frame2win __ARGS((frame_T *frp));
-***************
-*** 41,46 ****
---- 41,47 ----
-  #endif
-  #endif
-  static int win_alloc_firstwin __ARGS((win_T *oldwin));
-+ static void new_frame __ARGS((win_T *wp));
-  #if defined(FEAT_WINDOWS) || defined(PROTO)
-  static tabpage_T *alloc_tabpage __ARGS((void));
-  static int leave_tabpage __ARGS((buf_T *new_curbuf));
-***************
-*** 49,56 ****
-  static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
-  static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
-  static void win_free __ARGS((win_T *wp, tabpage_T *tp));
-- static void win_append __ARGS((win_T *, win_T *));
-- static void win_remove __ARGS((win_T *, tabpage_T *tp));
-  static void frame_append __ARGS((frame_T *after, frame_T *frp));
-  static void frame_insert __ARGS((frame_T *before, frame_T *frp));
-  static void frame_remove __ARGS((frame_T *frp));
---- 50,55 ----
-***************
-*** 62,78 ****
-  static void frame_add_height __ARGS((frame_T *frp, int n));
-  static void last_status_rec __ARGS((frame_T *fr, int statusline));
-  
-- static void make_snapshot __ARGS((void));
-  static void make_snapshot_rec __ARGS((frame_T *fr, frame_T **frp));
-! static void clear_snapshot __ARGS((tabpage_T *tp));
-  static void clear_snapshot_rec __ARGS((frame_T *fr));
-- static void restore_snapshot __ARGS((int close_curwin));
-  static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
-  static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
-  
-  #endif /* FEAT_WINDOWS */
-  
-! static win_T *win_alloc __ARGS((win_T *after));
-  static void win_new_height __ARGS((win_T *, int));
-  
-  #define URL_SLASH	1		/* path_is_url() has found "://" */
---- 61,75 ----
-  static void frame_add_height __ARGS((frame_T *frp, int n));
-  static void last_status_rec __ARGS((frame_T *fr, int statusline));
-  
-  static void make_snapshot_rec __ARGS((frame_T *fr, frame_T **frp));
-! static void clear_snapshot __ARGS((tabpage_T *tp, int idx));
-  static void clear_snapshot_rec __ARGS((frame_T *fr));
-  static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
-  static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
-  
-  #endif /* FEAT_WINDOWS */
-  
-! static win_T *win_alloc __ARGS((win_T *after, int hidden));
-  static void win_new_height __ARGS((win_T *, int));
-  
-  #define URL_SLASH	1		/* path_is_url() has found "://" */
-***************
-*** 259,265 ****
-  /* cursor to previous window with wrap around */
-      case 'W':
-  		CHECK_CMDWIN
-! 		if (lastwin == firstwin && Prenum != 1)	/* just one window */
-  		    beep_flush();
-  		else
-  		{
---- 256,262 ----
-  /* cursor to previous window with wrap around */
-      case 'W':
-  		CHECK_CMDWIN
-! 		if (firstwin == lastwin && Prenum != 1)	/* just one window */
-  		    beep_flush();
-  		else
-  		{
-***************
-*** 343,349 ****
-  
-  /* move window to new tab page */
-      case 'T':
-! 		if (firstwin == lastwin)
-  		    MSG(_(m_onlyone));
-  		else
-  		{
---- 340,346 ----
-  
-  /* move window to new tab page */
-      case 'T':
-! 		if (one_window())
-  		    MSG(_(m_onlyone));
-  		else
-  		{
-***************
-*** 679,687 ****
-      /* When creating the help window make a snapshot of the window layout.
-       * Otherwise clear the snapshot, it's now invalid. */
-      if (flags & WSP_HELP)
-! 	make_snapshot();
-      else
-! 	clear_snapshot(curtab);
-  
-      return win_split_ins(size, flags, NULL, 0);
-  }
---- 676,684 ----
-      /* When creating the help window make a snapshot of the window layout.
-       * Otherwise clear the snapshot, it's now invalid. */
-      if (flags & WSP_HELP)
-! 	make_snapshot(SNAP_HELP_IDX);
-      else
-! 	clear_snapshot(curtab, SNAP_HELP_IDX);
-  
-      return win_split_ins(size, flags, NULL, 0);
-  }
-***************
-*** 692,698 ****
-   * top/left/right/bottom.
-   * return FAIL for failure, OK otherwise
-   */
-!     static int
-  win_split_ins(size, flags, newwin, dir)
-      int		size;
-      int		flags;
---- 689,695 ----
-   * top/left/right/bottom.
-   * return FAIL for failure, OK otherwise
-   */
-!     int
-  win_split_ins(size, flags, newwin, dir)
-      int		size;
-      int		flags;
-***************
-*** 893,906 ****
-      {
-  	/* new window below/right of current one */
-  	if (newwin == NULL)
-! 	    wp = win_alloc(oldwin);
-  	else
-  	    win_append(oldwin, wp);
-      }
-      else
-      {
-  	if (newwin == NULL)
-! 	    wp = win_alloc(oldwin->w_prev);
-  	else
-  	    win_append(oldwin->w_prev, wp);
-      }
---- 890,903 ----
-      {
-  	/* new window below/right of current one */
-  	if (newwin == NULL)
-! 	    wp = win_alloc(oldwin, FALSE);
-  	else
-  	    win_append(oldwin, wp);
-      }
-      else
-      {
-  	if (newwin == NULL)
-! 	    wp = win_alloc(oldwin->w_prev, FALSE);
-  	else
-  	    win_append(oldwin->w_prev, wp);
-      }
-***************
-*** 910,915 ****
---- 907,919 ----
-  	if (wp == NULL)
-  	    return FAIL;
-  
-+ 	new_frame(wp);
-+ 	if (wp->w_frame == NULL)
-+ 	{
-+ 	    win_free(wp, NULL);
-+ 	    return FAIL;
-+ 	}
-+ 
-  	/* make the contents of the new window the same as the current one */
-  	win_init(wp, curwin, flags);
-      }
-***************
-*** 970,982 ****
-      }
-  
-      if (newwin == NULL)
-!     {
-! 	/* Create a frame for the new window. */
-! 	frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T));
-! 	frp->fr_layout = FR_LEAF;
-! 	frp->fr_win = wp;
-! 	wp->w_frame = frp;
-!     }
-      else
-  	frp = newwin->w_frame;
-      frp->fr_parent = curfrp->fr_parent;
---- 974,980 ----
-      }
-  
-      if (newwin == NULL)
-! 	frp = wp->w_frame;
-      else
-  	frp = newwin->w_frame;
-      frp->fr_parent = curfrp->fr_parent;
-***************
-*** 1156,1161 ****
---- 1154,1160 ----
-      return OK;
-  }
-  
-+ 
-  /*
-   * Initialize window "newp" from window "oldp".
-   * Used when splitting a window and when creating a new tab page.
-***************
-*** 1204,1217 ****
-      if (oldp->w_localdir != NULL)
-  	newp->w_localdir = vim_strsave(oldp->w_localdir);
-  
-!     /* Use the same argument list. */
-!     newp->w_alist = oldp->w_alist;
-!     ++newp->w_alist->al_refcount;
-!     newp->w_arg_idx = oldp->w_arg_idx;
-! 
-!     /*
-!      * copy tagstack and options from existing window
-!      */
-      for (i = 0; i < oldp->w_tagstacklen; i++)
-      {
-  	newp->w_tagstack[i] = oldp->w_tagstack[i];
---- 1203,1209 ----
-      if (oldp->w_localdir != NULL)
-  	newp->w_localdir = vim_strsave(oldp->w_localdir);
-  
-!     /* copy tagstack and folds */
-      for (i = 0; i < oldp->w_tagstacklen; i++)
-      {
-  	newp->w_tagstack[i] = oldp->w_tagstack[i];
-***************
-*** 1221,1230 ****
-      }
-      newp->w_tagstackidx = oldp->w_tagstackidx;
-      newp->w_tagstacklen = oldp->w_tagstacklen;
--     win_copy_options(oldp, newp);
-  # ifdef FEAT_FOLDING
-      copyFoldingState(oldp, newp);
-  # endif
-  }
-  
-  #endif /* FEAT_WINDOWS */
---- 1213,1241 ----
-      }
-      newp->w_tagstackidx = oldp->w_tagstackidx;
-      newp->w_tagstacklen = oldp->w_tagstacklen;
-  # ifdef FEAT_FOLDING
-      copyFoldingState(oldp, newp);
-  # endif
-+ 
-+     win_init_some(newp, oldp);
-+ }
-+ 
-+ /*
-+  * Initialize window "newp" from window"old".
-+  * Only the essential things are copied.
-+  */
-+     static void
-+ win_init_some(newp, oldp)
-+     win_T	*newp;
-+     win_T	*oldp;
-+ {
-+     /* Use the same argument list. */
-+     newp->w_alist = oldp->w_alist;
-+     ++newp->w_alist->al_refcount;
-+     newp->w_arg_idx = oldp->w_arg_idx;
-+ 
-+     /* copy options from existing window */
-+     win_copy_options(oldp, newp);
-  }
-  
-  #endif /* FEAT_WINDOWS */
-***************
-*** 1565,1579 ****
-  #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)
-      /* When 'guioptions' includes 'L' or 'R' may have to remove or add
-       * scrollbars.  Have to update them anyway. */
-!     if (gui.in_use)
-!     {
-! 	out_flush();
-! 	gui_init_which_components(NULL);
-! 	gui_update_scrollbars(TRUE);
-!     }
-!     need_mouse_correct = TRUE;
-  #endif
-- 
-  }
-  
-  /*
---- 1576,1583 ----
-  #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)
-      /* When 'guioptions' includes 'L' or 'R' may have to remove or add
-       * scrollbars.  Have to update them anyway. */
-!     gui_may_update_scrollbars();
-  #endif
-  }
-  
-  /*
-***************
-*** 2048,2060 ****
-  }
-  
-  /*
-!  * Return TRUE if the current window is the only window that exists.
-   * Returns FALSE if there is a window, possibly in another tab page.
-   */
-      static int
-  last_window()
-  {
-!     return (lastwin == firstwin && first_tabpage->tp_next == NULL);
-  }
-  
-  /*
---- 2052,2091 ----
-  }
-  
-  /*
-!  * Return TRUE if the current window is the only window that exists (ignoring
-!  * "aucmd_win").
-   * Returns FALSE if there is a window, possibly in another tab page.
-   */
-      static int
-  last_window()
-  {
-!     return (one_window() && first_tabpage->tp_next == NULL);
-! }
-! 
-! /*
-!  * Return TRUE if there is only one window other than "aucmd_win" in the
-!  * current tab page.
-!  */
-!     static int
-! one_window()
-! {
-! #ifdef FEAT_AUTOCMD
-!     win_T	*wp;
-!     int		seen_one = FALSE;
-! 
-!     FOR_ALL_WINDOWS(wp)
-!     {
-! 	if (wp != aucmd_win)
-! 	{
-! 	    if (seen_one)
-! 		return FALSE;
-! 	    seen_one = TRUE;
-! 	}
-!     }
-!     return TRUE;
-! #else
-!     return firstwin == lastwin;
-! #endif
-  }
-  
-  /*
-***************
-*** 2083,2088 ****
---- 2114,2132 ----
-  	return;
-      }
-  
-+ #ifdef FEAT_AUTOCMD
-+     if (win == aucmd_win)
-+     {
-+ 	EMSG(_("E813: Cannot close autocmd window"));
-+ 	return;
-+     }
-+     if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window())
-+     {
-+ 	EMSG(_("E814: Cannot close window, only autocmd window would remain"));
-+ 	return;
-+     }
-+ #endif
-+ 
-      /*
-       * When closing the last window in a tab page first go to another tab
-       * page and then close the window and the tab page.  This avoids that
-***************
-*** 2112,2118 ****
-      if (win->w_buffer->b_help)
-  	help_window = TRUE;
-      else
-! 	clear_snapshot(curtab);
-  
-  #ifdef FEAT_AUTOCMD
-      if (win == curwin)
---- 2156,2162 ----
-      if (win->w_buffer->b_help)
-  	help_window = TRUE;
-      else
-! 	clear_snapshot(curtab, SNAP_HELP_IDX);
-  
-  #ifdef FEAT_AUTOCMD
-      if (win == curwin)
-***************
-*** 2229,2235 ****
-      /* After closing the help window, try restoring the window layout from
-       * before it was opened. */
-      if (help_window)
-! 	restore_snapshot(close_curwin);
-  
-  #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)
-      /* When 'guioptions' includes 'L' or 'R' may have to remove scrollbars. */
---- 2273,2279 ----
-      /* After closing the help window, try restoring the window layout from
-       * before it was opened. */
-      if (help_window)
-! 	restore_snapshot(SNAP_HELP_IDX, close_curwin);
-  
-  #if defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)
-      /* When 'guioptions' includes 'L' or 'R' may have to remove scrollbars. */
-***************
-*** 2344,2349 ****
---- 2388,2401 ----
-  
-      while (firstwin != NULL)
-  	(void)win_free_mem(firstwin, &dummy, NULL);
-+ 
-+ # ifdef FEAT_AUTOCMD
-+     if (aucmd_win != NULL)
-+     {
-+ 	(void)win_free_mem(aucmd_win, &dummy, NULL);
-+ 	aucmd_win = NULL;
-+     }
-+ # endif
-  }
-  #endif
-  
-***************
-*** 2351,2357 ****
-   * Remove a window and its frame from the tree of frames.
-   * Returns a pointer to the window that got the freed up space.
-   */
-!     static win_T *
-  winframe_remove(win, dirp, tp)
-      win_T	*win;
-      int		*dirp UNUSED;	/* set to 'v' or 'h' for direction if 'ea' */
---- 2403,2409 ----
-   * Remove a window and its frame from the tree of frames.
-   * Returns a pointer to the window that got the freed up space.
-   */
-!     win_T *
-  winframe_remove(win, dirp, tp)
-      win_T	*win;
-      int		*dirp UNUSED;	/* set to 'v' or 'h' for direction if 'ea' */
-***************
-*** 3090,3096 ****
-      win_T	*nextwp;
-      int		r;
-  
-!     if (lastwin == firstwin)
-      {
-  	if (message
-  #ifdef FEAT_AUTOCMD
---- 3142,3148 ----
-      win_T	*nextwp;
-      int		r;
-  
-!     if (one_window())
-      {
-  	if (message
-  #ifdef FEAT_AUTOCMD
-***************
-*** 3194,3202 ****
---- 3246,3275 ----
-      first_tabpage->tp_topframe = topframe;
-      curtab = first_tabpage;
-  #endif
-+ 
-      return OK;
-  }
-  
-+ #if defined(FEAT_AUTOCMD) || defined(PROTO)
-+ /*
-+  * Init "aucmd_win".  This can only be done after the first
-+  * window is fully initialized, thus it can't be in win_alloc_first().
-+  */
-+     void
-+ win_alloc_aucmd_win()
-+ {
-+     aucmd_win = win_alloc(NULL, TRUE);
-+     if (aucmd_win != NULL)
-+     {
-+ 	win_init_some(aucmd_win, curwin);
-+ # ifdef FEAT_SCROLLBIND
-+ 	aucmd_win->w_p_scb = FALSE;
-+ # endif
-+ 	new_frame(aucmd_win);
-+     }
-+ }
-+ #endif
-+ 
-  /*
-   * Allocate the first window or the first window in a new tab page.
-   * When "oldwin" is NULL create an empty buffer for it.
-***************
-*** 3208,3214 ****
-  win_alloc_firstwin(oldwin)
-      win_T	*oldwin;
-  {
-!     curwin = win_alloc(NULL);
-      if (oldwin == NULL)
-      {
-  	/* Very first window, need to create an empty buffer for it and
---- 3281,3287 ----
-  win_alloc_firstwin(oldwin)
-      win_T	*oldwin;
-  {
-!     curwin = win_alloc(NULL, FALSE);
-      if (oldwin == NULL)
-      {
-  	/* Very first window, need to create an empty buffer for it and
-***************
-*** 3236,3256 ****
-      }
-  #endif
-  
-!     topframe = (frame_T *)alloc_clear((unsigned)sizeof(frame_T));
-!     if (topframe == NULL)
-  	return FAIL;
-!     topframe->fr_layout = FR_LEAF;
-  #ifdef FEAT_VERTSPLIT
-      topframe->fr_width = Columns;
-  #endif
-      topframe->fr_height = Rows - p_ch;
-      topframe->fr_win = curwin;
--     curwin->w_frame = topframe;
-  
-      return OK;
-  }
-  
-  /*
-   * Initialize the window and frame size to the maximum.
-   */
-      void
---- 3309,3344 ----
-      }
-  #endif
-  
-!     new_frame(curwin);
-!     if (curwin->w_frame == NULL)
-  	return FAIL;
-!     topframe = curwin->w_frame;
-  #ifdef FEAT_VERTSPLIT
-      topframe->fr_width = Columns;
-  #endif
-      topframe->fr_height = Rows - p_ch;
-      topframe->fr_win = curwin;
-  
-      return OK;
-  }
-  
-  /*
-+  * Create a frame for window "wp".
-+  */
-+     static void
-+ new_frame(win_T *wp)
-+ {
-+     frame_T *frp = (frame_T *)alloc_clear((unsigned)sizeof(frame_T));
-+ 
-+     wp->w_frame = frp;
-+     if (frp != NULL)
-+     {
-+ 	frp->fr_layout = FR_LEAF;
-+ 	frp->fr_win = wp;
-+     }
-+ }
-+ 
-+ /*
-   * Initialize the window and frame size to the maximum.
-   */
-      void
-***************
-*** 3300,3309 ****
-  free_tabpage(tp)
-      tabpage_T	*tp;
-  {
-  # ifdef FEAT_DIFF
-      diff_clear(tp);
-  # endif
-!     clear_snapshot(tp);
-  #ifdef FEAT_EVAL
-      vars_clear(&tp->tp_vars.dv_hashtab);	/* free all t: variables */
-  #endif
---- 3388,3400 ----
-  free_tabpage(tp)
-      tabpage_T	*tp;
-  {
-+     int idx;
-+ 
-  # ifdef FEAT_DIFF
-      diff_clear(tp);
-  # endif
-!     for (idx = 0; idx < SNAP_COUNT; ++idx)
-! 	clear_snapshot(tp, idx);
-  #ifdef FEAT_EVAL
-      vars_clear(&tp->tp_vars.dv_hashtab);	/* free all t: variables */
-  #endif
-***************
-*** 3370,3381 ****
-  #if defined(FEAT_GUI)
-  	/* When 'guioptions' includes 'L' or 'R' may have to remove or add
-  	 * scrollbars.  Have to update them anyway. */
-! 	if (gui.in_use && starting == 0)
-! 	{
-! 	    gui_init_which_components(NULL);
-! 	    gui_update_scrollbars(TRUE);
-! 	}
-! 	need_mouse_correct = TRUE;
-  #endif
-  
-  	redraw_all_later(CLEAR);
---- 3461,3467 ----
-  #if defined(FEAT_GUI)
-  	/* When 'guioptions' includes 'L' or 'R' may have to remove or add
-  	 * scrollbars.  Have to update them anyway. */
-! 	gui_may_update_scrollbars();
-  #endif
-  
-  	redraw_all_later(CLEAR);
-***************
-*** 3593,3604 ****
-  #if defined(FEAT_GUI)
-      /* When 'guioptions' includes 'L' or 'R' may have to remove or add
-       * scrollbars.  Have to update them anyway. */
-!     if (gui.in_use && starting == 0)
-!     {
-! 	gui_init_which_components(NULL);
-! 	gui_update_scrollbars(TRUE);
-!     }
-!     need_mouse_correct = TRUE;
-  #endif
-  
-      redraw_all_later(CLEAR);
---- 3679,3685 ----
-  #if defined(FEAT_GUI)
-      /* When 'guioptions' includes 'L' or 'R' may have to remove or add
-       * scrollbars.  Have to update them anyway. */
-!     gui_may_update_scrollbars();
-  #endif
-  
-      redraw_all_later(CLEAR);
-***************
-*** 4150,4160 ****
-  #endif
-  
-  /*
-!  * allocate a window structure and link it in the window list
-   */
-      static win_T *
-! win_alloc(after)
-      win_T	*after UNUSED;
-  {
-      win_T	*newwin;
-  
---- 4231,4243 ----
-  #endif
-  
-  /*
-!  * Allocate a window structure and link it in the window list when "hidden" is
-!  * FALSE.
-   */
-      static win_T *
-! win_alloc(after, hidden)
-      win_T	*after UNUSED;
-+     int		hidden UNUSED;
-  {
-      win_T	*newwin;
-  
-***************
-*** 4180,4186 ****
-  	 * link the window in the window list
-  	 */
-  #ifdef FEAT_WINDOWS
-! 	win_append(after, newwin);
-  #endif
-  #ifdef FEAT_VERTSPLIT
-  	newwin->w_wincol = 0;
---- 4263,4270 ----
-  	 * link the window in the window list
-  	 */
-  #ifdef FEAT_WINDOWS
-! 	if (!hidden)
-! 	    win_append(after, newwin);
-  #endif
-  #ifdef FEAT_VERTSPLIT
-  	newwin->w_wincol = 0;
-***************
-*** 4314,4320 ****
-  /*
-   * Append window "wp" in the window list after window "after".
-   */
-!     static void
-  win_append(after, wp)
-      win_T	*after, *wp;
-  {
---- 4398,4404 ----
-  /*
-   * Append window "wp" in the window list after window "after".
-   */
-!     void
-  win_append(after, wp)
-      win_T	*after, *wp;
-  {
-***************
-*** 4340,4346 ****
-  /*
-   * Remove a window from the window list.
-   */
-!     static void
-  win_remove(wp, tp)
-      win_T	*wp;
-      tabpage_T	*tp;		/* tab page "win" is in, NULL for current */
---- 4424,4430 ----
-  /*
-   * Remove a window from the window list.
-   */
-!     void
-  win_remove(wp, tp)
-      win_T	*wp;
-      tabpage_T	*tp;		/* tab page "win" is in, NULL for current */
-***************
-*** 6040,6045 ****
---- 6124,6130 ----
-  /*
-   * Return TRUE if there is only one window (in the current tab page), not
-   * counting a help or preview window, unless it is the current window.
-+  * Does not count "aucmd_win".
-   */
-      int
-  only_one_window()
-***************
-*** 6053,6063 ****
-  	return FALSE;
-  
-      for (wp = firstwin; wp != NULL; wp = wp->w_next)
-! 	if (!((wp->w_buffer->b_help && !curbuf->b_help)
-  # ifdef FEAT_QUICKFIX
-  		    || wp->w_p_pvw
-  # endif
-  	     ) || wp == curwin)
-  	    ++count;
-      return (count <= 1);
-  #else
---- 6138,6152 ----
-  	return FALSE;
-  
-      for (wp = firstwin; wp != NULL; wp = wp->w_next)
-! 	if ((!((wp->w_buffer->b_help && !curbuf->b_help)
-  # ifdef FEAT_QUICKFIX
-  		    || wp->w_p_pvw
-  # endif
-  	     ) || wp == curwin)
-+ # ifdef FEAT_AUTOCMD
-+ 		&& wp != aucmd_win
-+ # endif
-+ 	   )
-  	    ++count;
-      return (count <= 1);
-  #else
-***************
-*** 6112,6122 ****
-  /*
-   * Create a snapshot of the current frame sizes.
-   */
-!     static void
-! make_snapshot()
-  {
-!     clear_snapshot(curtab);
-!     make_snapshot_rec(topframe, &curtab->tp_snapshot);
-  }
-  
-      static void
---- 6201,6212 ----
-  /*
-   * Create a snapshot of the current frame sizes.
-   */
-!     void
-! make_snapshot(idx)
-!     int idx;
-  {
-!     clear_snapshot(curtab, idx);
-!     make_snapshot_rec(topframe, &curtab->tp_snapshot[idx]);
-  }
-  
-      static void
-***************
-*** 6144,6154 ****
-   * Remove any existing snapshot.
-   */
-      static void
-! clear_snapshot(tp)
-      tabpage_T	*tp;
-  {
-!     clear_snapshot_rec(tp->tp_snapshot);
-!     tp->tp_snapshot = NULL;
-  }
-  
-      static void
---- 6234,6245 ----
-   * Remove any existing snapshot.
-   */
-      static void
-! clear_snapshot(tp, idx)
-      tabpage_T	*tp;
-+     int		idx;
-  {
-!     clear_snapshot_rec(tp->tp_snapshot[idx]);
-!     tp->tp_snapshot[idx] = NULL;
-  }
-  
-      static void
-***************
-*** 6168,6193 ****
-   * This is only done if the screen size didn't change and the window layout is
-   * still the same.
-   */
-!     static void
-! restore_snapshot(close_curwin)
-      int		close_curwin;	    /* closing current window */
-  {
-      win_T	*wp;
-  
-!     if (curtab->tp_snapshot != NULL
-  # ifdef FEAT_VERTSPLIT
-! 	    && curtab->tp_snapshot->fr_width == topframe->fr_width
-  # endif
-! 	    && curtab->tp_snapshot->fr_height == topframe->fr_height
-! 	    && check_snapshot_rec(curtab->tp_snapshot, topframe) == OK)
-      {
-! 	wp = restore_snapshot_rec(curtab->tp_snapshot, topframe);
-  	win_comp_pos();
-  	if (wp != NULL && close_curwin)
-  	    win_goto(wp);
-  	redraw_all_later(CLEAR);
-      }
-!     clear_snapshot(curtab);
-  }
-  
-  /*
---- 6259,6285 ----
-   * This is only done if the screen size didn't change and the window layout is
-   * still the same.
-   */
-!     void
-! restore_snapshot(idx, close_curwin)
-!     int		idx;
-      int		close_curwin;	    /* closing current window */
-  {
-      win_T	*wp;
-  
-!     if (curtab->tp_snapshot[idx] != NULL
-  # ifdef FEAT_VERTSPLIT
-! 	    && curtab->tp_snapshot[idx]->fr_width == topframe->fr_width
-  # endif
-! 	    && curtab->tp_snapshot[idx]->fr_height == topframe->fr_height
-! 	    && check_snapshot_rec(curtab->tp_snapshot[idx], topframe) == OK)
-      {
-! 	wp = restore_snapshot_rec(curtab->tp_snapshot[idx], topframe);
-  	win_comp_pos();
-  	if (wp != NULL && close_curwin)
-  	    win_goto(wp);
-  	redraw_all_later(CLEAR);
-      }
-!     clear_snapshot(curtab, idx);
-  }
-  
-  /*
-*** ../vim-7.2.202/src/version.c	2009-06-16 15:35:46.000000000 +0200
---- src/version.c	2009-06-16 15:37:16.000000000 +0200
-***************
-*** 678,679 ****
---- 678,681 ----
-  {   /* Add new patch number below this line */
-+ /**/
-+     203,
-  /**/
-
--- 
-How To Keep A Healthy Level Of Insanity:
-15. Five days in advance, tell your friends you can't attend their
-    party because you're not in the mood.
-
- /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
-///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
-\\\        download, build and distribute -- http://www.A-A-P.org        ///
- \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///