changeset 26:404aac550f35 v7.0017

updated for version 7.0017
author vimboss
date Thu, 07 Oct 2004 21:02:47 +0000
parents 8cde1a064c7c
children ce185ac4a252
files runtime/doc/autocmd.txt runtime/doc/change.txt runtime/doc/digraph.txt runtime/doc/eval.txt runtime/doc/if_mzsch.txt runtime/doc/options.txt runtime/doc/pi_netrw.txt runtime/doc/syntax.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/usr_41.txt runtime/doc/version7.txt runtime/filetype.vim runtime/indent/eiffel.vim runtime/indent/java.vim runtime/menu.vim runtime/plugin/netrw.vim runtime/scripts.vim runtime/syntax/lss.vim runtime/syntax/pccts.vim runtime/syntax/pod.vim runtime/syntax/samba.vim runtime/syntax/scheme.vim src/GvimExt/gvimext.cpp src/Makefile src/digraph.c src/eval.c src/fileio.c src/globals.h src/gui_gtk.c src/gui_gtk_x11.c src/gui_mac.c src/gui_w32.c src/gui_w48.c src/mbyte.c src/menu.c src/os_mswin.c src/os_w32exe.c src/os_win32.c src/proto/gui_kde.pro src/proto/gui_kde_x11.pro src/proto/mbyte.pro src/proto/os_win32.pro src/proto/syntax.pro src/quickfix.c src/screen.c src/structs.h src/syntax.c src/testdir/test.ok src/version.c src/version.h src/vim.h
diffstat 52 files changed, 958 insertions(+), 588 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.0aa.  Last change: 2004 Aug 30
+*autocmd.txt*   For Vim version 7.0aa.  Last change: 2004 Sep 17
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -234,22 +234,26 @@ BufWriteCmd			Before writing the whole b
 				should not be changed.  |Cmd-event|
 							*FileWritePre*
 FileWritePre			Before writing to a file, when not writing the
-				whole buffer.
+				whole buffer.  Use the '[ and '] marks for the
+				range of lines.
 							*FileWritePost*
 FileWritePost			After writing to a file, when not writing the
 				whole buffer.
 							*FileWriteCmd*
 FileWriteCmd			Before writing to a file, when not writing the
 				whole buffer.  Should do the writing to the
-				file.  Should not change the buffer.
+				file.  Should not change the buffer.  Use the
+				'[ and '] marks for the range of lines.
 				|Cmd-event|
 							*FileAppendPre*
-FileAppendPre			Before appending to a file.
+FileAppendPre			Before appending to a file.  Use the '[ and ']
+				marks for the range of lines.
 							*FileAppendPost*
 FileAppendPost			After appending to a file.
 							*FileAppendCmd*
 FileAppendCmd			Before appending to a file.  Should do the
-				appending to the file. |Cmd-event|
+				appending to the file.  Use the '[ and ']
+				marks for the range of lines.|Cmd-event|
 							*FilterWritePre*
 FilterWritePre			Before writing a file for a filter command or
 				making a diff.
@@ -738,8 +742,9 @@ The '[ and '] marks have a special posit
   the new lines will be inserted.
 - Before the *ReadPost event the '[ mark is set to the first line that was
   just read, the '] mark to the last line.
-- Before executing the *WritePre and *AppendPre autocommands the '[ mark is
-  set to the first line that will be written, the '] mark to the last line.
+- Before executing the *WriteCmd, *WritePre and *AppendPre autocommands the '[
+  mark is set to the first line that will be written, the '] mark to the last
+  line.
 Careful: '[ and '] change when using commands that change the buffer.
 
 In commands which expect a file name, you can use "<afile>" for the file name
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.0aa.  Last change: 2004 Jun 16
+*change.txt*    For Vim version 7.0aa.  Last change: 2004 Sep 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -659,7 +659,7 @@ magic	nomagic	  action    ~
       \0	  replaced with the whole matched pattern	   *\0* *s/\0*
       \1	  replaced with the matched pattern in the first
 		  pair of ()					     *s/\1*
-      \2	  replaced with the matched pattern in the first
+      \2	  replaced with the matched pattern in the second
 		  pair of ()					     *s/\2*
       ..	  ..						     *s/\3*
       \9	  replaced with the matched pattern in the ninth
--- a/runtime/doc/digraph.txt
+++ b/runtime/doc/digraph.txt
@@ -1,4 +1,4 @@
-*digraph.txt*   For Vim version 7.0aa.  Last change: 2001 Sep 03
+*digraph.txt*   For Vim version 7.0aa.  Last change: 2004 Oct 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -28,7 +28,8 @@ 1. Defining digraphs					*digraphs-defin
 							*E104* *E39*
 :dig[raphs] {char1}{char2} {number} ...
 			Add digraph {char1}{char2} to the list.  {number} is
-			the decimal representation of the character.
+			the decimal representation of the character.  Normally
+			it is the Unicode character, see |digraph-encoding|.
 			Example: >
 	:digr e: 235 a: 228
 <			Avoid defining a digraph with '_' (underscore) as the
@@ -48,7 +49,24 @@ In the middle of each column is the resu
 if you look at it on a system that does not support digraphs or if you print
 this file.
 
-The decimal number is the number of the character.
+							*digraph-encoding*
+The decimal number normally is the Unicode number of the character.  Note that
+the meaning doesn't change when 'encoding' changes.  The character will be
+converted from Unicode to 'encoding' when needed.  This does require the
+conversion to be available, it might fail.
+
+When Vim was compiled without the +multi_byte feature, you need to specify the
+character in the encoding given with 'encoding'.  You might want to use
+something like this: >
+
+	if has("multi_byte")
+		digraph oe 339
+	elseif &encoding == "iso-8859-15"
+		digraph oe 189
+	endif
+
+This defines the "oe" digraph for a character that is number 339 in Unicode
+and 189 in latin9 (iso-8859-15).
 
 ==============================================================================
 2. Using digraphs					*digraphs-use*
@@ -142,6 +160,9 @@ Example: a: is ä  and o: is ö
 These are the RFC1345 digraphs for the one-byte characters.  See the output of
 ":digraphs" for the others.  The characters above 255 are only available when
 Vim was compiled with the |+multi_byte| feature.
+
+Exception: RFC1345 doesn't specify the euro sign.  In Vim the digraph =e was
+added for this.
 							*digraph-table*
 char  digraph	hex	dec	official name ~
 ^@	NU	0x00	  0	NULL (NUL)
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2004 Sep 13
+*eval.txt*      For Vim version 7.0aa.  Last change: 2004 Oct 06
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -125,8 +125,8 @@ Expression syntax summary, from least to
 |expr8|	expr9[expr1]		index in String
 
 |expr9|	number			number constant
-	"string"		string constant
-	'string'		literal string constant
+	"string"		string constant, backslash is special
+	'string'		string constant
 	&option			option value
 	(expr1)			nested expression
 	variable		internal variable
@@ -355,13 +355,18 @@ Note that "\000" and "\x00" force the en
 
 literal-string						*literal-string* *E115*
 ---------------
-'string'		literal string constant		*expr-'*
+'string'		string constant			*expr-'*
 
 Note that single quotes are used.
 
-This string is taken literally.  No backslashes are removed or have a special
-meaning.  A literal-string cannot contain a single quote.  Use a normal string
-for that.
+This string is taken as it is.  No backslashes are removed or have a special
+meaning.  A literal-string cannot contain a single quote.  Use a normal,
+double-quoted string for that.
+
+Single quoted strings are useful for patterns, so that backslashes do not need
+to be doubled.  These two commands are equivalent: >
+	if a =~ "\\s*"
+	if a =~ '\s*'
 
 
 option						*expr-option* *E112* *E113*
--- a/runtime/doc/if_mzsch.txt
+++ b/runtime/doc/if_mzsch.txt
@@ -79,9 +79,33 @@ All the examples below assume this namin
 this again for every buffer.
 
 The auto-instantiation can be achieved with autocommands, e.g. you can put
-something like this in your .vimrc: >
-    au VimEnter,BufNew,BufNewFile,BufAdd,BufReadPre *
-	\:mz (require (prefix vim- vimext)
+something like this in your .vimrc (EOFs should not have indentation): >
+    function s:MzRequire()
+	if has("mzscheme")
+	    :mz << EOF
+	    (require (prefix vim- vimext))
+	    (let ((buf (vim-get-buff-by-name (vim-eval "expand(\"<afile>\")"))))
+	      (when (and buf (not (eq? buf (vim-curr-buff))))
+		(parameterize ((current-namespace (vim-get-buff-namespace buf)))
+		  (namespace-attach-module vim-global-namespace 'vimext)
+		  (namespace-require '(prefix vim vimext)))))
+    EOF
+	endif
+    endfunction
+
+    function s:MzStartup()
+	if has("mzscheme")
+	    au BufNew,BufNewFile,BufAdd,BufReadPre * :call s:MzRequire()
+	    :mz << EOF
+	    (current-library-collection-paths
+		(cons
+		    (build-path (find-system-path 'addon-dir) (version) "collects")
+		    (current-library-collection-paths)))
+    EOF
+	endif
+    endfunction
+
+    call s:MzStartup()
 <
 
 The global namespace just instantiated this module with the prefix "vimext:".
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0aa.  Last change: 2004 Sep 04
+*options.txt*	For Vim version 7.0aa.  Last change: 2004 Oct 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -954,6 +954,12 @@ A jump table for the options with a shor
 	prefer using ".bak", but make sure that you don't have files with
 	".bak" that you want to keep.
 
+	If you like to keep a lot of backups, you could use a BufWritePre
+	autocommand to change 'backupext' just before writing the file to
+	include a timestamp. >
+		:au BufWritePre * let &bex = '-' . strftime("%Y%b%d%X") . '~'
+<	Use 'backupdir' to put the backup in a different directory.
+
 						*'backupskip'* *'bsk'*
 'backupskip' 'bsk'	string	(default: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*")
 			global
--- a/runtime/doc/pi_netrw.txt
+++ b/runtime/doc/pi_netrw.txt
@@ -1,4 +1,4 @@
-*pi_netrw.txt  For Vim version 6.2.  Last change: Sep 10, 2004
+*pi_netrw.txt  For Vim version 6.2.  Last change: Sep 13, 2004
 
 
 		VIM REFERENCE MANUAL    by Charles E. Campbell, Jr.
@@ -587,10 +587,14 @@ NETRW BROWSER VARIABLES					*netrw-brows
 					"directories" and "files" in the
 					listing.  This pattern is used to
 					remove such embedded messages.
-	g:netrw_keepdir			keep current directory immune from the
-					browsing directory.  The browsing
-					directory is contained in b:netrw_curdir
+	g:netrw_keepdir			=1 (default) keep current directory
+					immune from the browsing directory.
+					=0 keep the current directory the
+					same as the browsing directory.
+					The browsing directory is contained in
+					b:netrw_curdir
 	g:netrw_list_cmd		command for listing remote directories
+	g:netrw_longlist		if =1, then long listing will be default
 	g:netrw_ftp_list_cmd		options for passing along to ftp for
 					directory listing.  Defaults:
 					 unix or g:netrw_cygwin set: : "ls -lF"
@@ -601,6 +605,12 @@ NETRW BROWSER VARIABLES					*netrw-brows
 	g:netrw_local_rmdir		remove directory command (rmdir)
 	g:netrw_local_rename		rename file/directory command
 					unix-default: rm    win32-default: ren
+	g:netrw_maxfilenamelen		=32 by default, selected so as to make
+					long listings fit on 80 column displays.
+					If your screen is wider, and you have
+					file/directory names longer than 32 bytes,
+					you may set this option to keep listings
+					columnar.
 	g:netrw_mkdir_cmd		command for making a remote directory
 	g:netrw_rm_cmd			command for removing files
 	g:netrw_rmdir_cmd		command for removing directories
@@ -825,22 +835,26 @@ See the <plugin/NetrwFileHandlers.vim> f
 file with mozilla.
 
 
-MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY		*netrw-c*
+MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* *netrw-curdir*
 
-By default, g:netrw_keepdir is 0.  This setting means that the current
-directory will track the browsing directory.  However, setting g:netrw_keepdir
-to 1 (say, in your <.vimrc>) will keep the current directory independent
-of the browsing directory.  In that case, in order to make the two
-directories the same, use the "c" map (just type c).
+By default, g:netrw_keepdir is 1.  This setting means that the current
+directory will not track the browsing directory.  However, setting
+g:netrw_keepdir to 0 (say, in your <.vimrc>) will tell netrw to have the
+currently browsed directory be the current directory.
+
+With the default setting for g:netrw_keepdir, in order to make the two
+directories the same, use the "c" map (just type c).  That map will set
+the current directory to the current browsing directory.
 
 
-BOOKMARKING A DIRECTORY						*netrw-b*
+BOOKMARKING A DIRECTORY		*netrw-b* *netrw-bookmark* *netrw-bookmarks*
 
 One may easily "bookmark" a directory by using
 
 	{cnt}b
 
-Any count may be used.
+Any count may be used.  One may use viminfo's "!" option to retain bookmarks
+between vim sessions.
 
 
 CHANGING TO A BOOKMARKED DIRECTORY				*netrw-B*
@@ -913,7 +927,10 @@ 8. Problems and Fixes						*netrw-proble
 
 	P4. I would like long listings to be the default.
 
-		let g:netrw_longlist=1
+			let g:netrw_longlist=1
+
+		Check out |netrw-browse-var| for more customizations that
+		you can set.
 
 	P5. My times come up oddly in local browsing
 
@@ -923,10 +940,10 @@ 8. Problems and Fixes						*netrw-proble
 		your <.vimrc>:
 			let g:netrw_timefmt= "%X"  (where X is the option)
 
-	P6. I don't want my current directory changing just because I'm
-	    browsing somewhere.
+	P6. I want my current directory to track my browsing.
+	    How do I do that?
 
-	    	let g:netrw_keepdir= 1
+	    	let g:netrw_keepdir= 0
 	
 
 ==============================================================================
@@ -979,60 +996,65 @@ which is loaded automatically at startup
 ==============================================================================
 10. History						*netrw-history*
 
-	v48: * One may use ftp to do remote host file browsing
+	v50: * directories now displayed using buftype=nofile; should keep the
+	       directory names as-is
+	     * attempts to remove empty "[No File]" buffers leftover
+	       from :file ..name.. commands
+	     * bugfix: a "caps-lock" editing difficulty left in v49 was fixed
+	     * syntax highlighting for "Showing:" the hiding list included
+	     * bookmarks can now be retained if "!" is in the viminfo option
+	v49: * will use ftp for http://.../ browsing v48: * One may use ftp to
+	       do remote host file browsing
 	     * (windows and !cygwin) remote browsing with ftp can now use
 	       the "dir" command internally to provide listings
 	     * g:netrw_keepdir now allows one to keep the initial current
-	       directory as the current directory (normally the local
-	       file browser makes the currently viewed directory the
-	       current directory)
+	       directory as the current directory (normally the local file
+	       browser makes the currently viewed directory the current
+	       directory)
 	     * g:netrw_alto and g:netrw_altv now support alternate placement
 	       of windows started with o or v
 	     * Nread ? and Nwrite ?  now uses echomsg (instead of echo) so
 	       :messages can repeat showing the help
 	     * bugfix: avoids problems with partial matches of directory names
 	       to prior buffers with longer names
-	     * one can suppress error messages with g:netrw_quiet
-	     * ctrl-h used instead of <Leader>h for editing hiding list
-	     * one may edit the sorting sequence with the S map
-	     * now allows confirmation of deletion with [y(es) n(o) a(ll) q(uit)]
-	     * the "x" map now handles special file viewing with:
-	       (windows) rundll32 url.dll
-	       (gnome)   gnome-open
-	       (kde)     kfmclient
-	       If none of these are on the executable path, then
+	     * one can suppress error messages with g:netrw_quiet ctrl-h used
+	     * instead of <Leader>h for editing hiding list one may edit the
+	     * sorting sequence with the S map now allows confirmation of
+	     * deletion with [y(es) n(o) a(ll) q(uit)] the "x" map now handles
+	     * special file viewing with:
+	       (windows) rundll32 url.dll (gnome)   gnome-open (kde)
+	       kfmclient If none of these are on the executable path, then
 	       NetrwFileHandlers.vim is used.
 	     * directory bookmarking during both local and remote browsing
 	       implemented
 	     * one may view all, use the hiding list to suppress, or use the
-	       hiding list to show-only remote and local file/directory listings
-	     * improved unusual file and directory name handling
-	     * preview window support
-	v47: * now handles local directory browsing.
-	v46: * now handles remote directory browsing
+	       hiding list to show-only remote and local file/directory
+	       listings
+	     * improved unusual file and directory name handling preview
+	     * window support
+	v47: * now handles local directory browsing.  v46: * now handles
+	remote directory browsing
 	     * g:netrw_silent (if 1) will cause all transfers to be silent'd
-	v45: * made the [user@]hostname:path form a bit more restrictive
-	       to better handle errors in using protocols
-	       (e.g. scp:usr@host:file was being recognized as an rcp request)
-	v44: * changed from "rsync -a" to just "rsync"
+	v45: * made the [user@]hostname:path form a bit more restrictive to
+	       better handle errors in using protocols (e.g. scp:usr@host:file
+	       was being recognized as an rcp request) v44: * changed from
+	       "rsync -a" to just "rsync"
 	     * somehow an editing error messed up the test to recognize
 	       use of the fetch method for NetRead.
 	     * more debugging statements included
-	v43: * moved "Explanation" comments to <pi_netrw.txt> help file
-	       as "Network Reference" (|netrw-ref|)
+	v43: * moved "Explanation" comments to <pi_netrw.txt> help file as
+	       "Network Reference" (|netrw-ref|)
 	     * <netrw.vim> now uses Dfunc() Decho() and Dret() for debugging
 	     * removed superfluous NetRestorePosn() calls
-	v42: * now does BufReadPre and BufReadPost events on file:///*
-	       and file://localhost/*
-	v41: * installed file:///* and file://localhost/* handling
-	v40: * prevents redraw when a protocol error occurs so that the
-	       user may see it
-	v39: * sftp support
-	v38: * Now uses NetRestorePosn() calls with Nread/Nwrite commands
+	v42: * now does BufReadPre and BufReadPost events on file:///* and
+	       file://localhost/* v41: * installed file:///* and
+	       file://localhost/* handling v40: * prevents redraw when a
+	       protocol error occurs so that the user may see it v39: * sftp
+	       support v38: * Now uses NetRestorePosn() calls with
+	       Nread/Nwrite commands
 	     * Temporary files now removed via bwipe! instead of bwipe
-	       (thanks to Dave Roberts)
-	v37: * Claar's modifications which test if ftp is successful, otherwise
-	       give an error message
+	       (thanks to Dave Roberts) v37: * Claar's modifications which
+	       test if ftp is successful, otherwise give an error message
 	     * After a read, the alternate file was pointing to the temp file.
 	       The temp file buffer is now wiped out.
 	     * removed silent from transfer methods so user can see what's
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 7.0aa.  Last change: 2004 Sep 13
+*syntax.txt*	For Vim version 7.0aa.  Last change: 2004 Sep 18
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -1799,7 +1799,7 @@ If you do not want complex things like '
 
 	:let perl_no_extended_vars = 1
 
-{In Vim 6.x it was the other way around: "perl_extended_vars" enabled it.)
+(In Vim 6.x it was the other way around: "perl_extended_vars" enabled it.)
 
 The coloring strings can be changed. By default strings and qq friends will be
 highlighted like the first line. If you set the variable
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -3542,6 +3542,7 @@ E675	print.txt	/*E675*
 E676	options.txt	/*E676*
 E677	eval.txt	/*E677*
 E678	pattern.txt	/*E678*
+E679	syntax.txt	/*E679*
 E68	pattern.txt	/*E68*
 E69	pattern.txt	/*E69*
 E70	pattern.txt	/*E70*
@@ -4414,6 +4415,7 @@ diff-options	diff.txt	/*diff-options*
 diff-patchexpr	diff.txt	/*diff-patchexpr*
 diff.txt	diff.txt	/*diff.txt*
 digraph-arg	change.txt	/*digraph-arg*
+digraph-encoding	digraph.txt	/*digraph-encoding*
 digraph-table	digraph.txt	/*digraph-table*
 digraph.txt	digraph.txt	/*digraph.txt*
 digraphs	digraph.txt	/*digraphs*
@@ -4920,7 +4922,6 @@ hebrew	hebrew.txt	/*hebrew*
 hebrew.txt	hebrew.txt	/*hebrew.txt*
 help	various.txt	/*help*
 help-context	help.txt	/*help-context*
-help-tags	tags	1
 help-translated	various.txt	/*help-translated*
 help-xterm-window	various.txt	/*help-xterm-window*
 help.txt	help.txt	/*help.txt*
@@ -5454,6 +5455,8 @@ netrw-R	pi_netrw.txt	/*netrw-R*
 netrw-S	pi_netrw.txt	/*netrw-S*
 netrw-activate	pi_netrw.txt	/*netrw-activate*
 netrw-b	pi_netrw.txt	/*netrw-b*
+netrw-bookmark	pi_netrw.txt	/*netrw-bookmark*
+netrw-bookmarks	pi_netrw.txt	/*netrw-bookmarks*
 netrw-browse	pi_netrw.txt	/*netrw-browse*
 netrw-browse-cmds	pi_netrw.txt	/*netrw-browse-cmds*
 netrw-browse-var	pi_netrw.txt	/*netrw-browse-var*
@@ -5463,6 +5466,7 @@ netrw-contents	pi_netrw.txt	/*netrw-cont
 netrw-cr	pi_netrw.txt	/*netrw-cr*
 netrw-credits	pi_netrw.txt	/*netrw-credits*
 netrw-ctrl-l	pi_netrw.txt	/*netrw-ctrl-l*
+netrw-curdir	pi_netrw.txt	/*netrw-curdir*
 netrw-d	pi_netrw.txt	/*netrw-d*
 netrw-debug	pi_netrw.txt	/*netrw-debug*
 netrw-delete	pi_netrw.txt	/*netrw-delete*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2004 Sep 13
+*todo.txt*      For Vim version 7.0aa.  Last change: 2004 Oct 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,18 +30,15 @@ be worked on, but only if you sponsor Vi
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Endless loop when "syntax reset" in ~/.vim/after/syntax/syncolor.vim.
-Crash when using ":set background=dark".  Solved!
-Limit init_highlight() to five recursive calls?
-    patch for Vim 6.3 for free_oldval and init_highlight()?
+Add browsedir(): like browse() but for directories.
+    For GTK it already sort-of works when the default name is empty.
 
-Crash with long line. (Walter Briscoe, Sep 13)
-
-Add fix for appending BOM to 6.3?  Reported by Alex Jakushev.
+When ":file" sets the alternate file name and it's empty this doesn't make
+sense.  Could skip it, but would that break scripts that rely on the buffer to
+exist?
 
-Win32 console doesn't compile.  Does GetCommandLineW() work for non-GUI?
-(Dave Roberts)  If yes, then move the functions to another file.
-link with kernel32.lib?
+Folding support for 2html. (Carl Osterwisch, Oct 4)
+How to evaluate an expression in the sandbox?
 
 Aborting at the ATTENTION prompt causes trouble:
     buffer remains active, nwindows isn't closed (fixed in buffer.c)
@@ -59,7 +56,44 @@ Win32: When the path to a file has Russi
 work. (Valery Kondakoff)
 Solved in os_mswin.c.  Add to 6.3?
 
+Patch for Win32 textdomain: NAKADAIRA Yukihiro, Sept 17.
+
+GTK 2 error message with this sequence (Namsh Oct 7):
+	- start gvim with French locale
+	- set enc=utf-8
+	- :aunmenu *
+	- :unlet  did_install_default_menus
+	- :source $VIMRUNTIME/menu.vim
+
 Valencia: executable("xxd.exe") returns true while "!xxd" doesn't work.
+Works fine for me.  Only in specific environment?
+
+netrw plugin: When coming back to the same directory a scratch buffer appears.
+Only on Win32. (Charles Campbell, Sept 15)
+
+New Eiffel indent script from Jocelyn Fiat.  OK with David Clarke.
+
+Win32: not using 'tenc' in GUI causes problems on Win 98?  (Jiri Jezdinsky)
+Try out with Russian input method.
+
+After "Y" '[ and '] are not at start/end of the yanked text. (Ken Clark)
+
+Patch for adding 'fsync' option: disable using fsync() on file write. (Sept.
+26, Ciaran McCreesh)
+
+Folding for C syntax: (Olaf Dabrunz 27 sept 2004)
+
+Add remark about using Vim with VS .net to Visvim docs. (David Fishburn, Sept
+27)
+
+Vim icon for documents associated with Vim? (Rahul Kulkarni, sept 28)
+
+Add a function to test if a font name actually works.
+
+When using "set laststatus=2 cmdheight=2" in the .gvimrc you only get one line
+for the cmdline. (Christian Robinson)  When the Vim window is resized (e.g.,
+xterm with many lines) it's OK.
+
 
 For version 7.0:
 
@@ -70,6 +104,7 @@ For version 7.0:
     7   For Visual mode: Command to do a search for the string in the marked
 	area.  Only when fewer than two lines. Use "g/" and "gb".  Patch from
 	Yegappan Lakshmanan. 2004 Jul 11
+	When more than two lines: perform a search in the Visual area only.
     8   Make 'statusline' local, so that each window can have a different
 	value.  But should it also be local to a buffer? (Yegappan Lakshmanan
 	has a patch, 2004 Jul 11)
@@ -168,6 +203,12 @@ For version 7.0:
     -   findmatch() should be adjusted for Lisp.  See remark at
 	get_lisp_indent().  Esp. \( and \) should be skipped. (Dorai Sitaram,
 	incomplete patch Mar 18)
+    -	Set user variables to the names of the actually used user vimrc file,
+	the first directory looked for user plugins/syntax files.
+	$MYVIMRC for .vimrc, $MYGVIMRC for .gvimrc, $MYRUNTIME/plugin for
+	runtime files?
+	Also: when the environment variable exists, use it.  If it doesn't
+	exist, set it.  Requires good names: $VIM_USER_VIMRC  $VIM_USER_DIR
 
 
 -   In the kvim/KDE source files fix the formatting.
@@ -192,6 +233,8 @@ For version 7.0:
 	  the contains list directly for matching syntax items.
         - Keep wordlist in syntax group, load it only once and use it several
 	  times later.  Sort of global syntax items.
+	- Use wordlists from openoffice (myspell).  Work together with them to
+	  update the wordlist.  (Adri Verhoef, Aad Nales)
 -   REFACTORING: The main() function is very long.  Move parts to separate
     functions, especially loops.  Ideas from Walter Briscoe (2003 Apr 3, 2004
     Feb 9).
@@ -205,9 +248,33 @@ For version 7.0:
 	http://sourceforge.net/projects/insenvim
 	http://cedet.sourceforge.net/intellisense.shtml (for Emacs)
 	Ivan Villanueva has something for Java.
+    Can't call it Intellisense, it is a trademark by Microsoft.
+    Ideas from the Vim 7 BOF at SANE:
+    - It's not possible to have one solution for all languages.  Design an
+      interface for completion plugins.  The matches can be done in a
+      Vim-script list.
+    - For interpreted languages, use the interpreter to obtain information.
+      Should work for Java (Eclipse does this), Python, Tcl, etc.
+    - Check Readline for its completion interface.
+    - Use ctags for other languages.  Writing a file could trigger running
+      ctags, merging the tags of the changed file.
+-   UNDO TREE: keep all states of the text, don't delete undo info.
+    When making a change, instead of clearing any future undo (thus redo)
+    info, make a new branch.
+    To navigate through the undo tree number the states of the text
+    sequentially and make it possible to go through the tree in that order.
+    Could also use timestamps (to show the time and/or jump to a state five
+    minutes ago). (David Schweikert)
+    To go from one state to another: backtrack to a common state, then forward
+    again.
+    Only difficult thing: When going back in time, how to find the previous
+    text state in the tree?
+    Show the list of changes in a window to be able to select a version?
 -   PERSISTENT UNDO: store undo in a file.
-    Support multiple threads.  Show the list of changes in a window to be able
-    to select a version.
+    Use timestamps, so that a version a certain time ago can be found and info
+    before some time/date can be flushed. 'undopersist' gives maximum time to
+    keep undo: "3h", "1d", "2w", "1y", etc.  For the file use dot and
+    extension: ".filename.un~" (like swapfile but "un~" instead of "swp").
 7   SWAP FILE CHANGE: When a dos format file was edited with ":e ++ff=unix",
     Vim is killed and trying to recover the file, 'ff' will be dos.  Same for
     non-default fileencoding.  (Miroslaw Dobrzanski-Neumann, Jul 17)
@@ -235,8 +302,12 @@ 7   Support WINDOW TABS.  Works like sev
 -   STICKY CURSOR: Add a way of scrolling that leaves the cursor where it is.
     Especially when using the scrollbar.  Typing a cursor-movement command
     scrolls back to where the cursor is.
+-   Execute a function with standard option values.  No need to save and
+    restore option values.  Especially useful for new options.  Problem: how
+    to avoid a performance penalty (esp. for string options)?
 8   Support four composing/combining characters, needed for Hebrew. (Ron Aaron)
     Add the 'maxcombining' option to set the nr. of composing characters.
+    At the same time support more colors (use two bytes when necessary).
 -   Add a few more things to 'diffopt': "horizontal", "vertical",
     "foldcolumn". (Benji Fisher, 2004 Jun 21)
 -   FileChangedShellPost autocommand event: after (not) reloading a changed
@@ -265,6 +336,9 @@ 7   Make ":startinsert" command work dir
 -   "onemore" flag in 'virtualedit': move cursor past end of line.  Patch by
     Mattias Flodin (2004 Jul 30)
 
+The fsync() in buf_write() causes laptop harddisk spinup.  Add an option to
+avoid it?
+
 Support ":set syntax=cpp.doxygen"?  Suggested patch by Michael Geddes (9 Aug
 2004).  Should also work for 'filetype'.
 
@@ -274,6 +348,9 @@ Smilauer, 2004 Sep 13)
 Win32: In 'fileencodings' allow using "acp" for the active codepage.  Useful
 value: "ucs-bom,utf-8,acp,latin1"
 
+Win32: Cannot edit a file starting with # with --remote. (Giuseppe Bilotta,
+Oct 6 2004)
+
 For manipulating buffers without opening a new window, support Virtual
 windows.  Example:
     :virtwin let l = GetBufLine(4, 10)
@@ -291,6 +368,10 @@ Win32: In the generated batch files, use
 Mathias Michaelis (2004 Sep 6)
 Also place vimtutor.bat in %windir%?
 
+Support ":enew filename" to edit a new buffer with a name.  It's like "enew |
+file filename" but without setting the alternate file to a buffer without a
+name. (Charles Campbell)
+
 
 Vi incompatibility:
 9   In Ex mode, "u" undoes all changes, not just the last one. (John Cowan)
@@ -386,6 +467,7 @@ 7   DND doesn't work with KDE (also with
 
 KDE GUI known bugs:
 -   The default font is ugly.  bold text isn't displayed correctly.
+    (bold characters are half the width of normal characters)
 -   Error messages when starting up.  The "tip of the day" box is empty.
 -   Encoding of menu items needs to be converted. (Yasuhiro Matsumoto)
 
@@ -2041,6 +2123,7 @@ 8   When editing "tt.gz", which is in DO
     *Leave	    - Leaving a mode (in pair with the above *Enter)
     VimLeaveCheck    - Before Vim decides to exit, so that it can be cancelled
 		      when exiting isn't a good idea.
+    WinMoved	    - when windows have been moved around, e.g, ":wincmd J"
     CmdUndefined    - Like FuncUndefined but for user commands.
     SearchPost	    - After doing a search command (e.g. to do "M")
     PreDirChanged/PostDirChanged
@@ -2511,8 +2594,6 @@ 6   Context-sensitive abbreviations: Spe
 -   Add command to repeat a whole mapping ("." only repeats the last change in
     a mapping).  Also: Repeat a whole insert command, including any mappings
     that it included.  Sort-of automatic recording?
--   Make it possible to undo all the commands from a mapping, including a
-    trailing unfinished command, e.g. for ":map K iX^[r".
 -   Add an option to ":map" that makes it display the special keys in
     <> notation (e.g. <CR> instead of ^M).  Or just always do this?
 -   Include an option (or flag to 'cpoptions') that makes errors in mappings
@@ -2663,6 +2744,8 @@ 7   Add ":iselect", a combination of ":i
 
 
 Undo:
+-   Make it possible to undo all the commands from a mapping, including a
+    trailing unfinished command, e.g. for ":map K iX^[r".
 -   When accidentally hitting "R" instead of Ctrl-R, further Ctrl-R is not
     possible, even when typing <Esc> immediately. (Grahn)  Also for "i", "a",
     etc.  Postpone saving for undo until something is really inserted?
@@ -2676,9 +2759,6 @@ 7   Add undo for a range of lines.  Can 
     version without changing the rest of the file.  Stop doing this when a
     change includes only some of these lines and changes the line count.  Need
     to store these undo actions as a separate change that can be undone.
-7   Add an undo tree: When making a change, instead of clearing any future
-    undo (thus redo) info, make a new branch.  How to navigate through the
-    undo tree?
 -   For u_save() include the column number. This can be used to set '[ and '].
     And in the future the undo can be made more efficient (Webb).
 -   In out-of-memory situations: Free allocated space in undo, and reduce the
@@ -2897,7 +2977,7 @@ 7   Make "ga" show the digraph for a cha
     below/above).
 -   Use digraph table to tell Vim about the collating sequence of special
     characters?
-8   Add command to remove (all) digraphs. (Brown)
+8   Add command to remove one or more (all) digraphs. (Brown)
 7   Support different sets of digraphs (depending on the character set?).  At
     least Latin1/Unicode, Latin-2, MS-DOS (esp. for Win32).
 
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 7.0aa.  Last change: 2004 Aug 28
+*usr_41.txt*	For Vim version 7.0aa.  Last change: 2004 Oct 06
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -218,9 +218,9 @@ To avoid the need for a backslash, you c
 	:echo name
 <	"peter" ~
 
-Inside a single-quote string all the characters are taken literally.  The
-drawback is that it's impossible to include a single quote.  A backslash is
-taken literally as well, thus you can't use it to change the meaning of the
+Inside a single-quote string all the characters are as they are.  The drawback
+is that it's impossible to include a single quote.  A backslash is taken
+literally as well, thus you can't use it to change the meaning of the
 character after it.
    In double-quote strings it is possible to use special characters.  Here are
 a few useful ones:
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2004 Sep 13
+*version7.txt*  For Vim version 7.0aa.  Last change: 2004 Oct 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -243,6 +243,12 @@ upper case.  Add color support to the bu
 For the '%' item in 'viminfo', allow a number to set a maximum for the number
 of buffers.
 
+When a file looks like a shell script, check for an "exec" command that starts
+the tcl interpreter. (suggested by Alexios Zavras)
+
+Support conversion between utf-8 and latin9 (iso-8859-15) internally, so that
+digraphs still work when iconv is not available.
+
 ==============================================================================
 COMPILE TIME CHANGES					*compile-changes-7*
 
@@ -373,4 +379,21 @@ When an error message is given while wai
 xterm reports the number of colors), the hit-enter prompt overwrote the last
 line.  Don't reset msg_didout in normal_cmd() for K_IGNORE.
 
+Mac GUI: Shift-Tab didn't work.
+
+When defining tooltip text, don't translate terminal codes, since it's not
+going to be used like a command.
+
+GTK 2: Check the tooltip text for valid utf-8 characters to avoid getting a
+GTK error.  Invalid characters may appear when 'encoding' is changed.
+
+GTK 2: Add a safety check for invalid utf-8 sequences, they can crash pango.
+
+Win32: When 'encoding' is changed while starting up, use the Unicode command
+line to convert the file arguments to 'encoding'.  Both for the GUI and the
+console version.
+
+Win32 GUI: latin9 text (iso-8859-15) was not displayed correctly, because
+there is no codepage for latin9.  Do our own conversion from latin9 to UCS2.
+
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2004 Sep 11
+" Last Change:	2004 Oct 02
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -1339,22 +1339,41 @@ fun! SetFileTypeSH(name)
       unlet b:is_bash
     endif
   endif
-  setf sh
+  call SetFileTypeShell("sh")
+endfun
+
+" For shell-like file types, check for an "exec" command hidden in a comment,
+" as used for Tcl.
+fun! SetFileTypeShell(name)
+  let l = 2
+  while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)'
+    " Skip empty and comment lines.
+    let l = l + 1
+  endwhile
+  if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$'
+    " Found an "exec" line after a comment with continuation
+    let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '')
+    if n =~ '\<tclsh\|\<wish'
+      setf tcl
+      return
+    endif
+  endif
+  exe "setf " . a:name
 endfun
 
 " tcsh scripts
-au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login	setf tcsh
+au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login	call SetFileTypeShell("tcsh")
 
 " csh scripts, but might also be tcsh scripts (on some systems csh is tcsh)
 au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias  call SetFileTypeCSH()
 
 fun! SetFileTypeCSH()
   if exists("g:filetype_csh")
-    exe "setf " . g:filetype_csh
+    call SetFileTypeShell(g:filetype_csh)
   elseif &shell =~ "tcsh"
-    setf tcsh
+    call SetFileTypeShell("tcsh")
   else
-    setf csh
+    call SetFileTypeShell("csh")
   endif
 endfun
 
--- a/runtime/indent/eiffel.vim
+++ b/runtime/indent/eiffel.vim
@@ -1,9 +1,11 @@
 " Vim indent file
 " Language:	Eiffel
-" Maintainer:	David Clarke <gadicath@dishevelled.net>
+" Maintainer:	Jocelyn Fiat <eiffel@djoce.net>
+" Previous-Maintainer:	David Clarke <gadicath@dishevelled.net>
 " $Date$
 " $Revision$
-" URL: http://gadicath.webhop.net/other/eiffel.vim
+" URL: http://www.djoce.net/page/vim/
+" Last Change:	2004 Sep 14
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -20,8 +22,6 @@ setlocal comments=:--
 setlocal indentkeys+==end,=else,=ensure,=require,=check,=loop,=until
 setlocal indentkeys+==creation,=feature,=inherit,=class,=is,=redefine,=rename,=variant
 setlocal indentkeys+==invariant,=do,=local,=export
-setlocal sw=3
-setlocal tw=78
 
 " Define some stuff
 " keywords grouped by indenting
@@ -96,7 +96,7 @@ function GetEiffelIndent()
 
   " set indent of zero end statements that are at an indent of 3, this should
   " only ever be the class's end.
-  if getline(v:lnum) =~ '^\s*end\>' && ind == 3
+  if getline(v:lnum) =~ '^\s*end\>' && ind == &sw
     let ind = 0
   endif
 
--- a/runtime/indent/java.vim
+++ b/runtime/indent/java.vim
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Java
-" Maintainer:	Toby Allsopp <toby.allsopp@peace.com>
-" Last Change:	2003 Oct 21
+" Maintainer:	Toby Allsopp <toby.allsopp@peace.com> (resigned)
+" Last Change:	2004 Oct 05
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
--- a/runtime/menu.vim
+++ b/runtime/menu.vim
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2004 May 26
+" Last Change:	2004 Sep 16
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -382,7 +382,7 @@ if has("keymap")
   endif
   unlet s:n
 endif
-if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_photon")
+if has("win32") || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
   an 20.470 &Edit.Select\ Fo&nt\.\.\.	:set guifont=*<CR>
 endif
 
--- a/runtime/plugin/netrw.vim
+++ b/runtime/plugin/netrw.vim
@@ -1,7 +1,7 @@
 " netrw.vim: Handles file transfer and remote directory listing across a network
-" Last Change:	Sep 10, 2004
+" Last Change:	Sep 14, 2004
 " Maintainer:	Charles E. Campbell, Jr. PhD   <drchipNOSPAM at campbellfamily.biz>
-" Version:	48
+" Version:	51a	NOT RELEASED
 " License:	Vim License  (see vim's :help license)
 "
 "  But be doers of the Word, and not only hearers, deluding your own selves
@@ -14,7 +14,7 @@
 if exists("g:loaded_netrw") || &cp
   finish
 endif
-let g:loaded_netrw  = "v48"
+let g:loaded_netrw  = "v51a"
 let s:save_cpo      = &cpo
 let loaded_explorer = 1
 set cpo&vim
@@ -115,7 +115,7 @@ if !exists("g:netrw_hide")
  let g:netrw_hide= 1
 endif
 if !exists("g:netrw_ftp_browse_reject")
- let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not'
+ let g:netrw_ftp_browse_reject='^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$'
 endif
 if !exists("g:netrw_keepdir")
  let g:netrw_keepdir= 1
@@ -140,6 +140,9 @@ endif
 if !exists("g:netrw_altv")
  let g:netrw_altv= 0
 endif
+if !exists("g:netrw_maxfilenamelen")
+ let g:netrw_maxfilenamelen= 32
+endif
 
 " BufEnter event ignored by decho when following variable is true
 "  Has a side effect that doau BufReadPost doesn't work, so
@@ -211,9 +214,11 @@ if version >= 600
    au BufReadCmd  file:///*		exe "silent doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
    au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".expand("<afile>")|exe 'e /'.substitute(expand("<afile>"),"file:/*","","")|exe "silent doau BufReadPost ".expand("<afile>")
   endif
-  au BufReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
-  au FileReadCmd ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread "   .expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
-  au BufWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    		exe "silent doau BufWritePre ".expand("<afile>")|exe "Nwrite " .expand("<afile>")|exe "silent doau BufWritePost ".expand("<afile>")
+  au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread 0r ".expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
+  au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".expand("<afile>")|exe "Nread "   .expand("<afile>")|exe "silent doau BufReadPost ".expand("<afile>")
+  au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    	exe "silent doau BufWritePre ".expand("<afile>")|exe "Nwrite " .expand("<afile>")|exe "silent doau BufWritePost ".expand("<afile>")
+  au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    	exe "silent doau BufWritePre ".expand("<afile>")|exe "'[,']Nwrite " .expand("<afile>")|exe "silent doau BufWritePost ".expand("<afile>")
+"  au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,rsync://*,sftp://*    	if exists("vcount")|call Decho("vcount=".vcount)|else|call Decho("no vcount")|endif
  augroup END
 endif
 
@@ -1025,7 +1030,8 @@ fun! <SID>NetBrowse(dirname)
 "  call Dfunc("NetBrowse(dirname<".a:dirname.">) longlist=".g:netrw_longlist)
 
   " sanity check
-  if exists("b:netrw_method") && b:netrw_method =~ '[23]'
+  if exists("b:netrw_method") && b:netrw_method =~ '[235]'
+"   call Decho("b:netrw_method=".b:netrw_method)
    if !executable("ftp")
     if !exists("g:netrw_quiet")
      echoerr "***netrw*** this system doesn't support remote directory listing via ftp"
@@ -1066,11 +1072,13 @@ fun! <SID>NetBrowse(dirname)
 "  call Decho("set up path   <".path   .">")
 "  call Decho("set up fname  <".fname  .">")
 
-  if method == "ftp"
+  if method == "ftp" || method == "http"
+   let method  = "ftp"
    let listcmd = g:netrw_ftp_list_cmd
   else
    let listcmd = substitute(g:netrw_list_cmd,'\<HOSTNAME\>',user.machine,'')
   endif
+
   if exists("b:netrw_method")
 "   call Decho("setting s:netrw_method<".b:netrw_method.">")
    let s:netrw_method= b:netrw_method
@@ -1144,11 +1152,12 @@ fun! <SID>NetBrowse(dirname)
   endif
 
   " rename file to reflect where its from
-  setlocal ts=32 bt=nofile bh=wipe nobl
+  setlocal bt=nofile bh=wipe nobl noswf
+  exe "setlocal ts=".g:netrw_maxfilenamelen
 "  call Decho("exe file ".escape(bufname,s:netrw_cd_escape))
   exe 'file '.escape(bufname,s:netrw_cd_escape)
 "  call Decho("renaming file to bufname<".bufname.">")
-  setlocal bt=nowrite bh=hide nobl
+  setlocal bh=hide nobl
 
   " set up buffer-local mappings
 "  call Decho("set up buffer-local mappings")
@@ -1338,7 +1347,6 @@ fun! <SID>NetBrowseChgDir(dirname,newdir
    else
     " strip off a directory name from dirname
     let dirname= substitute(dirname,'^\(.*/\)[^/]\+/','\1','')
-  exe "silent! keepjumps ".curline.",$d"
    endif
 "   call Decho("go up one dir: dirname<".dirname."> trailer<".trailer.">")
 
@@ -1573,7 +1581,7 @@ fun! <SID>NetBrowseX(fname,remote)
 
   if a:remote == 1
    let eikeep= &ei
-   set ei=all bh=delete bt=nofile
+   set ei=all bh=delete bt=nofile noswf
    exe "norm! \<c-o>"
    let &ei= eikeep
    redraw!
@@ -1601,15 +1609,13 @@ fun! NetBrowseFtpCmd(path,cmd)
   exe "silent! keepjumps ".curline.",$d"
 
    ".........................................
-  if s:netrw_method == 2
+  if s:netrw_method == 2 || s:netrw_method == 5
    " ftp + <.netrc>:  Method #2
    if a:path != ""
     put ='cd '.a:path
    endif
    exe "put ='".a:cmd."'"
-
-
-"    redraw!|call inputsave()|call input("Pausing...")|call inputrestore() "Decho
+"    redraw!|call inputsave()|call input("Pausing...")|call inputrestore()
    if exists("g:netrw_port") && g:netrw_port != ""
 "    call Decho("exe ".g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port)
     exe g:netrw_silentxfer.curline.",$!".g:netrw_ftp_cmd." -i ".g:netrw_machine." ".g:netrw_port
@@ -1875,29 +1881,29 @@ fun! <SID>NetBookmarkDir(chg,curdir)
 
   if a:chg == 0
    " bookmark the current directory
-   let s:netrw_bookmarkdir_{v:count}= a:curdir
-   if !exists("s:bookmarkmax")
-    let s:bookmarkmax= v:count
-   elseif v:count > s:bookmarkmax
-    let s:bookmarkmax= v:count
+   let g:NETRW_BOOKMARKDIR_{v:count}= a:curdir
+   if !exists("g:NETRW_BOOKMARKMAX")
+    let g:NETRW_BOOKMARKMAX= v:count
+   elseif v:count > g:NETRW_BOOKMARKMAX
+    let g:NETRW_BOOKMARKMAX= v:count
    endif
 
   elseif a:chg == 1
    " change to the bookmarked directory
-   if exists("s:netrw_bookmarkdir_{v:count}")
-    exe "e ".s:netrw_bookmarkdir_{v:count}
+   if exists("g:NETRW_BOOKMARKDIR_{v:count}")
+    exe "e ".g:NETRW_BOOKMARKDIR_{v:count}
    else
     echomsg "Sorry, bookmark#".v:count." doesn't exist!"
    endif
 
-  elseif exists("s:bookmarkmax")
+  elseif exists("g:NETRW_BOOKMARKMAX")
    " list bookmarks
-"   call Decho("list bookmarks [0,".s:bookmarkmax."]")
+"   call Decho("list bookmarks [0,".g:NETRW_BOOKMARKMAX."]")
    let cnt= 0
-   while cnt <= s:bookmarkmax
-    if exists("s:netrw_bookmarkdir_{cnt}")
-     echo "Netrw Bookmark#".cnt.": ".s:netrw_bookmarkdir_{cnt}
-"     call Decho("Netrw Bookmark#".cnt.": ".s:netrw_bookmarkdir_{cnt})
+   while cnt <= g:NETRW_BOOKMARKMAX
+    if exists("g:NETRW_BOOKMARKDIR_{cnt}")
+     echo "Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt}
+"     call Decho("Netrw Bookmark#".cnt.": ".g:NETRW_BOOKMARKDIR_{cnt})
     endif
     let cnt= cnt + 1
    endwhile
@@ -1905,7 +1911,6 @@ fun! <SID>NetBookmarkDir(chg,curdir)
 "  call Dret("NetBookmarkDir")
 endfun
 
-
 " ---------------------------------------------------------------------
 "  Browsing Support For Local Directories And Files:    {{{1
 
@@ -1972,20 +1977,32 @@ fun! <SID>LocalBrowse(dirname)
     endif
    endif
 "   call Decho("buffer already exists, but needs re-listing (buf#".dirnamenr.")")
+"   call Decho("buffer name<".bufname("%")."> dirname<".dirname.">")
    setlocal ma
    keepjumps %d
-   if expand("%:p") != dirname
+   if expand("%") != dirname
+    " set standard browser options on buffer
+    setlocal bt=nofile bh=hide nobl noswf
+    exe "setlocal ts=".g:netrw_maxfilenamelen
     exe 'silent! file '.escape(dirname,s:netrw_cd_escape)
-"    call Decho("renamed file to<".escape(dirname,' #').">")
+"    call Decho("renamed buffer to<".escape(dirname,s:netrw_cd_escape).">")
+"    call Decho("yielding actual bufname<".bufname("%").">")
    endif
   else
 "   call Decho("generate new buffer named<".escape(dirname,' #').">")
    silent! enew!
+   " set standard browser options on buffer
+   setlocal bt=nofile bh=hide nobl noswf
+   exe "setlocal ts=".g:netrw_maxfilenamelen
    exe 'silent! file '.substitute(escape(dirname,s:netrw_cd_escape),'/$','','e')
-"   call Decho("renamed file to<".escape(dirname,s:netrw_cd_escape).">")
+"   call Decho("renamed buffer to<".substitute(escape(dirname,s:netrw_cd_escape),'/$','','e').">")
+"   call Decho("yielding actual bufname<".bufname("%").">")
   endif
-  " set standard browser options on buffer
-  setlocal ts=32 bt=nowrite bh=hide nobl
+  if bufname("#") == "" && bufnr("#") != -1
+   " the file command produces a lot of [No File] buffers
+"   call Decho("wiping out nofile buffer#".bufnr("#"))
+   exe bufnr("#")."bwipe"
+  endif
 
   " set up all the maps
 "  call Decho("Setting up local browser maps")
@@ -2076,7 +2093,7 @@ fun! <SID>LocalBrowse(dirname)
   setlocal noma nomod
   if g:netrw_keepdir | exe 'keepjumps cd '.netrw_origdir | endif
 
-"  call Dret("LocalBrowse : file<".expand("%:p").">")
+"  call Dret("LocalBrowse : file<".expand("%:p")."> bufname<".bufname("%").">")
 endfun
 
 " ---------------------------------------------------------------------
@@ -2123,7 +2140,7 @@ fun! LocalBrowseList(dirname)
     let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
    else
     let file     = filelist
-    let filelist= ""
+    let filelist = ""
    endif
    let pfile= file
    if isdirectory(file)
--- a/runtime/scripts.vim
+++ b/runtime/scripts.vim
@@ -1,7 +1,7 @@
 " Vim support file to detect file types in scripts
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2004 Sep 02
+" Last change:	2004 Oct 02
 
 " This file is called by an autocommand for every file that has just been
 " loaded into a buffer.  It checks if the type of file can be recognized by
@@ -57,14 +57,14 @@ if s:line1 =~ "^#!"
     " csh scripts
   elseif s:name =~ '^csh\>'
     if exists("g:filetype_csh")
-      let &ft = g:filetype_csh
+      call SetFileTypeShell(g:filetype_csh)
     else
-      set ft=csh
+      call SetFileTypeShell("csh")
     endif
 
     " tcsh scripts
   elseif s:name =~ '^tcsh\>'
-    set ft=tcsh
+    call SetFileTypeShell("tcsh")
 
     " Z shell scripts
   elseif s:name =~ '^zsh\>'
--- a/runtime/syntax/lss.vim
+++ b/runtime/syntax/lss.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Lynx 2.7.1 style file
-" Maintainer:	Scott Bigham <dsb@cs.duke.edu>
-" Last Change:	2001 May 09
+" Maintainer:	Scott Bigham <dsb@killerbunnies.org>
+" Last Change:	2004 Oct 06
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
--- a/runtime/syntax/pccts.vim
+++ b/runtime/syntax/pccts.vim
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language:	PCCTS
-" Maintainer:	Scott Bigham <dsb@cs.duke.edu>
+" Maintainer:	Scott Bigham <dsb@killerbunnies.org>
 " Last Change:	10 Aug 1999
 
 " For version 5.x: Clear all syntax items
--- a/runtime/syntax/pod.vim
+++ b/runtime/syntax/pod.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Perl POD format
-" Maintainer:	Scott Bigham <dsb@cs.duke.edu>
-" Last Change:	2001 May 09
+" Maintainer:	Scott Bigham <dsb@killerbunnies.org>
+" Last Change:	2004 Oct 05
 
 " To add embedded POD documentation highlighting to your syntax file, add
 " the commands:
@@ -25,7 +25,7 @@ elseif exists("b:current_syntax")
 endif
 
 " POD commands
-syn match podCommand	"^=head[12]"	nextgroup=podCmdText
+syn match podCommand	"^=head[1234]"	nextgroup=podCmdText
 syn match podCommand	"^=item"	nextgroup=podCmdText
 syn match podCommand	"^=over"	nextgroup=podOverIndent skipwhite
 syn match podCommand	"^=back"
@@ -52,7 +52,11 @@ syn match podSpecial	"\(\<\|&\)\I\i*\(::
 syn match podSpecial	"[$@%]\I\i*\(::\I\i*\)*\>"
 
 " Special formatting sequences
-syn region podFormat	start="[IBSCLFXEZ]<" end=">" oneline contains=podFormat
+syn region podFormat	start="[IBSCLFX]<[^<]"me=e-1 end=">" oneline contains=podFormat
+syn match  podFormat	"Z<>"
+syn match  podFormat	"E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2
+syn match  podEscape	"\I\i*>"me=e-1 contained
+syn match  podEscape2	"\d\+>"me=e-1 contained
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -72,6 +76,8 @@ if version >= 508 || !exists("did_pod_sy
   HiLink podFormat		Identifier
   HiLink podVerbatimLine	PreProc
   HiLink podSpecial		Identifier
+  HiLink podEscape		String
+  HiLink podEscape2		Number
 
   delcommand HiLink
 endif
--- a/runtime/syntax/samba.vim
+++ b/runtime/syntax/samba.vim
@@ -2,7 +2,7 @@
 " Language:	samba configuration files (smb.conf)
 " Maintainer:	Rafael Garcia-Suarez <rgarciasuarez@free.fr>
 " URL:		http://rgarciasuarez.free.fr/vim/syntax/samba.vim
-" Last change:	2002 May 06
+" Last change:	2004 September 21
 
 " Don't forget to run your config file through testparm(1)!
 
@@ -17,8 +17,8 @@ endif
 syn case ignore
 
 syn match sambaParameter /^[a-zA-Z \t]\+=/ contains=sambaKeyword
-syn match sambaSection /^\s*\[[a-zA-Z0-9_\-. ]\+\]/
-syn match sambaMacro /%[SPugUGHvhmLMNpRdaIT]/
+syn match sambaSection /^\s*\[[a-zA-Z0-9_\-.$ ]\+\]/
+syn match sambaMacro /%[SPugUGHvhmLMNpRdaITD]/
 syn match sambaMacro /%$([a-zA-Z0-9_]\+)/
 syn match sambaComment /^\s*[;#].*/
 syn match sambaContinue /\\$/
@@ -92,6 +92,18 @@ syn keyword sambaKeyword contained acls 
 syn keyword sambaKeyword contained disable dn egd entropy enum extensions mmap
 syn keyword sambaKeyword contained policy spin spoolss
 
+" Since Samba 3.0.2
+syn keyword sambaKeyword contained abort afs algorithmic backend
+syn keyword sambaKeyword contained charset cups defer display
+syn keyword sambaKeyword contained enable idmap kerberos lookups
+syn keyword sambaKeyword contained methods modules nested NIS ntlm NTLMv2
+syn keyword sambaKeyword contained objects paranoid partners passdb
+syn keyword sambaKeyword contained plaintext prefix primary private
+syn keyword sambaKeyword contained profile quota realm replication
+syn keyword sambaKeyword contained reported rid schannel sendfile sharing
+syn keyword sambaKeyword contained shutdown signing special spnego
+syn keyword sambaKeyword contained store unknown unwriteable
+
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
 " For version 5.8 and later: only when an item doesn't have highlighting yet
--- a/runtime/syntax/scheme.vim
+++ b/runtime/syntax/scheme.vim
@@ -194,7 +194,6 @@ if exists("b:is_mzscheme") || exists("is
     syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature 
     syn keyword schemeExtSyntax invoke-unit/sig define-values/invoke-unit/sig compound-unit/sig import export
     syn keyword schemeExtSyntax link syntax quasisyntax unsyntax with-syntax
-    hi def link schemeExtSyntax Type
 
     syn keyword schemeExtFunc format system-type current-extension-compiler current-extension-linker
     syn keyword schemeExtFunc use-standard-linker use-standard-compiler
@@ -217,7 +216,6 @@ if exists("b:is_mzscheme") || exists("is
     syn keyword schemeExtFunc exn:special-comment? exn:syntax? exn:thread? exn:user? exn:variable? exn:application:mismatch?
     " Command-line parsing
     syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each 
-    hi def link schemeExtFunc PreProc
 
     " syntax quoting, unquoting and quasiquotation
     syn region schemeUnquote matchgroup=Delimiter start="#," end=![ \t\[\]()";]!me=e-1 contains=ALL
@@ -230,6 +228,37 @@ if exists("b:is_mzscheme") || exists("is
     syn region schemeQuoted matchgroup=Delimiter start="#['`](" matchgroup=Delimiter end=")" contains=ALL
 endif
 
+
+if exists("b:is_chicken") || exists("is_chicken")
+    syn match schemeOther oneline    "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+    syn match schemeExtSyntax oneline    "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+
+    syn keyword schemeExtSyntax unit uses declare hide foreign-declare foreign-parse foreign-parse/spec
+    syn keyword schemeExtSyntax foreign-lambda foreign-lambda* 
+    syn keyword schemeExtSyntax let-optionals let-optionals* define-foreign-variable
+    syn keyword schemeExtFunc ##core#inline ##sys#error ##sys#update-errno
+
+    " here-string
+    syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+
+ 
+    if filereadable(expand("<sfile>:p:h")."/cpp.vim")
+	unlet! b:current_syntax
+	syn include @ChickenC <sfile>:p:h/cpp.vim
+	syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-declare "+ end=+")\@=+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+foreign-declare\s*#<<\z(.*\)$+hs=s+15 end=+^\z1$+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-parse "+ end=+")\@=+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+foreign-parse\s*#<<\z(.*\)$+hs=s+13 end=+^\z1$+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeOther start=+(\@<=foreign-parse/spec "+ end=+")\@=+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+foreign-parse/spec\s*#<<\z(.*\)$+hs=s+18 end=+^\z1$+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+#>+ end=+<#+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+#>?+ end=+<#+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+#>!+ end=+<#+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+#>\$+ end=+<#+ contains=@ChickenC
+	syn region ChickenC matchgroup=schemeComment start=+#>%+ end=+<#+ contains=@ChickenC
+    endif
+
+endif
+
 " Synchronization and the wrapping up...
 
 syn sync match matchPlace grouphere NONE "^[^ \t]"
@@ -255,12 +284,14 @@ if version >= 508 || !exists("did_scheme
   HiLink schemeBoolean		Boolean
 
   HiLink schemeDelimiter	Delimiter
-  HiLink schemeConstant	Constant
+  HiLink schemeConstant		Constant
 
   HiLink schemeComment		Comment
   HiLink schemeMultilineComment	Comment
   HiLink schemeError		Error
 
+  HiLink schemeExtSyntax	Type
+  HiLink schemeExtFunc		PreProc
   delcommand HiLink
 endif
 
--- a/src/GvimExt/gvimext.cpp
+++ b/src/GvimExt/gvimext.cpp
@@ -630,7 +630,7 @@ STDMETHODIMP CShellExt::QueryContextMenu
 	    *pos = 0;
 	}
 	// Now concatenate
-	strncpy(temp, _("Edit with existing Vim - &"), MAX_PATH - 1);
+	strncpy(temp, _("Edit with existing Vim - "), MAX_PATH - 1);
 	strncat(temp, title, MAX_PATH - 1);
 	InsertMenu(hMenu,
 		indexMenu++,
--- a/src/Makefile
+++ b/src/Makefile
@@ -1202,7 +1202,7 @@ CARBONGUI_TESTARG = VIMPROG=../$(CARBONG
 
 # All GUI files
 ALL_GUI_SRC  = gui.c gui_gtk.c gui_gtk_f.c gui_motif.c gui_athena.c gui_gtk_x11.c gui_x11.c gui_at_sb.c gui_at_fs.c pty.c gui_kde.cc gui_kde_wid.cc gui_kde_x11.cc gui_kde_wid_moc.cc
-ALL_GUI_PRO  = gui.pro gui_gtk.pro gui_motif.pro gui_athena.pro gui_gtk_x11.pro gui_x11.pro gui_w16.pro gui_w32.pro gui_amiga.pro gui_photon.pro gui_kde.pro gui_kde_x11.pro
+ALL_GUI_PRO  = gui.pro gui_gtk.pro gui_motif.pro gui_athena.pro gui_gtk_x11.pro gui_x11.pro gui_w16.pro gui_w32.pro gui_amiga.pro gui_photon.pro
 
 # }}}
 
--- a/src/digraph.c
+++ b/src/digraph.c
@@ -1428,6 +1428,7 @@ digr_T	digraphdefault[] =
 	{'L', 'i', 0x20a4},
 	{'P', 't', 0x20a7},
 	{'W', '=', 0x20a9},
+	{'=', 'e', 0x20ac}, /* euro */
 	{'o', 'C', 0x2103},
 	{'c', 'o', 0x2105},
 	{'o', 'F', 0x2109},
--- a/src/eval.c
+++ b/src/eval.c
@@ -8526,46 +8526,46 @@ set_cmdarg(eap, oldarg)
     unsigned	len;
 
     oldval = vimvars[VV_CMDARG].val;
-    if (eap != NULL)
-    {
-	if (eap->force_bin == FORCE_BIN)
-	    len = 6;
-	else if (eap->force_bin == FORCE_NOBIN)
-	    len = 8;
-	else
-	    len = 0;
-	if (eap->force_ff != 0)
-	    len += (unsigned)STRLEN(eap->cmd + eap->force_ff) + 6;
+    if (eap == NULL)
+    {
+	vim_free(oldval);
+	vimvars[VV_CMDARG].val = oldarg;
+	return NULL;
+    }
+
+    if (eap->force_bin == FORCE_BIN)
+	len = 6;
+    else if (eap->force_bin == FORCE_NOBIN)
+	len = 8;
+    else
+	len = 0;
+    if (eap->force_ff != 0)
+	len += (unsigned)STRLEN(eap->cmd + eap->force_ff) + 6;
 # ifdef FEAT_MBYTE
-	if (eap->force_enc != 0)
-	    len += (unsigned)STRLEN(eap->cmd + eap->force_enc) + 7;
+    if (eap->force_enc != 0)
+	len += (unsigned)STRLEN(eap->cmd + eap->force_enc) + 7;
 # endif
 
-	newval = alloc(len + 1);
-	if (newval == NULL)
-	    return NULL;
-
-	if (eap->force_bin == FORCE_BIN)
-	    sprintf((char *)newval, " ++bin");
-	else if (eap->force_bin == FORCE_NOBIN)
-	    sprintf((char *)newval, " ++nobin");
-	else
-	    *newval = NUL;
-	if (eap->force_ff != 0)
-	    sprintf((char *)newval + STRLEN(newval), " ++ff=%s",
-						    eap->cmd + eap->force_ff);
+    newval = alloc(len + 1);
+    if (newval == NULL)
+	return NULL;
+
+    if (eap->force_bin == FORCE_BIN)
+	sprintf((char *)newval, " ++bin");
+    else if (eap->force_bin == FORCE_NOBIN)
+	sprintf((char *)newval, " ++nobin");
+    else
+	*newval = NUL;
+    if (eap->force_ff != 0)
+	sprintf((char *)newval + STRLEN(newval), " ++ff=%s",
+						eap->cmd + eap->force_ff);
 # ifdef FEAT_MBYTE
-	if (eap->force_enc != 0)
-	    sprintf((char *)newval + STRLEN(newval), " ++enc=%s",
-						   eap->cmd + eap->force_enc);
+    if (eap->force_enc != 0)
+	sprintf((char *)newval + STRLEN(newval), " ++enc=%s",
+					       eap->cmd + eap->force_enc);
 # endif
-	vimvars[VV_CMDARG].val = newval;
-	return oldval;
-    }
-
-    vim_free(oldval);
-    vimvars[VV_CMDARG].val = oldarg;
-    return NULL;
+    vimvars[VV_CMDARG].val = newval;
+    return oldval;
 }
 #endif
 
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -4066,7 +4066,7 @@ restore_backup:
 	{
 #ifdef FEAT_MBYTE
 	    if (write_info.bw_conv_error)
-		errmsg = (char_u *)_("E513: write error, conversion failed");
+		errmsg = (char_u *)_("E513: write error, conversion failed (make 'fenc' empty to override)");
 	    else
 #endif
 		if (got_int)
--- a/src/globals.h
+++ b/src/globals.h
@@ -677,6 +677,7 @@ EXTERN int	enc_utf8 INIT(= FALSE);		/* U
 /* Codepage nr of 'encoding'.  Negative means it's not been set yet, zero
  * means 'encoding' is not a valid codepage. */
 EXTERN int	enc_codepage INIT(= -1);
+EXTERN int	enc_latin9 INIT(= FALSE);	/* 'encoding' is latin9 */
 # endif
 EXTERN int	has_mbyte INIT(= 0);		/* any multi-byte encoding */
 
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -749,6 +749,10 @@ gui_mch_add_menu_item(vimmenu_T *menu, i
 
 	    text    = CONVERT_TO_UTF8(menu->dname);
 	    tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]);
+	    if (tooltip != NULL && !utf_valid_string(tooltip, NULL))
+		/* Invalid text, can happen when 'encoding' is changed.  Avoid
+		 * a nasty GTK error message, skip the tooltip. */
+		CONVERT_TO_UTF8_FREE(tooltip);
 
 	    menu->id = gtk_toolbar_insert_item(
 		    toolbar,
@@ -993,6 +997,8 @@ gui_mch_menu_set_tip(vimmenu_T *menu)
 
 # ifdef HAVE_GTK2
 	tooltip = CONVERT_TO_UTF8(menu->strings[MENU_INDEX_TIP]);
+	if (tooltip == NULL || utf_valid_string(tooltip, NULL))
+	    /* Only set the tooltip when it's valid utf-8. */
 # else
 	tooltip = menu->strings[MENU_INDEX_TIP];
 # endif
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -5239,6 +5239,14 @@ not_ascii:
 	int		last_glyph_rbearing;
 	int		cells = 0;  /* cells occupied by current cluster */
 
+	/* Safety check: pango crashes when invoked with invalid utf-8
+	 * characters. */
+	if (!utf_valid_string(s, s + len))
+	{
+	    column_offset = len;
+	    goto skipitall;
+	}
+
 	/* original width of the current cluster */
 	cluster_width = PANGO_SCALE * gui.char_width;
 
@@ -5372,6 +5380,7 @@ not_ascii:
 	pango_attr_list_unref(attr_list);
     }
 
+skipitall:
     if (flags & DRAW_UNDERL)
 	gdk_draw_line(gui.drawarea->window,
 		      gui.text_gc,
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -2200,6 +2200,7 @@ gui_mac_doKeyEvent(EventRecord *theEvent
     KeySym		key_sym;
     int			key_char;
     int			modifiers;
+    int			simplify = FALSE;
 
     /* Mask the mouse (as per user setting) */
     if (p_mh)
@@ -2253,7 +2254,7 @@ gui_mac_doKeyEvent(EventRecord *theEvent
 
     /* Handle special keys. */
 #if 0
-    /* Why have this been removed? */
+    /* Why has this been removed? */
     if	(!(theEvent->modifiers & (cmdKey | controlKey | rightControlKey)))
 #endif
     {
@@ -2270,11 +2271,14 @@ gui_mac_doKeyEvent(EventRecord *theEvent
 # endif
 			key_char = TO_SPECIAL(special_keys[i].vim_code0,
 						special_keys[i].vim_code1);
-		    key_char = simplify_key(key_char,&modifiers);
+		    simplify = TRUE;
 		    break;
 		}
     }
 
+    /* For some keys the modifier is included in the char itself. */
+    if (simplify || key_char == TAB || key_char == ' ')
+	key_char = simplify_key(key_char, &modifiers);
 
     /* Add the modifier to the input bu if needed */
     /* Do not want SHIFT-A or CTRL-A with modifier */
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1709,6 +1709,33 @@ im_get_status()
 }
 #endif
 
+#ifdef FEAT_MBYTE
+/*
+ * Convert latin9 text to ucs-2.
+ */
+    static void
+latin9_to_ucs(char_u *text, int len, WCHAR *unicodebuf)
+{
+    int		c;
+
+    while (len-- >= 0)
+    {
+	c = *text++;
+	switch (c)
+	{
+	    case 0xa4: c = 0x20ac; break;   /* euro */
+	    case 0xa6: c = 0x0160; break;   /* S hat */
+	    case 0xa8: c = 0x0161; break;   /* S -hat */
+	    case 0xb4: c = 0x017d; break;   /* Z hat */
+	    case 0xb8: c = 0x017e; break;   /* Z -hat */
+	    case 0xbc: c = 0x0152; break;   /* OE */
+	    case 0xbd: c = 0x0153; break;   /* oe */
+	    case 0xbe: c = 0x0178; break;   /* Y */
+	}
+	*unicodebuf++ = c;
+    }
+}
+#endif
 
 #ifdef FEAT_RIGHTLEFT
 /*
@@ -1907,7 +1934,9 @@ gui_mch_draw_string(
     /* Check if the Unicode buffer exists and is big enough.  Create it
      * with the same lengt as the multi-byte string, the number of wide
      * characters is always equal or smaller. */
-    if ((enc_utf8 || (enc_codepage > 0 && (int)GetACP() != enc_codepage))
+    if ((enc_utf8
+		|| (enc_codepage > 0 && (int)GetACP() != enc_codepage)
+		|| enc_latin9)
 	    && (unicodebuf == NULL || len > unibuflen))
     {
 	vim_free(unicodebuf);
@@ -1950,13 +1979,16 @@ gui_mch_draw_string(
 			     foptions, pcliprect, unicodebuf, clen, unicodepdy);
 	len = cells;	/* used for underlining */
     }
-    else if (enc_codepage > 0 && (int)GetACP() != enc_codepage)
+    else if ((enc_codepage > 0 && (int)GetACP() != enc_codepage) || enc_latin9)
     {
 	/* If we want to display codepage data, and the current CP is not the
 	 * ANSI one, we need to go via Unicode. */
 	if (unicodebuf != NULL)
 	{
-	    len = MultiByteToWideChar(enc_codepage,
+	    if (enc_latin9)
+		latin9_to_ucs(text, len, unicodebuf);
+	    else
+		len = MultiByteToWideChar(enc_codepage,
 			MB_PRECOMPOSED,
 			(char *)text, len,
 			(LPWSTR)unicodebuf, unibuflen);
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -3277,6 +3277,7 @@ gui_mch_browse(
     return 0;
 }
 
+
 /*
  * Get command line arguments.
  * Use "prog" as the name of the program and "cmdline" as the arguments.
@@ -3299,6 +3300,14 @@ get_cmd_args(char *prog, char *cmdline, 
     char	**argv = NULL;
     int		round;
 
+#ifdef FEAT_MBYTE
+    /* Try using the Unicode version first, it takes care of conversion when
+     * 'encoding' is changed. */
+    argc = get_cmd_argsW(&argv);
+    if (argc != 0)
+	goto done;
+#endif
+
     /* Handle the program name.  Remove the ".exe" extension, and find the 1st
      * non-space. */
     p = strrchr(prog, '.');
@@ -3405,8 +3414,9 @@ get_cmd_args(char *prog, char *cmdline, 
 	}
     }
 
+done:
+
     argv[argc] = NULL;		/* NULL-terminated list */
-
     *argvp = argv;
     return argc;
 }
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -216,7 +216,7 @@ enc_canon_table[] =
 #define IDX_ISO_14	13
     {"iso-8859-14",	ENC_8BIT,		0},
 #define IDX_ISO_15	14
-    {"iso-8859-15",	ENC_8BIT,		0},
+    {"iso-8859-15",	ENC_8BIT + ENC_LATIN9,	0},
 #define IDX_KOI8_R	15
     {"koi8-r",		ENC_8BIT,		0},
 #define IDX_KOI8_U	16
@@ -534,6 +534,7 @@ codepage_invalid:
 
 #ifdef WIN3264
     enc_codepage = encname2codepage(p_enc);
+    enc_latin9 = (STRCMP(p_enc, "iso-8859-15") == 0);
 #endif
 
     /*
@@ -2486,6 +2487,36 @@ mb_tail_off(base, p)
     return 1 - dbcs_head_off(base, p);
 }
 
+#if defined(HAVE_GTK2) || defined(PROTO)
+/*
+ * Return TRUE if string "s" is a valid utf-8 string.
+ * When "end" is NULL stop at the first NUL.
+ * When "end" is positive stop there.
+ */
+    int
+utf_valid_string(s, end)
+    char_u	*s;
+    char_u	*end;
+{
+    int		l;
+    char_u	*p = s;
+
+    while (end == NULL ? *p != NUL : p < end)
+    {
+	if ((*p & 0xc0) == 0x80)
+	    return FALSE;	/* invalid lead byte */
+	l = utf8len_tab[*p];
+	if (end != NULL && p + l > end)
+	    return FALSE;	/* incomplete byte sequence */
+	++p;
+	while (--l > 0)
+	    if ((*p++ & 0xc0) != 0x80)
+		return FALSE;	/* invalid trail byte */
+    }
+    return TRUE;
+}
+#endif
+
 #if defined(FEAT_GUI) || defined(PROTO)
 /*
  * Special version of mb_tail_off() for use in ScreenLines[].
@@ -5453,11 +5484,22 @@ convert_setup(vcp, from, to)
 	vcp->vc_type = CONV_TO_UTF8;
 	vcp->vc_factor = 2;	/* up to twice as long */
     }
+    else if ((from_prop & ENC_LATIN9) && (to_prop & ENC_UNICODE))
+    {
+	/* Internal latin9 -> utf-8 conversion. */
+	vcp->vc_type = CONV_9_TO_UTF8;
+	vcp->vc_factor = 3;	/* up to three as long (euro sign) */
+    }
     else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN1))
     {
 	/* Internal utf-8 -> latin1 conversion. */
 	vcp->vc_type = CONV_TO_LATIN1;
     }
+    else if ((from_prop & ENC_UNICODE) && (to_prop & ENC_LATIN9))
+    {
+	/* Internal utf-8 -> latin9 conversion. */
+	vcp->vc_type = CONV_TO_LATIN9;
+    }
 #ifdef WIN3264
     /* Win32-specific codepage <-> codepage conversion without iconv. */
     else if (((from_prop & ENC_UNICODE) || encname2codepage(from) > 0)
@@ -5622,12 +5664,13 @@ string_convert_ext(vcp, ptr, lenp, uncon
 	    d = retval;
 	    for (i = 0; i < len; ++i)
 	    {
-		if (ptr[i] < 0x80)
-		    *d++ = ptr[i];
+		c = ptr[i];
+		if (c < 0x80)
+		    *d++ = c;
 		else
 		{
-		    *d++ = 0xc0 + ((unsigned)ptr[i] >> 6);
-		    *d++ = 0x80 + (ptr[i] & 0x3f);
+		    *d++ = 0xc0 + ((unsigned)c >> 6);
+		    *d++ = 0x80 + (c & 0x3f);
 		}
 	    }
 	    *d = NUL;
@@ -5635,7 +5678,34 @@ string_convert_ext(vcp, ptr, lenp, uncon
 		*lenp = (int)(d - retval);
 	    break;
 
+	case CONV_9_TO_UTF8:	/* latin9 to utf-8 conversion */
+	    retval = alloc(len * 3 + 1);
+	    if (retval == NULL)
+		break;
+	    d = retval;
+	    for (i = 0; i < len; ++i)
+	    {
+		c = ptr[i];
+		switch (c)
+		{
+		    case 0xa4: c = 0x20ac; break;   /* euro */
+		    case 0xa6: c = 0x0160; break;   /* S hat */
+		    case 0xa8: c = 0x0161; break;   /* S -hat */
+		    case 0xb4: c = 0x017d; break;   /* Z hat */
+		    case 0xb8: c = 0x017e; break;   /* Z -hat */
+		    case 0xbc: c = 0x0152; break;   /* OE */
+		    case 0xbd: c = 0x0153; break;   /* oe */
+		    case 0xbe: c = 0x0178; break;   /* Y */
+		}
+		d += utf_char2bytes(c, d);
+	    }
+	    *d = NUL;
+	    if (lenp != NULL)
+		*lenp = (int)(d - retval);
+	    break;
+
 	case CONV_TO_LATIN1:	/* utf-8 to latin1 conversion */
+	case CONV_TO_LATIN9:	/* utf-8 to latin9 conversion */
 	    retval = alloc(len + 1);
 	    if (retval == NULL)
 		break;
@@ -5658,6 +5728,26 @@ string_convert_ext(vcp, ptr, lenp, uncon
 		else
 		{
 		    c = utf_ptr2char(ptr + i);
+		    if (vcp->vc_type == CONV_TO_LATIN9)
+			switch (c)
+			{
+			    case 0x20ac: c = 0xa4; break;   /* euro */
+			    case 0x0160: c = 0xa6; break;   /* S hat */
+			    case 0x0161: c = 0xa8; break;   /* S -hat */
+			    case 0x017d: c = 0xb4; break;   /* Z hat */
+			    case 0x017e: c = 0xb8; break;   /* Z -hat */
+			    case 0x0152: c = 0xbc; break;   /* OE */
+			    case 0x0153: c = 0xbd; break;   /* oe */
+			    case 0x0178: c = 0xbe; break;   /* Y */
+			    case 0xa4:
+			    case 0xa6:
+			    case 0xa8:
+			    case 0xb4:
+			    case 0xb8:
+			    case 0xbc:
+			    case 0xbd:
+			    case 0xbe: c = 0x100; break; /* not in latin9 */
+			}
 		    if (!utf_iscomposing(c))	/* skip composing chars */
 		    {
 			if (c < 0x100)
--- a/src/menu.c
+++ b/src/menu.c
@@ -392,6 +392,8 @@ ex_menu(eap)
 	    map_to = (char_u *)"";
 	    map_buf = NULL;
 	}
+	else if (modes & MENU_TIP_MODE)
+	    map_buf = NULL;	/* Menu tips are plain text. */
 	else
 	    map_to = replace_termcodes(map_to, &map_buf, FALSE, TRUE);
 	menuarg.modes = modes;
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -267,6 +267,10 @@ mch_early_init(void)
     AnsiUpperBuff(toupper_tab, 256);
     AnsiLowerBuff(tolower_tab, 256);
 #endif
+
+#if defined(FEAT_MBYTE) && !defined(FEAT_GUI)
+    (void)get_cmd_argsW(NULL);
+#endif
 }
 
 
@@ -298,7 +302,25 @@ mch_settitle(
     gui_mch_settitle(title, icon);
 # else
     if (title != NULL)
+    {
+#  ifdef FEAT_MBYTE
+	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	{
+	    /* Convert the title from 'encoding' to the active codepage. */
+	    WCHAR	*wp = enc_to_ucs2(title, NULL);
+	    int	n;
+
+	    if (wp != NULL)
+	    {
+		n = SetConsoleTitleW(wp);
+		vim_free(wp);
+		if (n != 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+		    return;
+	    }
+	}
+#  endif
 	SetConsoleTitle(title);
+    }
 # endif
 }
 
--- a/src/os_w32exe.c
+++ b/src/os_w32exe.c
@@ -30,24 +30,6 @@ VimMain
 	__ARGS((int argc, char **argv));
 int (_cdecl *pmain)(int, char **);
 
-#ifdef FEAT_MBYTE
-/* The commandline arguments in UCS2. */
-static DWORD	nArgsW = 0;
-static LPWSTR	*ArglistW = NULL;
-static int	global_argc;
-static char	**global_argv;
-
-static int	used_file_argc = 0;	/* last argument in global_argv[] used
-					   for the argument list. */
-static int	*used_file_indexes = NULL; /* indexes in global_argv[] for
-					      command line arguments added to
-					      the argument list */
-static int	used_file_count = 0;	/* nr of entries in used_file_indexes */
-static int	used_file_literal = FALSE;  /* take file names literally */
-static int	used_file_full_path = FALSE;  /* file name was full path */
-static int	used_alist_count = 0;
-#endif
-
 #ifndef PROTO
 #ifdef FEAT_GUI
 #ifndef VIMDLL
@@ -76,56 +58,14 @@ WinMain(
      * startup path (so the .vimrc file can be found w/o a VIM env. var.) */
     GetModuleFileName(NULL, prog, 255);
 
-    /* Separate the command line into arguments.  Use the Unicode functions
-     * when possible. When 'encoding' is later changed these are used to
-     * recode the arguments. */
-#ifdef FEAT_MBYTE
-    ArglistW = CommandLineToArgvW(GetCommandLineW(), &nArgsW);
-    if (ArglistW != NULL)
+    argc = get_cmd_args(prog, (char *)lpszCmdLine, &argv, &tofree);
+    if (argc == 0)
     {
-	argv = malloc((nArgsW + 1) * sizeof(char *));
-	if (argv != NULL)
-	{
-	    int		i;
-
-	    argv[argc] = NULL;
-	    argc = nArgsW;
-	    for (i = 0; i < argc; ++i)
-	    {
-		int	len;
-
-		WideCharToMultiByte_alloc(GetACP(), 0,
-				ArglistW[i], wcslen(ArglistW[i]) + 1,
-				(LPSTR *)&argv[i], &len, 0, 0);
-		if (argv[i] == NULL)
-		{
-		    while (i > 0)
-			free(argv[--i]);
-		    free(argv);
-		    argc = 0;
-		}
-	    }
-	}
+	MessageBox(0, "Could not allocate memory for command line.",
+							      "VIM Error", 0);
+	return 0;
     }
 
-    if (argc == 0)
-#endif
-    {
-	argc = get_cmd_args(prog, (char *)lpszCmdLine, &argv, &tofree);
-	if (argc == 0)
-	{
-	    MessageBox(0, "Could not allocate memory for command line.",
-								  "VIM Error", 0);
-	    return 0;
-	}
-    }
-
-#ifdef FEAT_MBYTE
-    global_argc = argc;
-    global_argv = argv;
-    used_file_indexes = malloc(argc * sizeof(int));
-#endif
-
 #ifdef DYNAMIC_GETTEXT
     /* Initialize gettext library */
     dyn_libintl_init(NULL);
@@ -190,108 +130,9 @@ errout:
     free(argv);
     free(tofree);
 #ifdef FEAT_MBYTE
-    if (ArglistW != NULL)
-	GlobalFree(ArglistW);
+    free_cmd_argsW();
 #endif
 
     return 0;
 }
 #endif
-
-#ifdef FEAT_MBYTE
-/*
- * Remember "name" is an argument that was added to the argument list.
- * This avoids that we have to re-parse the argument list when fix_arg_enc()
- * is called.
- */
-    void
-used_file_arg(name, literal, full_path)
-    char	*name;
-    int		literal;
-    int		full_path;
-{
-    int		i;
-
-    if (used_file_indexes == NULL)
-	return;
-    for (i = used_file_argc + 1; i < global_argc; ++i)
-	if (STRCMP(global_argv[i], name) == 0)
-	{
-	    used_file_argc = i;
-	    used_file_indexes[used_file_count++] = i;
-	    break;
-	}
-    used_file_literal = literal;
-    used_file_full_path = full_path;
-}
-
-/*
- * Remember the length of the argument list as it was.  If it changes then we
- * leave it alone when 'encoding' is set.
- */
-    void
-set_alist_count(void)
-{
-    used_alist_count = GARGCOUNT;
-}
-
-/*
- * Fix the encoding of the command line arguments.  Invoked when 'encoding'
- * has been changed while starting up.  Use the UCS-2 command line arguments
- * and convert them to 'encoding'.
- */
-    void
-fix_arg_enc()
-{
-    int		i;
-    int		idx;
-    char_u	*str;
-
-    /* Safety checks:
-     * - if argument count differs between the wide and non-wide argument
-     *   list, something must be wrong.
-     * - the file name arguments must have been located.
-     * - the length of the argument list wasn't changed by the user.
-     */
-    if (global_argc != (int)nArgsW
-	    || ArglistW == NULL
-	    || used_file_indexes == NULL
-	    || used_file_count == 0
-	    || used_alist_count != GARGCOUNT)
-	return;
-
-    /* Clear the argument list.  Make room for the new arguments. */
-    alist_clear(&global_alist);
-    if (ga_grow(&global_alist.al_ga, used_file_count) == FAIL)
-	return;	    /* out of memory */
-
-    for (i = 0; i < used_file_count; ++i)
-    {
-	idx = used_file_indexes[i];
-	str = ucs2_to_enc(ArglistW[idx], NULL);
-	if (str != NULL)
-	    alist_add(&global_alist, str, used_file_literal ? 2 : 0);
-    }
-
-    if (!used_file_literal)
-    {
-	/* Now expand wildcards in the arguments. */
-	/* Temporarily add '(' and ')' to 'isfname'.  These are valid
-	 * filename characters but are excluded from 'isfname' to make
-	 * "gf" work on a file name in parenthesis (e.g.: see vim.h). */
-	do_cmdline_cmd((char_u *)":let SaVe_ISF = &isf|set isf+=(,)");
-	alist_expand();
-	do_cmdline_cmd((char_u *)":let &isf = SaVe_ISF|unlet SaVe_ISF");
-    }
-
-    /* If wildcard expansion failed, we are editing the first file of the
-     * arglist and there is no file name: Edit the first argument now. */
-    if (curwin->w_arg_idx == 0 && curbuf->b_fname == NULL)
-    {
-	do_cmdline_cmd((char_u *)":rewind");
-	if (GARGCOUNT == 1 && used_file_full_path)
-	    (void)vim_chdirfile(alist_name(&GARGLIST[0]));
-    }
-}
-#endif
-
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -92,6 +92,7 @@ FILE* fdDump = NULL;
 #define WINAPI
 #define WINBASEAPI
 typedef char * LPCSTR;
+typedef char * LPWSTR;
 typedef int ACCESS_MASK;
 typedef int BOOL;
 typedef int COLORREF;
@@ -301,19 +302,19 @@ dyn_libintl_end()
 }
 
     static char *
-null_libintl_gettext(const char* msgid)
+null_libintl_gettext(const char *msgid)
 {
     return (char*)msgid;
 }
 
     static char *
-null_libintl_bindtextdomain(const char* domainname, const char* dirname)
+null_libintl_bindtextdomain(const char *domainname, const char *dirname)
 {
     return NULL;
 }
 
     static char *
-null_libintl_textdomain(const char* domainname)
+null_libintl_textdomain(const char *domainname)
 {
     return NULL;
 }
@@ -530,7 +531,7 @@ const static struct
     __stdcall
 #endif
 win32_kbd_patch_key(
-    KEY_EVENT_RECORD* pker)
+    KEY_EVENT_RECORD *pker)
 {
     UINT uMods = pker->dwControlKeyState;
     static int s_iIsDead = 0;
@@ -734,8 +735,7 @@ decode_key_event(
  */
 # ifdef FEAT_GUI_W32
     void
-mch_setmouse(
-    int on)
+mch_setmouse(int on)
 {
 }
 # else
@@ -749,8 +749,7 @@ static int g_yMouse;		    /* mouse y coo
  * Enable or disable mouse input
  */
     void
-mch_setmouse(
-    int on)
+mch_setmouse(int on)
 {
     DWORD cmodein;
 
@@ -798,7 +797,7 @@ mch_setmouse(
  */
     static BOOL
 decode_mouse_event(
-    MOUSE_EVENT_RECORD* pmer)
+    MOUSE_EVENT_RECORD *pmer)
 {
     static int s_nOldButton = -1;
     static int s_nOldMouseClick = -1;
@@ -1214,7 +1213,7 @@ WaitForChar(long msec)
  * return non-zero if a character is available
  */
     int
-mch_char_avail()
+mch_char_avail(void)
 {
     return WaitForChar(0L);
 }
@@ -1579,7 +1578,7 @@ executable_exists(char *name)
  * GUI version of mch_init().
  */
     void
-mch_init()
+mch_init(void)
 {
 #ifndef __MINGW32__
     extern int _fmode;
@@ -1746,10 +1745,10 @@ FitConsoleWindow(
 
 typedef struct ConsoleBufferStruct
 {
-    BOOL IsValid;
-    CONSOLE_SCREEN_BUFFER_INFO Info;
-    PCHAR_INFO Buffer;
-    COORD BufferSize;
+    BOOL			IsValid;
+    CONSOLE_SCREEN_BUFFER_INFO	Info;
+    PCHAR_INFO			Buffer;
+    COORD			BufferSize;
 } ConsoleBuffer;
 
 /*
@@ -1853,8 +1852,8 @@ SaveConsoleBuffer(
  */
     static BOOL
 RestoreConsoleBuffer(
-    ConsoleBuffer *cb,
-    BOOL RestoreScreen)
+    ConsoleBuffer   *cb,
+    BOOL	    RestoreScreen)
 {
     COORD BufferCoord;
     SMALL_RECT WriteRegion;
@@ -1949,23 +1948,19 @@ static BOOL g_fCanChangeIcon = FALSE;
  */
     static BOOL
 GetConsoleIcon(
-    HWND hWnd,
-    HICON *phIconSmall,
-    HICON *phIcon)
+    HWND	hWnd,
+    HICON	*phIconSmall,
+    HICON	*phIcon)
 {
     if (hWnd == NULL)
 	return FALSE;
 
     if (phIconSmall != NULL)
-    {
-	*phIconSmall = (HICON) SendMessage(hWnd, WM_GETICON,
-			    (WPARAM) ICON_SMALL, (LPARAM) 0);
-    }
+	*phIconSmall = (HICON)SendMessage(hWnd, WM_GETICON,
+					       (WPARAM)ICON_SMALL, (LPARAM)0);
     if (phIcon != NULL)
-    {
-	*phIcon = (HICON) SendMessage(hWnd, WM_GETICON,
-			    (WPARAM) ICON_BIG, (LPARAM) 0);
-    }
+	*phIcon = (HICON)SendMessage(hWnd, WM_GETICON,
+						 (WPARAM)ICON_BIG, (LPARAM)0);
     return TRUE;
 }
 
@@ -1979,26 +1974,22 @@ GetConsoleIcon(
  */
     static BOOL
 SetConsoleIcon(
-    HWND hWnd,
-    HICON hIconSmall,
-    HICON hIcon)
+    HWND    hWnd,
+    HICON   hIconSmall,
+    HICON   hIcon)
 {
-    HICON hPrevIconSmall;
-    HICON hPrevIcon;
+    HICON   hPrevIconSmall;
+    HICON   hPrevIcon;
 
     if (hWnd == NULL)
 	return FALSE;
 
     if (hIconSmall != NULL)
-    {
-	hPrevIconSmall = (HICON) SendMessage(hWnd, WM_SETICON,
-			    (WPARAM) ICON_SMALL, (LPARAM) hIconSmall);
-    }
+	hPrevIconSmall = (HICON)SendMessage(hWnd, WM_SETICON,
+				      (WPARAM)ICON_SMALL, (LPARAM)hIconSmall);
     if (hIcon != NULL)
-    {
-	hPrevIcon = (HICON) SendMessage(hWnd, WM_SETICON,
-			    (WPARAM) ICON_BIG, (LPARAM) hIcon);
-    }
+	hPrevIcon = (HICON)SendMessage(hWnd, WM_SETICON,
+					     (WPARAM)ICON_BIG,(LPARAM) hIcon);
     return TRUE;
 }
 
@@ -2059,7 +2050,7 @@ static DWORD g_cmodeout = 0;
  * non-GUI version of mch_init().
  */
     void
-mch_init()
+mch_init(void)
 {
 #ifndef FEAT_RESTORE_ORIG_SCREEN
     CONSOLE_SCREEN_BUFFER_INFO csbi;
@@ -2341,8 +2332,8 @@ fname_case(
  */
     int
 mch_get_user_name(
-    char_u *s,
-    int len)
+    char_u  *s,
+    int	    len)
 {
     char szUserName[MAX_COMPUTERNAME_LENGTH + 1];
     DWORD cch = sizeof szUserName;
@@ -2379,7 +2370,7 @@ mch_get_host_name(
  * return process ID
  */
     long
-mch_get_pid()
+mch_get_pid(void)
 {
     return (long)GetCurrentProcessId();
 }
@@ -2429,8 +2420,7 @@ mch_dirname(
  * else FILE_ATTRIBUTE_* defined in winnt.h
  */
     long
-mch_getperm(
-    char_u *name)
+mch_getperm(char_u *name)
 {
 #ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
@@ -2457,8 +2447,8 @@ mch_getperm(
  */
     int
 mch_setperm(
-    char_u *name,
-    long perm)
+    char_u  *name,
+    long    perm)
 {
     perm |= FILE_ATTRIBUTE_ARCHIVE;	/* file has changed, set archive bit */
 #ifdef FEAT_MBYTE
@@ -2656,8 +2646,7 @@ struct my_acl
  * Return NULL if the ACL is not available for whatever reason.
  */
     vim_acl_T
-mch_get_acl(fname)
-    char_u	*fname;
+mch_get_acl(char_u *fname)
 {
 #ifndef HAVE_ACL
     return (vim_acl_T)NULL;
@@ -2701,9 +2690,7 @@ mch_get_acl(fname)
  * This must only be called with "acl" equal to what mch_get_acl() returned.
  */
     void
-mch_set_acl(fname, acl)
-    char_u	*fname;
-    vim_acl_T	acl;
+mch_set_acl(char_u *fname, vim_acl_T acl)
 {
 #ifdef HAVE_ACL
     struct my_acl   *p = (struct my_acl *)acl;
@@ -2726,8 +2713,7 @@ mch_set_acl(fname, acl)
 }
 
     void
-mch_free_acl(acl)
-    vim_acl_T	acl;
+mch_free_acl(vim_acl_T acl)
 {
 #ifdef HAVE_ACL
     struct my_acl   *p = (struct my_acl *)acl;
@@ -2791,8 +2777,7 @@ handler_routine(
  * set the tty in (raw) ? "raw" : "cooked" mode
  */
     void
-mch_settmode(
-    int tmode)
+mch_settmode(int tmode)
 {
     DWORD cmodein;
     DWORD cmodeout;
@@ -2840,7 +2825,7 @@ mch_settmode(
  * Return OK when size could be determined, FAIL otherwise.
  */
     int
-mch_get_shellsize()
+mch_get_shellsize(void)
 {
     CONSOLE_SCREEN_BUFFER_INFO csbi;
 
@@ -2873,9 +2858,9 @@ mch_get_shellsize()
  */
     static void
 ResizeConBufAndWindow(
-    HANDLE hConsole,
-    int xSize,
-    int ySize)
+    HANDLE  hConsole,
+    int	    xSize,
+    int	    ySize)
 {
     CONSOLE_SCREEN_BUFFER_INFO csbi;	/* hold current console buffer info */
     SMALL_RECT	    srWindowRect;	/* hold the new console size */
@@ -2955,7 +2940,7 @@ ResizeConBufAndWindow(
  * Set the console window to `Rows' * `Columns'
  */
     void
-mch_set_shellsize()
+mch_set_shellsize(void)
 {
     COORD coordScreen;
 
@@ -2984,7 +2969,7 @@ mch_set_shellsize()
  * Rows and/or Columns has changed.
  */
     void
-mch_new_shellsize()
+mch_new_shellsize(void)
 {
     set_scroll_region(0, 0, Columns - 1, Rows - 1);
 }
@@ -2994,7 +2979,7 @@ mch_new_shellsize()
  * Called when started up, to set the winsize that was delayed.
  */
     void
-mch_set_winsize_now()
+mch_set_winsize_now(void)
 {
     if (suppress_winsize == 2)
     {
@@ -3134,8 +3119,8 @@ mch_system(char *cmd, int options)
  */
     int
 mch_call_shell(
-    char_u *cmd,
-    int options)	/* SHELL_*, see vim.h */
+    char_u  *cmd,
+    int	    options)	/* SHELL_*, see vim.h */
 {
     int		x = 0;
     int		tmode = cur_tmode;
@@ -3510,8 +3495,7 @@ clear_to_end_of_line(void)
  * Scroll the scroll region up by `cLines' lines
  */
     static void
-scroll(
-    unsigned cLines)
+scroll(unsigned cLines)
 {
     COORD oldcoord = g_coord;
 
@@ -3549,8 +3533,7 @@ set_scroll_region(
  * Insert `cLines' lines at the current cursor position
  */
     static void
-insert_lines(
-    unsigned cLines)
+insert_lines(unsigned cLines)
 {
     SMALL_RECT	    source;
     COORD	    dest;
@@ -3591,8 +3574,7 @@ insert_lines(
  * Delete `cLines' lines at the current cursor position
  */
     static void
-delete_lines(
-    unsigned cLines)
+delete_lines(unsigned cLines)
 {
     SMALL_RECT	    source;
     COORD	    dest;
@@ -3655,8 +3637,7 @@ gotoxy(
  * See ../doc/os_win32.txt for the numbers.
  */
     static void
-textattr(
-    WORD wAttr)
+textattr(WORD wAttr)
 {
     g_attrCurrent = wAttr;
 
@@ -3665,8 +3646,7 @@ textattr(
 
 
     static void
-textcolor(
-    WORD wAttr)
+textcolor(WORD wAttr)
 {
     g_attrCurrent = (g_attrCurrent & 0xf0) + wAttr;
 
@@ -3675,8 +3655,7 @@ textcolor(
 
 
     static void
-textbackground(
-    WORD wAttr)
+textbackground(WORD wAttr)
 {
     g_attrCurrent = (g_attrCurrent & 0x0f) + (wAttr << 4);
 
@@ -3688,7 +3667,7 @@ textbackground(
  * restore the default text attribute (whatever we started with)
  */
     static void
-normvideo()
+normvideo(void)
 {
     textattr(g_attrDefault);
 }
@@ -3711,7 +3690,7 @@ standout(void)
  * Turn off standout mode
  */
     static void
-standend()
+standend(void)
 {
     if (g_attrPreStandout)
     {
@@ -3725,7 +3704,7 @@ standend()
  * Set normal fg/bg color, based on T_ME.  Called whem t_me has been set.
  */
     void
-mch_set_normal_colors()
+mch_set_normal_colors(void)
 {
     char_u	*p;
     int		n;
@@ -3749,7 +3728,7 @@ mch_set_normal_colors()
  * visual bell: flash the screen
  */
     static void
-visual_bell()
+visual_bell(void)
 {
     COORD   coordOrigin = {0, 0};
     WORD    attrFlash = ~g_attrCurrent & 0xff;
@@ -3775,8 +3754,7 @@ visual_bell()
  * Make the cursor visible or invisible
  */
     static void
-cursor_visible(
-    BOOL fVisible)
+cursor_visible(BOOL fVisible)
 {
     s_cursor_visible = fVisible;
 #ifdef MCH_CURSOR_SHAPE
@@ -4178,7 +4156,7 @@ mch_remove(char_u *name)
  * check for an "interrupt signal": CTRL-break or CTRL-C
  */
     void
-mch_breakcheck()
+mch_breakcheck(void)
 {
 #ifndef FEAT_GUI_W32	    /* never used */
     if (g_fCtrlCPressed || g_fCBrkPressed)
@@ -4195,8 +4173,7 @@ mch_breakcheck()
  * Return sum of available physical and page file memory.
  */
     long_u
-mch_avail_mem(
-    int special)
+mch_avail_mem(int special)
 {
     MEMORYSTATUS	ms;
 
@@ -4382,7 +4359,7 @@ mch_rename(
  * Get the default shell for the current hardware platform
  */
     char *
-default_shell()
+default_shell(void)
 {
     char* psz = NULL;
 
@@ -4867,5 +4844,177 @@ myresetstkoflw(void)
 
     return 1;
 }
-
 #endif
+
+
+#if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * The command line arguments in UCS2
+ */
+static DWORD	nArgsW = 0;
+static LPWSTR	*ArglistW = NULL;
+static int	global_argc = 0;
+static char	**global_argv;
+
+static int	used_file_argc = 0;	/* last argument in global_argv[] used
+					   for the argument list. */
+static int	*used_file_indexes = NULL; /* indexes in global_argv[] for
+					      command line arguments added to
+					      the argument list */
+static int	used_file_count = 0;	/* nr of entries in used_file_indexes */
+static int	used_file_literal = FALSE;  /* take file names literally */
+static int	used_file_full_path = FALSE;  /* file name was full path */
+static int	used_alist_count = 0;
+
+
+/*
+ * Get the command line arguments.  Unicode version.
+ * Returns argc.  Zero when something fails.
+ */
+    int
+get_cmd_argsW(char ***argvp)
+{
+    char	**argv = NULL;
+    int		argc = 0;
+    int		i;
+
+    ArglistW = CommandLineToArgvW(GetCommandLineW(), &nArgsW);
+    if (ArglistW != NULL)
+    {
+	argv = malloc((nArgsW + 1) * sizeof(char *));
+	if (argv != NULL)
+	{
+	    argc = nArgsW;
+	    argv[argc] = NULL;
+	    for (i = 0; i < argc; ++i)
+	    {
+		int	len;
+
+		/* Convert each Unicode argument to the current codepage. */
+		WideCharToMultiByte_alloc(GetACP(), 0,
+				ArglistW[i], wcslen(ArglistW[i]) + 1,
+				(LPSTR *)&argv[i], &len, 0, 0);
+		if (argv[i] == NULL)
+		{
+		    /* Out of memory, clear everything. */
+		    while (i > 0)
+			free(argv[--i]);
+		    free(argv);
+		    argc = 0;
+		}
+	    }
+	}
+    }
+
+    global_argc = argc;
+    global_argv = argv;
+    if (argc > 0)
+	used_file_indexes = malloc(argc * sizeof(int));
+
+    if (argvp != NULL)
+	*argvp = argv;
+    return argc;
+}
+
+    void
+free_cmd_argsW(void)
+{
+    if (ArglistW != NULL)
+    {
+	GlobalFree(ArglistW);
+	ArglistW = NULL;
+    }
+}
+
+/*
+ * Remember "name" is an argument that was added to the argument list.
+ * This avoids that we have to re-parse the argument list when fix_arg_enc()
+ * is called.
+ */
+    void
+used_file_arg(char *name, int literal, int full_path)
+{
+    int		i;
+
+    if (used_file_indexes == NULL)
+	return;
+    for (i = used_file_argc + 1; i < global_argc; ++i)
+	if (STRCMP(global_argv[i], name) == 0)
+	{
+	    used_file_argc = i;
+	    used_file_indexes[used_file_count++] = i;
+	    break;
+	}
+    used_file_literal = literal;
+    used_file_full_path = full_path;
+}
+
+/*
+ * Remember the length of the argument list as it was.  If it changes then we
+ * leave it alone when 'encoding' is set.
+ */
+    void
+set_alist_count(void)
+{
+    used_alist_count = GARGCOUNT;
+}
+
+/*
+ * Fix the encoding of the command line arguments.  Invoked when 'encoding'
+ * has been changed while starting up.  Use the UCS-2 command line arguments
+ * and convert them to 'encoding'.
+ */
+    void
+fix_arg_enc(void)
+{
+    int		i;
+    int		idx;
+    char_u	*str;
+
+    /* Safety checks:
+     * - if argument count differs between the wide and non-wide argument
+     *   list, something must be wrong.
+     * - the file name arguments must have been located.
+     * - the length of the argument list wasn't changed by the user.
+     */
+    if (global_argc != (int)nArgsW
+	    || ArglistW == NULL
+	    || used_file_indexes == NULL
+	    || used_file_count == 0
+	    || used_alist_count != GARGCOUNT)
+	return;
+
+    /* Clear the argument list.  Make room for the new arguments. */
+    alist_clear(&global_alist);
+    if (ga_grow(&global_alist.al_ga, used_file_count) == FAIL)
+	return;	    /* out of memory */
+
+    for (i = 0; i < used_file_count; ++i)
+    {
+	idx = used_file_indexes[i];
+	str = ucs2_to_enc(ArglistW[idx], NULL);
+	if (str != NULL)
+	    alist_add(&global_alist, str, used_file_literal ? 2 : 0);
+    }
+
+    if (!used_file_literal)
+    {
+	/* Now expand wildcards in the arguments. */
+	/* Temporarily add '(' and ')' to 'isfname'.  These are valid
+	 * filename characters but are excluded from 'isfname' to make
+	 * "gf" work on a file name in parenthesis (e.g.: see vim.h). */
+	do_cmdline_cmd((char_u *)":let SaVe_ISF = &isf|set isf+=(,)");
+	alist_expand();
+	do_cmdline_cmd((char_u *)":let &isf = SaVe_ISF|unlet SaVe_ISF");
+    }
+
+    /* If wildcard expansion failed, we are editing the first file of the
+     * arglist and there is no file name: Edit the first argument now. */
+    if (curwin->w_arg_idx == 0 && curbuf->b_fname == NULL)
+    {
+	do_cmdline_cmd((char_u *)":rewind");
+	if (GARGCOUNT == 1 && used_file_full_path)
+	    (void)vim_chdirfile(alist_name(&GARGLIST[0]));
+    }
+}
+#endif
--- a/src/proto/gui_kde.pro
+++ b/src/proto/gui_kde.pro
@@ -1,4 +1,4 @@
-/* gui_kde.c */
+/* gui_kde.cc */
 void gui_mch_add_menu __ARGS((vimmenu_T *menu, int idx));
 void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
 void gui_mch_set_text_area_pos __ARGS((int x, int y, int w, int h));
@@ -16,4 +16,4 @@ void gui_mch_find_dialog __ARGS((exarg_T
 void gui_mch_replace_dialog __ARGS((exarg_T *eap));
 void ex_helpfind __ARGS((exarg_T *eap));
 void gui_make_popup __ARGS((char_u *path_name));
-/* vim: set ft=c : */
+/* vim: set ft=cpp : */
--- a/src/proto/gui_kde_x11.pro
+++ b/src/proto/gui_kde_x11.pro
@@ -1,4 +1,4 @@
-/* gui_kde_x11.c */
+/* gui_kde_x11.cc */
 void gui_mch_prepare __ARGS((int *argc, char **argv));
 void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
 void gui_mch_stop_blink __ARGS((void));
@@ -59,4 +59,4 @@ void mch_set_mouse_shape __ARGS((int sha
 char_u *gui_mch_font_dialog __ARGS((char_u *oldval));
 void gui_mch_settitle __ARGS((char_u *title,char_u *icon));
 void gui_mch_update_codec __ARGS((void));
-/* vim: set ft=c : */
+/* vim: set ft=cpp : */
--- a/src/proto/mbyte.pro
+++ b/src/proto/mbyte.pro
@@ -47,6 +47,7 @@ int dbcs_screen_head_off __ARGS((char_u 
 int utf_head_off __ARGS((char_u *base, char_u *p));
 int mb_off_next __ARGS((char_u *base, char_u *p));
 int mb_tail_off __ARGS((char_u *base, char_u *p));
+int utf_valid_string __ARGS((char_u *s, char_u *end));
 int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
 void mb_adjust_cursor __ARGS((void));
 void mb_adjustpos __ARGS((pos_T *lp));
--- a/src/proto/os_win32.pro
+++ b/src/proto/os_win32.pro
@@ -45,4 +45,9 @@ int mch_open __ARGS((char *name, int fla
 FILE *mch_fopen __ARGS((char *name, char *mode));
 int mch_copy_file_attribute __ARGS((char_u *from, char_u *to));
 int myresetstkoflw __ARGS((void));
+int get_cmd_argsW __ARGS((char ***argvp));
+void free_cmd_argsW __ARGS((void));
+void used_file_arg __ARGS((char *name, int literal, int full_path));
+void set_alist_count __ARGS((void));
+void fix_arg_enc __ARGS((void));
 /* vim: set ft=c : */
--- a/src/proto/syntax.pro
+++ b/src/proto/syntax.pro
@@ -13,7 +13,7 @@ char_u *get_syntax_name __ARGS((expand_T
 int syn_get_id __ARGS((long lnum, long col, int trans));
 int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
 void init_highlight __ARGS((int both, int reset));
-int load_colors __ARGS((char_u *p));
+int load_colors __ARGS((char_u *name));
 void do_highlight __ARGS((char_u *line, int forceit, int init));
 void restore_cterm_colors __ARGS((void));
 void set_normal_colors __ARGS((void));
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -1124,6 +1124,7 @@ qf_jump(dir, errornr, forceit)
 # endif
 	    if (win_split(0, n) == FAIL)
 		goto theend;
+	    opened_window = TRUE;	/* close it when fail */
 
 	    if (curwin->w_height < p_hh)
 		win_setheight((int)p_hh);
@@ -1137,7 +1138,7 @@ qf_jump(dir, errornr, forceit)
      * If currently in the quickfix window, find another window to show the
      * file in.
      */
-    if (bt_quickfix(curbuf))
+    if (bt_quickfix(curbuf) && !opened_window)
     {
 	/*
 	 * If there is no file specified, we don't know where to go.
--- a/src/screen.c
+++ b/src/screen.c
@@ -6651,9 +6651,14 @@ screenalloc(clear)
 			len = screen_Columns;
 		    else
 			len = Columns;
-		    mch_memmove(new_ScreenLines + new_LineOffset[new_row],
-			    ScreenLines + LineOffset[old_row],
-			    (size_t)len * sizeof(schar_T));
+#ifdef FEAT_MBYTE
+		    /* When switching to utf-8 dont copy characters, they
+		     * may be invalid now. */
+		    if (!(enc_utf8 && ScreenLinesUC == NULL))
+#endif
+			mch_memmove(new_ScreenLines + new_LineOffset[new_row],
+				ScreenLines + LineOffset[old_row],
+				(size_t)len * sizeof(schar_T));
 #ifdef FEAT_MBYTE
 		    if (enc_utf8 && ScreenLinesUC != NULL)
 		    {
--- a/src/structs.h
+++ b/src/structs.h
@@ -854,16 +854,18 @@ typedef struct
 
 #define CONV_NONE		0
 #define CONV_TO_UTF8		1
-#define CONV_TO_LATIN1		2
-#define CONV_ICONV		3
+#define CONV_9_TO_UTF8		2
+#define CONV_TO_LATIN1		3
+#define CONV_TO_LATIN9		4
+#define CONV_ICONV		5
 #ifdef WIN3264
-# define CONV_CODEPAGE		4	/* codepage -> codepage */
+# define CONV_CODEPAGE		10	/* codepage -> codepage */
 #endif
 #ifdef MACOS_X
-# define CONV_MAC_LATIN1	5
-# define CONV_LATIN1_MAC	6
-# define CONV_MAC_UTF8		7
-# define CONV_UTF8_MAC		8
+# define CONV_MAC_LATIN1	20
+# define CONV_LATIN1_MAC	21
+# define CONV_MAC_UTF8		22
+# define CONV_UTF8_MAC		23
 #endif
 
 /*
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -437,17 +437,21 @@ syntax_start(wp, lnum)
     linenr_T	parsed_lnum;
     linenr_T	first_stored;
     int		dist;
+    static int	changedtick = 0;	/* remember the last change ID */
 
     reg_syn = TRUE;	/* let vim_regexec() know we're using syntax */
 
     /*
      * After switching buffers, invalidate current_state.
+     * Also do this when a change was made, the current state may be invalid
+     * then.
      */
-    if (syn_buf != wp->w_buffer)
+    if (syn_buf != wp->w_buffer || changedtick != syn_buf->b_changedtick)
     {
 	invalidate_current_state();
 	syn_buf = wp->w_buffer;
     }
+    changedtick = syn_buf->b_changedtick;
     syn_win = wp;
 
     /*
@@ -7392,7 +7396,7 @@ get_attr_entry(table, aep)
 	return i + ATTR_OFF;
     }
 
-    if (table->ga_len + ATTR_OFF == 256)
+    if (table->ga_len + ATTR_OFF >= 256)
     {
 	/*
 	 * Running out of attribute entries!  remove all attributes, and
deleted file mode 100644
--- a/src/testdir/test.ok
+++ /dev/null
@@ -1,92 +0,0 @@
-Results of test49.vim:
-*** Test   1: OK (34695)
-*** Test   2: OK (34695)
-*** Test   3: OK (1384648195)
-*** Test   4: OK (32883)
-*** Test   5: OK (32883)
-*** Test   6: OK (603978947)
-*** Test   7: OK (90563)
-*** Test   8: OK (562493431)
-*** Test   9: OK (363)
-*** Test  10: OK (559615)
-*** Test  11: OK (2049)
-*** Test  12: OK (352256)
-*** Test  13: OK (145)
-*** Test  14: OK (42413)
-*** Test  15: OK (42413)
-*** Test  16: OK (8722)
-*** Test  17: OK (285127993)
-*** Test  18: OK (67224583)
-*** Test  19: OK (69275973)
-*** Test  20: OK (1874575085)
-*** Test  21: OK (147932225)
-*** Test  22: OK (4161)
-*** Test  23: OK (49)
-*** Test  24: OK (41)
-*** Test  25: OK (260177811)
-*** Test  26: OK (1681500476)
-*** Test  27: OK (1996459)
-*** Test  28: OK (1996459)
-*** Test  29: OK (170428555)
-*** Test  30: OK (190905173)
-*** Test  31: OK (190905173)
-*** Test  32: OK (354833067)
---- Test  33: sum = 178275600 (ok)
-*** Test  33: OK (1216907538)
-*** Test  34: OK (2146584868)
-*** Test  35: OK (2146584868)
-*** Test  36: OK (1071644672)
-*** Test  37: OK (1071644672)
-*** Test  38: OK (357908480)
-*** Test  39: OK (357908480)
-*** Test  40: OK (357908480)
-*** Test  41: OK (3076095)
-*** Test  42: OK (1505155949)
-*** Test  43: OK (1157763329)
-*** Test  44: OK (1031761407)
-*** Test  45: OK (1157763329)
-*** Test  46: OK (739407)
-*** Test  47: OK (371213935)
-*** Test  48: OK (756255461)
-*** Test  49: OK (179000669)
-*** Test  50: OK (363550045)
-*** Test  51: OK (40744667)
-*** Test  52: OK (1247112011)
-*** Test  53: OK (131071)
-*** Test  54: OK (2047)
-*** Test  55: OK (1023)
-*** Test  56: OK (511)
-*** Test  57: OK (2147450880)
-*** Test  58: OK (624945)
-*** Test  59: OK (2038431743)
-*** Test  60: OK (311511339)
-*** Test  61: OK (374889517)
-*** Test  62: OK (286331153)
-*** Test  63: OK (236978127)
-*** Test  64: OK (1499645335)
-*** Test  65: OK (70187)
-*** Test  66: OK (5464)
-*** Test  67: OK (212514423)
-*** Test  68: OK (212514423)
-*** Test  69: OK (8995471)
-*** Test  70: OK (69544277)
-*** Test  71: OK (34886997)
-*** Test  72: OK (1789569365)
-*** Test  73: OK (9032615)
-*** Test  74: OK (224907669)
-*** Test  75: OK (2000403408)
-*** Test  76: OK (1610087935)
-*** Test  77: OK (1388671)
-*** Test  78: OK (134217728)
-*** Test  79: OK (70288929)
-*** Test  80: OK (17895765)
-*** Test  81: OK (387)
-*** Test  82: OK (8454401)
-*** Test  83: OK (2835)
-*** Test  84: OK (934782101)
-*** Test  85: OK (198689)
---- Test  86: All tests were run with throwing exceptions on error.
-	      The $VIMNOERRTHROW control is not configured.
---- Test  86: All tests were run with throwing exceptions on interrupt.
-	      The $VIMNOINTTHROW control is not configured.
-*** Test  86: OK (50443995)
--- a/src/version.c
+++ b/src/version.c
@@ -17,6 +17,7 @@
  * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
  * It has been changed beyond recognition since then.
  *
+ * Differences between version 6.x and 7.x can be found with ":help version7".
  * Differences between version 5.x and 6.x can be found with ":help version6".
  * Differences between version 4.x and 5.x can be found with ":help version5".
  * Differences between version 3.0 and 4.x can be found with ":help version4".
@@ -1028,7 +1029,7 @@ intro_message(colon)
 	"",
 	N_("type  :q<Enter>               to exit         "),
 	N_("type  :help<Enter>  or  <F1>  for on-line help"),
-	N_("type  :help version6<Enter>   for version info"),
+	N_("type  :help version7<Enter>   for version info"),
 	NULL,
 	"",
 	N_("Running in Vi compatible mode"),
--- 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 (2004 June 30)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2004 June 30, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2004 Oct 4)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2004 Oct 4, compiled "
--- a/src/vim.h
+++ b/src/vim.h
@@ -1715,7 +1715,8 @@ typedef int VimClipboard;	/* This is req
 # define ENC_2WORD	0x100	    /* Unicode: UTF-16 */
 
 # define ENC_LATIN1	0x200	    /* Latin1 */
-# define ENC_MACROMAN	0x400	    /* Mac Roman (not Macro Man! :-) */
+# define ENC_LATIN9	0x400	    /* Latin9 */
+# define ENC_MACROMAN	0x800	    /* Mac Roman (not Macro Man! :-) */
 #endif
 
 #ifdef FEAT_MBYTE