changeset 766:f0d0d3d3a1e2

updated for version 7.0225
author vimboss
date Wed, 15 Mar 2006 22:59:18 +0000
parents 335444c09581
children 6c8a16911e94
files runtime/autoload/netrw.vim runtime/doc/autocmd.txt runtime/doc/diff.txt runtime/doc/options.txt runtime/doc/pi_netrw.txt runtime/doc/tags src/auto/configure src/configure.in src/gui_mac.c src/misc2.c src/os_mac_conv.c src/popupmenu.c src/screen.c src/testdir/Make_amiga.mak src/testdir/Make_dos.mak src/undo.c src/version.h
diffstat 17 files changed, 186 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/netrw.vim
+++ b/runtime/autoload/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
 "            AUTOLOAD PORTION
-" Date:		Mar 13, 2006
-" Version:	80
+" Date:		Mar 14, 2006
+" Version:	81
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
@@ -23,7 +23,7 @@
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v80"
+let g:loaded_netrw = "v81"
 if v:version < 700
  echohl WarningMsg | echo "***netrw*** you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw" | echohl None
  finish
@@ -2803,21 +2803,7 @@ fun! netrw#DirBrowse(dirname)
   let s:last_sort_by= g:netrw_sort_by
 
   " set up ShellCmdPost handling.  Append current buffer to browselist
-  if !exists("s:netrw_browselist")
-   let s:netrw_browselist= []
-  endif
-  if g:netrw_fastbrowse <= 1 && (empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1])
-   call add(s:netrw_browselist,bufnr("%"))
-"   call Decho("browselist=".string(s:netrw_browselist))
-  endif
-  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
-"   call Decho("setting up local-browser shell command refresh")
-   let s:netrw_browser_shellcmd= 1
-   augroup AuNetrwShellCmd
-    au!
-    au ShellCmdPost *	call s:LocalBrowseShellCmdRefresh()
-   augroup END
-  endif
+  call s:LocalFastBrowser()
 
   " get the new directory name
   if has("win32") || has("win95") || has("win64") || has("win16")
@@ -3369,6 +3355,47 @@ fun! s:LocalBrowseRename(path) range
 endfun
 
 " ---------------------------------------------------------------------
+" LocalFastBrowser: handles setting up/taking down fast browsing for the {{{2
+"                   local browser
+fun! s:LocalFastBrowser()
+"  call Dfunc("LocalFastBrowser()")
+
+  " initialize browselist, a list of buffer numbers that the local browser has used
+  if !exists("s:netrw_browselist")
+   let s:netrw_browselist= []
+  endif
+
+  " append current buffer to fastbrowse list
+  if g:netrw_fastbrowse <= 1 && (empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1])
+   call add(s:netrw_browselist,bufnr("%"))
+"   call Decho("browselist=".string(s:netrw_browselist))
+  endif
+
+  " enable autocmd events to handle refreshing/removing local browser buffers
+  "    If local browse buffer is currently showing: refresh it
+  "    If local browse buffer is currently hidden : wipe it
+  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
+"   call Decho("setting up local-browser shell command refresh")
+   let s:netrw_browser_shellcmd= 1
+   augroup AuNetrwShellCmd
+    au!
+    au ShellCmdPost,FocusGained *	call s:LocalBrowseShellCmdRefresh()
+   augroup END
+
+  " user must have changed fastbrowse to its fast setting, so remove
+  " the associated autocmd events
+  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
+   unlet s:netrw_browser_shellcmd
+   augroup AuNetrwShellCmd
+    au!
+   augroup END
+   augroup! AuNetrwShellCmd
+  endif
+
+"  call Dret("LocalFastBrowser")
+endfun
+
+" ---------------------------------------------------------------------
 " LocalObtain: copy selected file to current working directory {{{2
 fun! s:LocalObtain()
 "  call Dfunc("LocalObtain()")
@@ -3883,6 +3910,7 @@ fun! s:NetOptionSave()
   let w:cinokeep  = &cino
   let w:comkeep   = &com
   let w:cpokeep   = &cpo
+  let w:hidkeep   = &hidden
   let w:magickeep = &magic
   if !g:netrw_keepdir
    let w:dirkeep  = getcwd()
@@ -3894,7 +3922,7 @@ fun! s:NetOptionSave()
   setlocal cino =
   setlocal com  =
   setlocal cpo -=aA
-  setlocal nocin noai noci magic nospell fo=nroql2
+  setlocal nocin noai noci magic nospell fo=nroql2 nohid
   setlocal tw   =0
   setlocal report=10000
   if has("win32") && !has("win95")
@@ -3926,6 +3954,7 @@ fun! s:NetOptionRestore()
   if exists("w:dirkeep")  |exe "lcd ".w:dirkeep        |unlet w:dirkeep  |endif
   if exists("w:fokeep")   |let &fo     = w:fokeep      |unlet w:fokeep   |endif
   if exists("w:gdkeep")   |let &gd     = w:gdkeep      |unlet w:gdkeep   |endif
+  if exists("w:hidkeep")  |let &hidden = w:hidkeep     |unlet w:hidkeep  |endif
   if exists("w:magic")    |let &magic  = w:magic       |unlet w:magic    |endif
   if exists("w:repkeep")  |let &report = w:repkeep     |unlet w:repkeep  |endif
   if exists("w:spellkeep")|let &spell  = w:spellkeep   |unlet w:spellkeep|endif
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.0aa.  Last change: 2006 Mar 10
+*autocmd.txt*   For Vim version 7.0aa.  Last change: 2006 Mar 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -270,6 +270,7 @@ Name			triggered by ~
 
 	Various
 |FileChangedShell|	Vim notices that a file changed since editing started
+|FileChangedShellPost|	After handling a file changed since editing started
 |FileChangedRO|		before making the first change to a read-only file
 
 |ShellCmdPost|		after executing a shell command
@@ -279,6 +280,7 @@ Name			triggered by ~
 |SpellFileMissing|	a spell file is used but it can't be found
 |SourcePre|		before sourcing a Vim script
 
+|VimResized|		after the Vim window size changed
 |FocusGained|		Vim got input focus
 |FocusLost|		Vim lost input focus
 |CursorHold|		the user doesn't press a key for a while
@@ -537,6 +539,9 @@ FileChangedShell		When Vim notices that 
 				commands for the FileChangedShell event no
 				other FileChangedShell event will be
 				triggered.
+							*FileChangedShellPost*
+FileChangedShellPost		After handling a file that was changed outside
+				of Vim.  Can be used to update the statusline.
 							*FileEncoding*
 FileEncoding			Obsolete.  It still works and is equivalent
 				to |EncodingChanged|.
@@ -764,6 +769,10 @@ VimLeavePre			Before exiting Vim, just b
 				Mostly useful with a "*" pattern. >
 	:autocmd VimLeavePre * call CleanupStuff()
 <				To detect an abnormal exit use |v:dying|.
+							*VimResized*
+VimResized			After the Vim window was resized, thus 'lines'
+				and/or 'columns' changed.  Not when starting
+				up though.
 							*WinEnter*
 WinEnter			After entering another window.  Not done for
 				the first window, when Vim has just started.
--- a/runtime/doc/diff.txt
+++ b/runtime/doc/diff.txt
@@ -1,4 +1,4 @@
-*diff.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 14
+*diff.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -51,6 +51,8 @@ splits add the |-o| argument: >
 
 	vimdiff -o file1 file2 [file3]
 
+If you always prefer horizontal splits include "horizontal" in 'diffopt'.
+
 In each of the edited files these options are set:
 
 	'diff'		on
@@ -58,7 +60,7 @@ In each of the edited files these option
 	'scrollopt'	includes "hor"
 	'wrap'		off
 	'foldmethod'	"diff"
-	'foldcolumn'	2
+	'foldcolumn'	value from 'diffopt', default is 2
 
 These options are set local to the window.  When editing another file they are
 reset to the global value.
@@ -107,7 +109,9 @@ To make these commands use a vertical sp
 
 	:vert diffsplit main.c~
 	:vert diffpatch /tmp/diff
-<
+
+If you always prefer a vertical split include "vertical" in 'diffopt'.
+
 							*E96*
 There can be up to four buffers with 'diff' set.
 
@@ -378,8 +382,8 @@ will have the same effect.  These variab
 
 Example (this does the same as 'patchexpr' being empty): >
 
-	let patchexpr=MyPatch()
-	function MyPatch
+	set patchexpr=MyPatch()
+	function MyPatch()
 	   :call system("patch -o " . v:fname_out . " " . v:fname_in .
 	   \  " < " . v:fname_diff)
 	endfunction
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2006 Mar 12
+*options.txt*	For Vim version 7.0aa.  Last change: 2006 Mar 15
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1624,6 +1624,8 @@ A jump table for the options with a shor
 						*'completeopt'* *'cot'*
 'completeopt' 'cot'	string	(default: "menu,preview")
 			global
+			{not available when compiled without the
+			|+insert_expand| feature}
 			{not in Vi}
 	A comma separated list of options for Insert mode completion
 	|ins-completion|.  The supported values are:
@@ -1644,7 +1646,6 @@ A jump table for the options with a shor
 	   preview  Show extra information about the currently selected
 	   	    completion in the preview window.
 
-
 				*'confirm'* *'cf'* *'noconfirm'* *'nocf'*
 'confirm' 'cf'		boolean (default off)
 			global
@@ -2184,11 +2185,20 @@ A jump table for the options with a shor
 				exactly.  It should ignore adding trailing
 				white space, but not leading white space.
 
+		horizontal	Start diff mode with horizontal splits (unless
+				explicitly specified otherwise).
+
+		vertical	Start diff mode with vertical splits (unless
+				explicitly specified otherwise).
+
+		foldcolumn:{n}	Set the 'foldcolumn' option to {n} when
+				starting diff mode.  Without this 2 is used.
+
 	Examples: >
 
 		:set diffopt=filler,context:4
 		:set diffopt=
-		:set diffopt=filler
+		:set diffopt=filler,foldcolumn:3
 <
 				     *'digraph'* *'dg'* *'nodigraph'* *'nodg'*
 'digraph' 'dg'		boolean	(default off)
@@ -5019,6 +5029,17 @@ A jump table for the options with a shor
 			global
 	When on a ":" prompt is used in Ex mode.
 
+						*'pumheight'* *'ph'*
+'pumheight' 'ph'	number	(default 0)
+			global
+			{not available when compiled without the
+			|+insert_expand| feature}
+			{not in Vi}
+	Determines the maximum number of items to show in the popup menu.
+	When zero as much space as available is used.
+	|ins-completion-menu|.
+
+
 						*'quoteescape'* *'qe'*
 'quoteescape' 'qe'	string	(default "\")
 			local to buffer
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt*  For Vim version 7.0.  Last change: Mar 10, 2006
+*pi_netrw.txt*  For Vim version 7.0.  Last change: Mar 14, 2006
 
 		VIM REFERENCE MANUAL    by Charles E. Campbell, Jr.
 
@@ -1439,6 +1439,13 @@ which is loaded automatically at startup
 ==============================================================================
 11. History						*netrw-history* {{{1
 
+	v81: * FocusGained also used to refresh/wipe local browser directory
+	       buffers
+	     * (bugfix) netrw was leaving [Scratch] buffers behind when the
+	       the user had the "hidden" option set.  The 'hidden' option is
+	       now bypassed.
+	v80: * ShellCmdPost event used in conjunction with g:netrw_fastbrowse
+	       to refresh/wipe local browser directory buffers.
 	v79: * directories are now displayed with nowrap
 	     * (bugfix) if the column width was smaller than the largest
 	       file's name, then netrw would hang when using wide-listing
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -646,6 +646,7 @@
 'pex'	options.txt	/*'pex'*
 'pexpr'	options.txt	/*'pexpr'*
 'pfn'	options.txt	/*'pfn'*
+'ph'	options.txt	/*'ph'*
 'pheader'	options.txt	/*'pheader'*
 'pi'	options.txt	/*'pi'*
 'pm'	options.txt	/*'pm'*
@@ -665,6 +666,7 @@
 'printoptions'	options.txt	/*'printoptions'*
 'prompt'	options.txt	/*'prompt'*
 'pt'	options.txt	/*'pt'*
+'pumheight'	options.txt	/*'pumheight'*
 'pvh'	options.txt	/*'pvh'*
 'pvw'	options.txt	/*'pvw'*
 'qe'	options.txt	/*'qe'*
@@ -3979,6 +3981,7 @@ FileAppendPost	autocmd.txt	/*FileAppendP
 FileAppendPre	autocmd.txt	/*FileAppendPre*
 FileChangedRO	autocmd.txt	/*FileChangedRO*
 FileChangedShell	autocmd.txt	/*FileChangedShell*
+FileChangedShellPost	autocmd.txt	/*FileChangedShellPost*
 FileEncoding	autocmd.txt	/*FileEncoding*
 FileReadCmd	autocmd.txt	/*FileReadCmd*
 FileReadPost	autocmd.txt	/*FileReadPost*
@@ -4181,6 +4184,7 @@ View	starting.txt	/*View*
 VimEnter	autocmd.txt	/*VimEnter*
 VimLeave	autocmd.txt	/*VimLeave*
 VimLeavePre	autocmd.txt	/*VimLeavePre*
+VimResized	autocmd.txt	/*VimResized*
 Virtual-Replace-mode	insert.txt	/*Virtual-Replace-mode*
 VisVim	if_ole.txt	/*VisVim*
 Visual	visual.txt	/*Visual*
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -2838,6 +2838,10 @@ if test "`(uname) 2>/dev/null`" = Darwin
   echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 
+    if test x$prefix = xNONE; then
+    prefix=/Applications
+  fi
+
   echo "$as_me:$LINENO: checking --disable-darwin argument" >&5
 echo $ECHO_N "checking --disable-darwin argument... $ECHO_C" >&6
   # Check whether --enable-darwin or --disable-darwin was given.
--- a/src/configure.in
+++ b/src/configure.in
@@ -85,6 +85,11 @@ AC_MSG_CHECKING([for Darwin (Mac OS X)])
 if test "`(uname) 2>/dev/null`" = Darwin; then
   AC_MSG_RESULT(yes)
 
+  dnl Default install directory is not /usr/local
+  if test x$prefix = xNONE; then
+    prefix=/Applications
+  fi
+
   AC_MSG_CHECKING(--disable-darwin argument)
   AC_ARG_ENABLE(darwin,
 	  [  --disable-darwin        Disable Darwin (Mac OS X) support.],
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -52,8 +52,8 @@
 static EventHandlerUPP mouseWheelHandlerUPP = NULL;
 SInt32 gMacSystemVersion;
 
-#if defined(FEAT_MBYTE)
-#define USE_CARBONKEYHANDLER
+#ifdef MACOS_CONVERT
+# define USE_CARBONKEYHANDLER
 static EventHandlerUPP keyEventHandlerUPP = NULL;
 #endif
 
@@ -130,7 +130,7 @@ static struct
     Boolean isPanelVisible;
 } gFontPanelInfo = { 0, 0, 0, false };
 
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
 # define USE_ATSUI_DRAWING
 ATSUStyle   gFontStyle;
 Boolean	    gIsFontFallbackSet;
@@ -419,7 +419,7 @@ points_to_pixels(char_u *str, char_u **e
     return pixels;
 }
 
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
 /*
  * Deletes all traces of any Windows-style mnemonic text (including any
  * parentheses) from a menu item and returns the cleaned menu item title.
@@ -4437,7 +4437,7 @@ clip_mch_request_selection(VimClipboard 
 #endif
 	tempclip[scrapSize] = 0;
 
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
 	/* Convert from utf-16 (clipboard) */
 	size_t encLen = 0;
 	char_u *to = mac_utf16_to_enc((UniChar *)tempclip, scrapSize, &encLen);
@@ -4510,7 +4510,7 @@ clip_mch_set_selection(VimClipboard *cbd
 
     type = clip_convert_selection(&str, (long_u *) &scrapSize, cbd);
 
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
     size_t utf16_len = 0;
     UniChar *to = mac_enc_to_utf16(str, scrapSize, &utf16_len);
     if (to)
@@ -4628,7 +4628,7 @@ gui_mch_add_menu(vimmenu_T *menu, int id
 	menu_after_me = hierMenu;
 
     /* Convert the name */
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
     name = menu_title_removing_mnemonic(menu);
 #else
     name = C2Pascal_save(menu->dname);
@@ -4721,7 +4721,7 @@ gui_mch_add_menu_item(vimmenu_T *menu, i
        for older OS call GetMenuItemData (menu, item, isCommandID?, data) */
 
     /* Convert the name */
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
     name = menu_title_removing_mnemonic(menu);
 #else
     name = C2Pascal_save(menu->dname);
@@ -5745,7 +5745,7 @@ gui_mch_settitle(char_u *title, char_u *
     /* TODO: Get vim to make sure maxlen (from p_titlelen) is smaller
      *       that 256. Even better get it to fit nicely in the titlebar.
      */
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
     CFStringRef windowTitle;
     size_t	windowTitleLen;
 #else
@@ -5755,7 +5755,7 @@ gui_mch_settitle(char_u *title, char_u *
     if (title == NULL)		/* nothing to do */
 	return;
 
-#if defined(FEAT_MBYTE)
+#ifdef MACOS_CONVERT
     windowTitleLen = STRLEN(title);
     windowTitle  = mac_enc_to_cfstring(title, windowTitleLen);
 
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -964,8 +964,10 @@ free_all_mem()
 
 #ifdef FEAT_WINDOWS
     /* close all tabs and windows */
-    do_cmdline_cmd((char_u *)"tabonly!");
-    do_cmdline_cmd((char_u *)"only!");
+    if (first_tabpage->tp_next != NULL)
+	do_cmdline_cmd((char_u *)"tabonly!");
+    if (firstwin != lastwin)
+	do_cmdline_cmd((char_u *)"only!");
 #endif
 
 # if defined(FEAT_SPELL)
@@ -1077,6 +1079,10 @@ free_all_mem()
 
     reset_last_sourcing();
 
+#ifdef FEAT_WINDOWS
+    vim_free(first_tabpage);
+#endif
+
 # ifdef UNIX
     /* Machine-specific free. */
     mch_free_mem();
--- a/src/os_mac_conv.c
+++ b/src/os_mac_conv.c
@@ -16,7 +16,14 @@
 #define NO_X11_INCLUDES
 #include "vim.h"
 
-#ifdef FEAT_MBYTE
+#if defined(MACOS_CONVERT) || defined(PROTO)
+# ifdef PROTO
+/* A few dummy types to be able to generate function prototypes. */
+typedef int UniChar;
+typedef int *TECObjectRef;
+typedef int CFStringRef;
+# endif
+
 static char_u	    *mac_utf16_to_utf8 __ARGS((UniChar *from, size_t fromLen, size_t *actualLen));
 static UniChar	    *mac_utf8_to_utf16 __ARGS((char_u *from, size_t fromLen, size_t *actualLen));
 
@@ -477,7 +484,7 @@ mac_precompose_path(decompPath, decompLe
 /*
  * Converts from UTF-16 UniChars to precomposed UTF-8
  */
-    char_u *
+    static char_u *
 mac_utf16_to_utf8(from, fromLen, actualLen)
     UniChar *from;
     size_t fromLen;
@@ -517,7 +524,7 @@ mac_utf16_to_utf8(from, fromLen, actualL
 /*
  * Converts from UTF-8 to UTF-16 UniChars
  */
-    UniChar *
+    static UniChar *
 mac_utf8_to_utf16(from, fromLen, actualLen)
     char_u *from;
     size_t fromLen;
@@ -548,4 +555,4 @@ mac_utf8_to_utf16(from, fromLen, actualL
 
     return result;
 }
-#endif /* FEAT_MBYTE */
+#endif /* MACOS_CONVERT */
--- a/src/popupmenu.c
+++ b/src/popupmenu.c
@@ -87,11 +87,13 @@ redo:
 	pum_height = size;
     else
 	pum_height = PUM_DEF_HEIGHT;
+    if (p_ph > 0 && pum_height > p_ph)
+	pum_height = p_ph;
 
     /* Put the pum below "row" if possible.  If there are few lines decide on
      * where there is more room. */
-    if (row >= cmdline_row - top_clear - pum_height
-	    && row > (cmdline_row - top_clear - height) / 2)
+    if (row >= cmdline_row - pum_height
+			      && row > (cmdline_row - top_clear - height) / 2)
     {
 	/* pum above "row" */
 	if (row >= size)
@@ -104,6 +106,11 @@ redo:
 	    pum_row = 0;
 	    pum_height = row;
 	}
+	if (p_ph > 0 && pum_height > p_ph)
+	{
+	    pum_row += pum_height - p_ph;
+	    pum_height = p_ph;
+	}
     }
     else
     {
@@ -113,6 +120,8 @@ redo:
 	    pum_height = cmdline_row - pum_row;
 	else
 	    pum_height = size;
+	if (p_ph > 0 && pum_height > p_ph)
+	    pum_height = p_ph;
     }
 
     /* don't display when we only have room for one line */
@@ -214,7 +223,7 @@ pum_redraw()
     int		i;
     int		idx;
     char_u	*s;
-    char_u	*p;
+    char_u	*p = NULL;
     int		totwidth, width, w;
     int		thumb_pos = 0;
     int		thumb_heigth = 1;
@@ -330,6 +339,7 @@ pum_set_selected(n)
     int	    n;
 {
     int	    resized = FALSE;
+    int	    context = pum_height / 2;
 
     pum_selected = n;
 
@@ -364,20 +374,22 @@ pum_set_selected(n)
 		pum_first = pum_selected - pum_height + 1;
 	}
 
-	if (pum_height > 6)
+	/* Give a few lines of context when possible. */
+	if (context > 3)
+	    context = 3;
+	if (pum_height > 2)
 	{
-	    /* Give three lines of context when possible. */
-	    if (pum_first > pum_selected - 3)
+	    if (pum_first > pum_selected - context)
 	    {
 		/* scroll down */
-		pum_first = pum_selected - 3;
+		pum_first = pum_selected - context;
 		if (pum_first < 0)
 		    pum_first = 0;
 	    }
-	    else if (pum_first < pum_selected + 3 - pum_height + 1)
+	    else if (pum_first < pum_selected + context - pum_height + 1)
 	    {
 		/* scroll up */
-		pum_first = pum_selected + 3 - pum_height + 1;
+		pum_first = pum_selected + context - pum_height + 1;
 	    }
 	}
 
@@ -479,6 +491,12 @@ pum_set_selected(n)
 
 			if (win_valid(curwin_save))
 			    win_enter(curwin_save, TRUE);
+
+			/* May need to update the screen again when there are
+			 * autocommands involved. */
+			pum_do_redraw = TRUE;
+			update_screen(0);
+			pum_do_redraw = FALSE;
 		    }
 		}
 	    }
--- a/src/screen.c
+++ b/src/screen.c
@@ -7305,6 +7305,11 @@ screenalloc(clear)
 #endif
 
     entered = FALSE;
+
+#ifdef FEAT_AUTOCMD
+    if (starting == 0)
+	apply_autocmds(EVENT_VIMRESIZED, NULL, NULL, FALSE, curbuf);
+#endif
 }
 
     void
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -24,7 +24,8 @@ SCRIPTS = test1.out test3.out test4.out 
 		test38.out test39.out test40.out test41.out test42.out \
 		test43.out test44.out test45.out test46.out test47.out \
 		test48.out test51.out test53.out test54.out test55.out \
-		test56.out test57.out test58.out test59.out test60.out
+		test56.out test57.out test58.out test59.out test60.out \
+		test61.out
 
 .SUFFIXES: .in .out
 
@@ -104,3 +105,4 @@ test57.out: test57.in
 test58.out: test58.in
 test59.out: test59.in
 test60.out: test60.in
+test61.out: test61.in
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -19,7 +19,7 @@ SCRIPTS16 =	test1.out test19.out test20.
 		test44.out test45.out test46.out test47.out \
 		test48.out test51.out test53.out test54.out \
 		test55.out test56.out test57.out test58.out test59.out \
-		test60.out
+		test60.out test61.out
 
 SCRIPTS =	test3.out test4.out test5.out test6.out test7.out \
 		test8.out test9.out test11.out test13.out test14.out \
--- a/src/undo.c
+++ b/src/undo.c
@@ -295,6 +295,8 @@ u_savecommon(top, bot, newbot)
 	    if (uhp == NULL)
 		goto nomem;
 	}
+	else
+	    uhp = NULL;
 
 	/*
 	 * If we undid more than we redid, move the entry lists before and
@@ -326,7 +328,7 @@ u_savecommon(top, bot, newbot)
 	    }
 	}
 
-	if (p_ul < 0)		/* no undo at all */
+	if (uhp == NULL)		/* no undo at all */
 	{
 	    if (old_curhead != NULL)
 		u_freebranch(curbuf, old_curhead, NULL);
@@ -655,6 +657,10 @@ undo_time(step, sec)
     int		    dosec = sec;
     int		    above = FALSE;
 
+    /* First make sure the current undoable change is synced. */
+    if (curbuf->b_u_synced == FALSE)
+	u_sync();
+
     u_newcount = 0;
     u_oldcount = 0;
     if (curbuf->b_ml.ml_flags & ML_EMPTY)
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 14)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 14, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 15)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 15, compiled "