changeset 826:1cdd2661f34c v7.0d01

updated for version 7.0d01
author vimboss
date Tue, 11 Apr 2006 21:38:50 +0000
parents 6675076019ae
children fd1b3406fd1c
files README.txt runtime/autoload/zip.vim runtime/doc/change.txt runtime/doc/index.txt runtime/doc/insert.txt runtime/doc/map.txt runtime/doc/message.txt runtime/doc/options.txt runtime/doc/pi_zip.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/version7.txt runtime/doc/vim-fr.1 runtime/doc/vim-fr.UTF-8.1 runtime/doc/vim.1 runtime/doc/vim.man runtime/doc/windows.txt runtime/filetype.vim runtime/ftplugin/kconfig.vim runtime/ftplugin/ocaml.vim runtime/indent/html.vim runtime/makemenu.vim runtime/synmenu.vim runtime/syntax/cl.vim runtime/syntax/dtd.vim runtime/syntax/kconfig.vim runtime/syntax/ocaml.vim runtime/syntax/progress.vim runtime/syntax/rexx.vim runtime/syntax/xml.vim src/Make_vms.mms src/dosinst.h src/edit.c src/eval.c src/ex_cmds.c src/option.c src/os_mac_rsrc/doc-txt.icns src/screen.c src/testdir/test57.in src/testdir/test57.ok src/version.h src/window.c
diffstat 42 files changed, 2218 insertions(+), 286 deletions(-) [+]
line wrap: on
line diff
--- a/README.txt
+++ b/README.txt
@@ -5,9 +5,9 @@ WHAT IS VIM
 
 Vim is an almost compatible version of the UNIX editor Vi.  Many new features
 have been added: multi-level undo, syntax highlighting, command line history,
-on-line help, filename completion, block operations, etc.  There is also a
-Graphical User Interface (GUI) available.  See "runtime/doc/vi_diff.txt" for
-differences with Vi.
+on-line help, spell checking, filename completion, block operations, etc.
+There is also a Graphical User Interface (GUI) available.  See
+"runtime/doc/vi_diff.txt" for differences with Vi.
 
 This editor is very useful for editing programs and other plain ASCII files.
 All commands are given with normal keyboard characters, so those who can type
@@ -56,15 +56,16 @@ distribute it.
 
 SPONSORING
 
-Fixing bugs and adding new features takes a lot of effort.  For a few years
-Bram has attempted to do this next to a full-time job.  During that time the
-todo list kept getting longer and longer.
+Fixing bugs and adding new features takes a lot of time and effort.  To show
+your appreciation for the work and motivate Bram and others to continue
+working on Vim please send a donation.
 
-In order for Bram to support Vim properly he needs your help.  Through your
-donations Bram will be able to have a part-time job and spend more time on
-fixing bugs and adding new features.
+Since Bram is back to a paid job the money will now be used to help children
+in Uganda.  See runtime/doc/uganda.txt.  But at the same time donations
+increase Bram's motivation to keep working on Vim!
 
 For the most recent information about sponsoring look on the Vim web site:
+
 	http://www.vim.org/sponsor/
 
 
@@ -132,6 +133,9 @@ MAIN AUTHOR
 Send any other comments, patches, pizza and suggestions to:
 
 	Bram Moolenaar		E-mail:	Bram@vim.org
-	Clematisstraat 30
-	5925 BE  Venlo		Tel: +31 77 387 2340
-	The Netherlands		Fax/voice-mail: +31 20 773 8272
+	Molenstraat 2
+	2161 HP  Lisse
+	The Netherlands
+
+This is the address of my parents, they will forward mail and eat the pizza.
+My actual address will change a couple of times in 2006.
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,7 +1,7 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:			Mar 22, 2006
-" Version:		7
+" Date:			Apr 10, 2006
+" Version:		8
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
 " License:		Vim License  (see vim's :help license)
 " Copyright:    Copyright (C) 2005 Charles E. Campbell, Jr. {{{1
@@ -22,7 +22,7 @@ if exists("g:loaded_zip")
  finish
 endif
 
-let g:loaded_zip     = "v7"
+let g:loaded_zip     = "v8"
 let s:zipfile_escape = ' ?&;\'
 
 " ----------------
@@ -83,7 +83,9 @@ fun! zip#Browse(zipfile)
   4,$g/^\s*----/d
   4,$g/^\s*\a/d
   $d
-  exe 'silent 4,$s/^.*\%'.namecol.'c//'
+  if namecol > 0
+   exe 'silent 4,$s/^.*\%'.namecol.'c//'
+  endif
 
   setlocal noma nomod ro
   noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
--- a/runtime/doc/change.txt
+++ b/runtime/doc/change.txt
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.0d.  Last change: 2006 Apr 09
+*change.txt*    For Vim version 7.0d.  Last change: 2006 Apr 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1508,7 +1508,7 @@ Vim has a sorting function and a sorting
 found here: |sort()|.
 
 							*:sor* *:sort*
-:[range]sor[t][!] [i][u][n][x][o] [/{pattern}/]
+:[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]
 			Sort lines in [range].  When no range is given all
 			lines are sorted.
 
@@ -1517,24 +1517,25 @@ found here: |sort()|.
 			With [i] case is ignored.
 
 			With [n] sorting is done on the first decimal number
-			in the line (after a {pattern} match).
+			in the line (after or inside a {pattern} match).
 
 			With [x] sorting is done on the first hexadecimal
-			number in the line (after a {pattern} match).  A
-			leading "0x" or "0X" is ignored.
+			number in the line (after or inside a {pattern}
+			match).  A leading "0x" or "0X" is ignored.
 
 			With [o] sorting is done on the first octal number in
-			the line (after a {pattern} match).
+			the line (after or inside a {pattern} match).
 
 			With [u] only keep the first of a sequence of
 			identical lines (ignoring case when [i] is used).
+			Without this flag, a sequence of identical lines
+			will be kept in their original order.
 			Note that leading and trailing white space may cause
 			lines to be different.
 
-			When /{pattern}/ is specified the text matched with
-			{pattern} is skipped, so that you sort on what comes
-			after the match.  For lines without a match sorting
-			starts in the first column (e.g., for empty lines).
+			When /{pattern}/ is specified and there is no [r] flag
+			the text matched with {pattern} is skipped, so that
+			you sort on what comes after the match.
 			Instead of the slash any non-letter can be used.
 			For example, to sort on the second comma-separated
 			field: >
@@ -1545,7 +1546,21 @@ found here: |sort()|.
 <			To sort on the first number in the line, no matter
 			what is in front of it: >
 				:sort /.*\ze\d/
-<
+
+<			With [r] sorting is done on the matching {pattern}
+			instead of skipping past it as described above.
+			For example, to sort on only the first three letters
+			of each line: >
+				:sort /\a\a\a/ r
+
+<			If a {pattern} is used, any lines which don't have a
+			match for {pattern} are kept in their current order,
+			but separate from the lines which do match {pattern}.
+			If you sorted in reverse, they will be in reverse
+			order after the sorted lines, otherwise they will be
+			in their original order, right before the sorted
+			lines.
+
 Note that using ":sort" with ":global" doesn't sort the matching lines, it's
 quite useless.
 
@@ -1553,8 +1568,8 @@ The details about sorting depend on the 
 guarantee that sorting is "stable" or obeys the current locale.  You will have
 to try it out.
 
-The sorting itself cannot be interrupted, because of using a system library
-function.  You can interrupt the preparation (for undo) and putting the sorted
-lines into the buffer.  In the last case you may end up with duplicated lines.
+The sorting can be interrupted, but if you interrupt it too late in the
+process you may end up with duplicated lines.  This also depends on the system
+library function used.
 
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/doc/index.txt
+++ b/runtime/doc/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 7.0d.  Last change: 2006 Apr 06
+*index.txt*     For Vim version 7.0d.  Last change: 2006 Apr 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -529,6 +529,7 @@ tag		command		   action in Normal mode	~
 |CTRL-W_P|	CTRL-W P	   go to preview window
 |CTRL-W_R|	CTRL-W R	   rotate windows upwards N times
 |CTRL-W_S|	CTRL-W S	   same as "CTRL-W s"
+|CTRL-W_T|	CTRL-W T	   move current window to a new tab page
 |CTRL-W_W|	CTRL-W W	   go to N previous window (wrap around)
 |CTRL-W_]|	CTRL-W ]	   split window and jump to tag under cursor
 |CTRL-W_^|	CTRL-W ^	   split current window and edit alternate
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.0d.  Last change: 2006 Apr 10
+*insert.txt*    For Vim version 7.0d.  Last change: 2006 Apr 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1419,8 +1419,8 @@ Features are:
   a tag)
 - when attribute has limited number of possible values help to complete
   them
-- complete names of entities (defined in |xml-omni-datafile| and in current file
-  with "<!ENTITY" declarations
+- complete names of entities (defined in |xml-omni-datafile| and in current
+  file with "<!ENTITY" declarations
 - when used after "</" CTRL-X CTRL-O will close the last opened tag
 
 Format of XML data file					*xml-omni-datafile*
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.0d.  Last change: 2006 Mar 20
+*map.txt*       For Vim version 7.0d.  Last change: 2006 Apr 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -265,6 +265,7 @@ Overview of which map command works in w
 :vmap  :vnoremap  :vunmap  :vmapclear     -         yes             -
 :omap  :onoremap  :ounmap  :omapclear     -          -             yes
 
+:nunmap can also be used outside of a monastery.
                                                 *mapmode-x* *mapmode-s*
 Some commands work both in Visual and Select mode, some in only one.  Note
 that quite often "Visual" is mentioned where both Visual and Select mode
--- a/runtime/doc/message.txt
+++ b/runtime/doc/message.txt
@@ -1,4 +1,4 @@
-*message.txt*   For Vim version 7.0d.  Last change: 2006 Mar 01
+*message.txt*   For Vim version 7.0d.  Last change: 2006 Apr 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -413,7 +413,10 @@ device and it isn't present.  You can ig
 
 You have used an ":unmap" command with an argument which is not an existing
 mapping.  All variations of this command give the same message: ":cunmap",
-":unmap!", etc.  Check for trailing white space.
+":unmap!", etc.  A few hints:
+- Check for trailing white space.
+- If the mapping is buffer-local you need to use ":unmap <buffer>".
+  |:map-<buffer>|
 
 							*E37* *E89*  >
   No write since last change (use ! to override)
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.0d.  Last change: 2006 Apr 10
+*options.txt*	For Vim version 7.0d.  Last change: 2006 Apr 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2068,6 +2068,11 @@ A jump table for the options with a shor
 	Highlight the screen column of the cursor with CursorColumn
 	|hl-CursorColumn|.  Useful to align text.  Will make screen redrawing
 	slower.
+	If you only want the highlighting in the current window you can use
+	these autocommands: >
+		au WinLeave * set nocursorline nocursorcolumn
+		au WinEnter * set cursorline cursorcolumn
+<
 
 			*'cursorline'* *'cul'* *'nocursorline'* *'nocul'*
 'cursorline' 'cul'	boolean	(default off)
--- a/runtime/doc/pi_zip.txt
+++ b/runtime/doc/pi_zip.txt
@@ -1,4 +1,4 @@
-*zip.txt*	For Vim version 7.0d.  Last change: 2006 Apr 03
+*zip.txt*	For Vim version 7.0d.  Last change: 2006 Apr 10
 
 				+====================+
 				| Zip File Interface |
@@ -33,6 +33,11 @@ 2. Usage					*zip-usage* *zip-manual*
 
 ==============================================================================
 3. History					*zip-history*
+   v8 Apr 10, 2006 * Bram Moolenaar reported that he received an error message
+                     due to "Pattern not found: ^.*\%0c"; this was caused by
+		     stridx finding a Name... at the beginning of the line;
+		     zip.vim tried 4,$s/^.*\%0c//, but that doesn't work.
+		     Fixed.
    v7 Mar 22, 2006 * escaped some characters that can cause filename handling
                      problems.
    v6 Dec 21, 2005 * writing to files not in directories caused problems -
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -3188,6 +3188,7 @@ CTRL-W_L	windows.txt	/*CTRL-W_L*
 CTRL-W_P	windows.txt	/*CTRL-W_P*
 CTRL-W_R	windows.txt	/*CTRL-W_R*
 CTRL-W_S	windows.txt	/*CTRL-W_S*
+CTRL-W_T	windows.txt	/*CTRL-W_T*
 CTRL-W_W	windows.txt	/*CTRL-W_W*
 CTRL-W_]	windows.txt	/*CTRL-W_]*
 CTRL-W_^	windows.txt	/*CTRL-W_^*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0d.  Last change: 2006 Apr 10
+*todo.txt*      For Vim version 7.0d.  Last change: 2006 Apr 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,7 +30,11 @@ be worked on, but only if you sponsor Vi
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Include autoload/xml/*.vim files?  Need to adjust install scripts then.
+
 ":mkspell" still takes much too long in Hungarian dictionary.
+- Are all prefixes really postponed now?
+- postpone secondary suffixes?
 
 Handle postponed prefix with COMPOUNDPERMITFLAG or COMPOUNDFORBIDFLAG.
     WFP_COMPPERMIT and WFP_COMPFORBID
@@ -47,8 +51,14 @@ New Hungarian dictionary. (Laci Nemeth)
     How is it supposed to work?
 -   implement using CHECKCOMPOUNDPATTERN: match words with sl_comppat[].
 
+Update vi_diff.txt for Vim 7 features.
+
+8   tab pages in the session file, if "tabpages" in 'sessionoptions'
+
 Add more tests for all new functionality in Vim 7.  Especially new functions.
 
+Do some of the 'cindent' bugs below.
+
 Win32: Describe how to do debugging. (George Reilly)
 
 Mac unicode patch (Da Woon Jung, Eckehard Berns):
@@ -1092,7 +1102,6 @@ 8   Support saving and restoring session
 Tab pages:
 9   GUI implementation for the tab pages line for other systems.
 8   Make GUI menu in tab pages line configurable.  Like the popup menu.
-8   tab pages in the session file, if "tabpages" in 'sessionoptions'
 8   :tabmove +N	 move tab page N pages forward
 8   :tabmove -N	 move tab page N pages backward
 7   :tabdup	 duplicate the tab with all its windows.
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0d.  Last change: 2006 Apr 10
+*version7.txt*  For Vim version 7.0d.  Last change: 2006 Apr 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -628,7 +628,7 @@ Win32: The ":winpos" command now also wo
 |:viusage|		Help for Vi commands (Nvi command).
 
 |:sort|			Sort lines in the buffer without depending on an
-			external command.
+			external command. (partly by Bryce Wagner)
 
 |:caddfile|		Add error messages to an existing quickfix list
 			(Yegappan Lakshmanan).
@@ -913,6 +913,7 @@ Haskell ftplugin file. (Nikolai Weibull)
 help ftplugin file. (Nikolai Weibull)
 indent ftplugin file. (Nikolai Weibull)
 Javascript ftplugin file. (Bram Moolenaar)
+Kconfig ftplugin and syntax file. (Nikolai Weibull)
 ld syntax, indent and ftplugin file. (Nikolai Weibull)
 lftp ftplugin file. (Nikolai Weibull)
 libao config ftplugin file. (Nikolai Weibull)
@@ -2420,4 +2421,26 @@ Now use Enter to select the match after 
 
 Added "usetab" to 'switchbuf'.
 
+
+--- fixes and changes since Vim 7.0d ---
+
+Added CTRL-W T: move a window to a new tab page.
+
+Using CTRL-X s in Insert mode to complete spelling suggestions and using BS
+deleted characters before the bad word.
+
+A few small fixes for the VMS makefile. (Zoltan Arpadffy)
+
+With a window of 91 lines 45 cols, ":vsp" scrolled the window.  Copy w_wrow
+when splitting a window and skip setting the height when it's already at the
+right value.
+
+Using <silent> in a mapping with a shell command and the GUI caused redraw
+to use wrong attributes.
+
+Win32: Using MSVC 4.1 for install.exe resulted in the start menu items to be
+created in the administrator directory instead of "All Users".  Define the
+CSIDL_ items if they are missing.
+
+
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/doc/vim-fr.1
+++ b/runtime/doc/vim-fr.1
@@ -1,7 +1,7 @@
 .\" Traduction Lundi 7 août 2000 par Richard Hitier
 .\" (richard.hitier@dial.oleane.com)
 .\" Mise à jour de la traduction par David Blanchet
-.\" (david.blanchet@free.fr) 2005-01-17
+.\" (david.blanchet@free.fr) 2006-06-10
 .\"
 .TH VIM 1 "22 Février 2002"
 .SH NOM
@@ -325,6 +325,10 @@ Quand N est omis, ouvre une fenêtre pour chaque fichier.
 Ouvre N fenêtres côte à côte.
 Quand N est omis, ouvre une fenêtre pour chaque fichier fichier.
 .TP
+\-p[N]
+Ouvre N onglets.
+Quand N est omis, ouvre un onglet pour chaque fichier fichier.
+.TP
 \-R
 Mode Lecture-Seule.
 Active l'option 'readonly'.
@@ -579,4 +583,4 @@ Cette page de manuel a été traduite par Richard Hitier.
 <richard.hitier@dial.oleane.com> 2000-08-07.
 .br
 Cette page de manuel a été mise à jour par David Blanchet.
-<david.blanchet@free.fr> 2005-01-17.
+<david.blanchet@free.fr> 2006-04-10.
--- a/runtime/doc/vim-fr.UTF-8.1
+++ b/runtime/doc/vim-fr.UTF-8.1
@@ -1,7 +1,7 @@
 .\" Traduction Lundi 7 août 2000 par Richard Hitier
 .\" (richard.hitier@dial.oleane.com)
 .\" Mise à jour de la traduction par David Blanchet
-.\" (david.blanchet@free.fr) 2005-01-17
+.\" (david.blanchet@free.fr) 2006-06-10
 .\"
 .TH VIM 1 "22 Février 2002"
 .SH NOM
@@ -325,6 +325,10 @@ Quand N est omis, ouvre une fenêtre pour chaque fichier.
 Ouvre N fenêtres côte à côte.
 Quand N est omis, ouvre une fenêtre pour chaque fichier fichier.
 .TP
+\-p[N]
+Ouvre N onglets.
+Quand N est omis, ouvre un onglet pour chaque fichier fichier.
+.TP
 \-R
 Mode Lecture-Seule.
 Active l'option 'readonly'.
@@ -579,4 +583,4 @@ Cette page de manuel a été traduite par Richard Hitier.
 <richard.hitier@dial.oleane.com> 2000-08-07.
 .br
 Cette page de manuel a été mise à jour par David Blanchet.
-<david.blanchet@free.fr> 2005-01-17.
+<david.blanchet@free.fr> 2006-04-10.
--- a/runtime/doc/vim.1
+++ b/runtime/doc/vim.1
@@ -1,4 +1,4 @@
-.TH VIM 1 "2002 Feb 22"
+.TH VIM 1 "2006 Apr 11"
 .SH NAME
 vim \- Vi IMproved, a programmers text editor
 .SH SYNOPSIS
--- a/runtime/doc/vim.man
+++ b/runtime/doc/vim.man
@@ -425,4 +425,4 @@ BUGS
 
 
 
-                                  2002 Feb 22                           VIM(1)
+                                  2006 Apr 11                           VIM(1)
--- a/runtime/doc/windows.txt
+++ b/runtime/doc/windows.txt
@@ -1,4 +1,4 @@
-*windows.txt*   For Vim version 7.0d.  Last change: 2006 Apr 06
+*windows.txt*   For Vim version 7.0d.  Last change: 2006 Apr 10
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -434,6 +434,13 @@ CTRL-W L	Move the current window to be a
 		contents is used for the new window.
 		{not available when compiled without the +vertsplit feature}
 
+						*CTRL-W_T*
+CTRL-W T	Move the current window to a new tab page.  This fails if
+		there is only one window in the current tab page.
+		When a count is specified the new tab page will be opened
+		before the tab page with this index.  Otherwise it comes after
+		the current tab page.
+
 ==============================================================================
 6. Window resizing					*window-resize*
 
--- 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:	2006 Apr 04
+" Last Change:	2006 Apr 11
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -784,6 +784,9 @@ au BufNewFile,BufRead *.k			setf kwt
 " KDE script
 au BufNewFile,BufRead *.ks			setf kscript
 
+" Kconfig
+au BufNewFile,BufRead Kconfig,Kconfig.debug	setf kconfig
+
 " Lace (ISE)
 au BufNewFile,BufRead *.ace,*.ACE		setf lace
 
@@ -1662,13 +1665,25 @@ au BufNewFile,BufRead /etc/sysctl.conf		
 " Sudoers
 au BufNewFile,BufRead /etc/sudoers,sudoers.tmp	setf sudoers
 
+" If the file has an extension of 't' and is in a directory 't' then it is
+" almost certainly a Perl test file.
 " If the first line starts with '#' and contains 'perl' it's probably a Perl
 " file.
+" (Slow test) If a file contains a 'use' statement then it is almost certainly
+" a Perl file.
 fun! s:FTperl()
+  if expand("%:e") == 't' && expand("%:p:h:t") == 't'
+    setf perl
+    return 1
+  endif
   if getline(1)[0] == '#' && getline(1) =~ 'perl'
     setf perl
     return 1
   endif
+  if search('^use\s\s*\k', 'nc', 30)
+    setf perl
+    return 1
+  endif
   return 0
 endfun
 
@@ -1961,7 +1976,7 @@ au BufNewFile,BufRead *.yaml,*.yml		setf
 " Zope
 "   dtml (zope dynamic template markup language), pt (zope page template),
 "   cpt (zope form controller page template)
-au BufNewFile,BufRead *.dtml,*.pt,*.cpt		call <SID>FTCheck_html()
+au BufNewFile,BufRead *.dtml,*.pt,*.cpt		call s:FThtml()
 "   zsql (zope sql method)
 au BufNewFile,BufRead *.zsql			call s:SQL()
 
new file mode 100644
--- /dev/null
+++ b/runtime/ftplugin/kconfig.vim
@@ -0,0 +1,14 @@
+" Vim filetype plugin file
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2006-04-10
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+
+
--- a/runtime/ftplugin/ocaml.vim
+++ b/runtime/ftplugin/ocaml.vim
@@ -4,11 +4,12 @@
 "              Markus Mottl        <markus.mottl@gmail.com>
 "              Stefano Zacchiroli  <zack@bononia.it>
 " URL:         http://www.ocaml.info/vim/ftplugin/ocaml.vim
-" Last Change: 2006 Feb 05
+" Last Change: 2006 Apr 11 - Fixed an initialization bug; fixed ASS abbrev (MM)
+"              2005 Oct 13 - removed GPL; better matchit support (MM, SZ)
 "
-" if exists("b:did_ftplugin")
-"   finish
-" endif
+if exists("b:did_ftplugin")
+  finish
+endif
 let b:did_ftplugin=1
 
 " Error handling -- helps moving where the compiler wants you to go
@@ -44,7 +45,7 @@ if !exists("no_plugin_maps") && !exists(
   vnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
 
   if !hasmapto('<Plug>Abbrev')
-    iabbrev <buffer> ASS (assert false (* XXX *))
+    iabbrev <buffer> ASS (assert (0=1) (* XXX *))
   endif
 endif
 
--- a/runtime/indent/html.vim
+++ b/runtime/indent/html.vim
@@ -1,8 +1,8 @@
 " Description:	html indenter
 " Author:	Johannes Zellner <johannes@zellner.org>
 " Last Change:	Tue, 27 Apr 2004 10:28:39 CEST
-" Globals:	g:html_indent_tags	   -- indenting tags
-"		g:html_indent_strict	   -- inhibit 'O O' elements
+" Globals:	g:html_indent_tags         -- indenting tags
+"		g:html_indent_strict       -- inhibit 'O O' elements
 "		g:html_indent_strict_table -- inhibit 'O -' elements
 
 " Only load this indent file when no other was loaded.
@@ -14,7 +14,7 @@ let b:did_indent = 1
 
 " [-- local settings (must come before aborting the script) --]
 setlocal indentexpr=HtmlIndentGet(v:lnum)
-setlocal indentkeys=o,O,*<Return>,<>>,<bs>,{,}
+setlocal indentkeys=o,O,*<Return>,<>>,{,}
 
 
 if exists('g:html_indent_tags')
--- a/runtime/makemenu.vim
+++ b/runtime/makemenu.vim
@@ -1,6 +1,6 @@
 " Script to define the syntax menu in synmenu.vim
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2006 Apr 10
+" Last Change:	2006 Apr 11
 
 " This is used by "make menu" in the src directory.
 edit <sfile>:p:h/synmenu.vim
@@ -237,6 +237,7 @@ SynMenu HIJK.Java.Java\ Properties:jprop
 SynMenu HIJK.JavaScript:javascript
 SynMenu HIJK.Jess:jess
 SynMenu HIJK.Jgraph:jgraph
+SynMenu HIJK.Kconfig:kconfig
 SynMenu HIJK.KDE\ script:kscript
 SynMenu HIJK.Kimwitu++:kwt
 SynMenu HIJK.KixTart:kix
--- a/runtime/synmenu.vim
+++ b/runtime/synmenu.vim
@@ -213,9 +213,10 @@ an 50.50.440 &Syntax.HIJK.Java.Java\ Pro
 an 50.50.450 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
 an 50.50.460 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
 an 50.50.470 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
-an 50.50.490 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
-an 50.50.500 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
-an 50.50.510 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
+an 50.50.490 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
+an 50.50.500 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
+an 50.50.510 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
+an 50.50.520 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
 an 50.60.100 &Syntax.L-Ma.Lace :cal SetSyn("lace")<CR>
 an 50.60.110 &Syntax.L-Ma.LamdaProlog :cal SetSyn("lprolog")<CR>
 an 50.60.120 &Syntax.L-Ma.Latte :cal SetSyn("latte")<CR>
--- a/runtime/syntax/cl.vim
+++ b/runtime/syntax/cl.vim
@@ -1,8 +1,9 @@
 " Vim syntax file
 " Language:	cl ("Clever Language" by Multibase, http://www.mbase.com.au)
 " Filename extensions: *.ent, *.eni
-" Maintainer:	Philip Uren <philu@system77.com>
-" Last update:	Wed May  2 10:30:30 EST 2001
+" Maintainer:	Philip Uren <philuSPAX@ieee.org> - Remove SPAX spam block
+" Last update:	Tue Apr 11 10:19:01 EST 2006
+" $Id$
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -28,12 +29,15 @@ syn match   clifError		"\<elsif\>"
 syn match   clifError		"\<else\>"
 syn match   clifError		"\<endif\>"
 
+syn match   clSpaceError	"\s\+$"
+
 " If and while regions
 syn region clLoop	transparent matchgroup=clWhile start="\<while\>" matchgroup=clWhile end="\<wend\>" contains=ALLBUT,clBreak,clProcedure
 syn region clIf		transparent matchgroup=clConditional start="\<if\>" matchgroup=clConditional end="\<endif\>"   contains=ALLBUT,clBreak,clProcedure
 
 " Make those TODO notes and debugging stand out!
 syn keyword	clTodo			contained	TODO BUG DEBUG FIX
+syn match	clNeedsWork		contained	"NEED[S]*\s\s*WORK"
 syn keyword clDebug			contained	debug
 
 syn match	clComment		"#.*$"		contains=clTodo,clNeedsWork
@@ -77,6 +81,7 @@ if	version >= 508 || !exists("did_cl_syn
 	endif
 
 	HiLink clifError			Error
+	HiLink clSpaceError			Error
 	HiLink clWhile				Repeat
 	HiLink clConditional		Conditional
 	HiLink clDebug				Debug
--- a/runtime/syntax/dtd.vim
+++ b/runtime/syntax/dtd.vim
@@ -52,11 +52,11 @@ endif
 
 " if this is a html like comment hightlight also
 " the opening <! and the closing > as Comment.
-syn region dtdComment		start=+<![ \t]*--+ end=+-->+ contains=dtdTodo
+syn region dtdComment		start=+<![ \t]*--+ end=+-->+ contains=dtdTodo,@Spell
 
 
 " proper DTD comment
-syn region dtdComment contained start=+--+ end=+--+ contains=dtdTodo
+syn region dtdComment contained start=+--+ end=+--+ contains=dtdTodo,@Spell
 
 
 " Start tags (keywords). This is contained in dtdFunction.
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/kconfig.vim
@@ -0,0 +1,728 @@
+" Vim syntax file
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2006-04-11
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if exists("g:kconfig_syntax_heavy")
+
+syn match   kconfigBegin              '^' nextgroup=kconfigKeyword
+                                      \ skipwhite
+
+syn keyword kconfigTodo               contained TODO FIXME XXX NOTE
+
+syn match   kconfigComment            display '#.*$' contains=kconfigTodo
+
+syn keyword kconfigKeyword            config nextgroup=kconfigSymbol
+                                      \ skipwhite
+
+syn keyword kconfigKeyword            menuconfig nextgroup=kconfigSymbol
+                                      \ skipwhite
+
+syn keyword kconfigKeyword            comment menu mainmenu
+                                      \ nextgroup=kconfigKeywordPrompt
+                                      \ skipwhite
+
+syn keyword kconfigKeyword            choice
+                                      \ nextgroup=@kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn keyword kconfigKeyword            endmenu endchoice
+
+syn keyword kconfigPreProc            source
+                                      \ nextgroup=kconfigPath
+                                      \ skipwhite
+
+" TODO: This is a hack.  The who .*Expr stuff should really be generated so
+" that we can reuse it for various nextgroups.
+syn keyword kconfigConditional        if endif
+                                      \ nextgroup=@kconfigConfigOptionIfExpr
+                                      \ skipwhite
+
+syn match   kconfigKeywordPrompt      '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigPath               '"[^"\\]*\%(\\.[^"\\]*\)*"\|\S\+'
+                                      \ contained
+
+syn match   kconfigSymbol             '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+" FIXME: There is – probably – no reason to cluster these instead of just
+" defining them in the same group.
+syn cluster kconfigConfigOptions      contains=kconfigTypeDefinition,
+                                      \        kconfigInputPrompt,
+                                      \        kconfigDefaultValue,
+                                      \        kconfigDependencies,
+                                      \        kconfigReverseDependencies,
+                                      \        kconfigNumericalRanges,
+                                      \        kconfigHelpText,
+                                      \        kconfigDefBool,
+                                      \        kconfigOptional
+
+syn keyword kconfigTypeDefinition     bool boolean tristate string hex int
+                                      \ contained
+                                      \ nextgroup=kconfigTypeDefPrompt,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigTypeDefPrompt      '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigTypeDefPrompt      "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn keyword kconfigInputPrompt        prompt
+                                      \ contained
+                                      \ nextgroup=kconfigPromptPrompt
+                                      \ skipwhite
+
+syn match   kconfigPromptPrompt       '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigPromptPrompt       "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn keyword   kconfigDefaultValue     default
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionExpr
+                                      \ skipwhite
+
+syn match   kconfigDependencies       'depends on\|requires'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfExpr
+                                      \ skipwhite
+
+syn keyword kconfigReverseDependencies select
+                                      \ contained
+                                      \ nextgroup=@kconfigRevDepSymbol
+                                      \ skipwhite
+
+syn cluster kconfigRevDepSymbol       contains=kconfigRevDepCSymbol,
+                                      \        kconfigRevDepNCSymbol
+
+syn match   kconfigRevDepCSymbol      '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigRevDepCSymbol      "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigRevDepNCSymbol     '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn keyword kconfigNumericalRanges    range
+                                      \ contained
+                                      \ nextgroup=@kconfigRangeSymbol
+                                      \ skipwhite
+
+syn cluster kconfigRangeSymbol        contains=kconfigRangeCSymbol,
+                                      \        kconfigRangeNCSymbol
+
+syn match   kconfigRangeCSymbol       '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=@kconfigRangeSymbol2
+                                      \ skipwhite skipnl
+
+syn match   kconfigRangeCSymbol       "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=@kconfigRangeSymbol2
+                                      \ skipwhite skipnl
+
+syn match   kconfigRangeNCSymbol      '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=@kconfigRangeSymbol2
+                                      \ skipwhite skipnl
+
+syn cluster kconfigRangeSymbol2       contains=kconfigRangeCSymbol2,
+                                      \        kconfigRangeNCSymbol2
+
+syn match   kconfigRangeCSymbol2      "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigRangeNCSymbol2     '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn region  kconfigHelpText           contained
+      \ matchgroup=kconfigConfigOption
+      \ start='\%(help\|---help---\)\s*\n\ze\z(\s\+\)'
+      \ skip='^$'
+      \ end='^\z1\@!'
+      \ nextgroup=@kconfigConfigOptions
+      \ skipwhite skipnl
+
+" XXX: Undocumented
+syn keyword kconfigDefBool            def_bool
+                                      \ contained
+                                      \ nextgroup=@kconfigDefBoolSymbol
+                                      \ skipwhite
+
+syn cluster kconfigDefBoolSymbol      contains=kconfigDefBoolCSymbol,
+                                      \        kconfigDefBoolNCSymbol
+
+syn match   kconfigDefBoolCSymbol     '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigDefBoolCSymbol     "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigDefBoolNCSymbol    '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+" XXX: This is actually only a valid option for “choiceâ€, but treating it
+" specially would require a lot of extra groups.
+syn keyword kconfigOptional           optional
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn keyword kconfigConfigOptionIf     if
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfExpr
+                                      \ skipwhite
+
+syn cluster kconfigConfigOptionIfExpr contains=@kconfigConfOptIfExprSym,
+                                      \        kconfigConfOptIfExprNeg,
+                                      \        kconfigConfOptIfExprGroup
+
+syn cluster kconfigConfOptIfExprSym   contains=kconfigConfOptIfExprCSym,
+                                      \        kconfigConfOptIfExprNCSym
+
+syn match   kconfigConfOptIfExprCSym  '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions,
+                                      \           kconfigConfOptIfExprAnd,
+                                      \           kconfigConfOptIfExprOr,
+                                      \           kconfigConfOptIfExprEq,
+                                      \           kconfigConfOptIfExprNEq
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfExprCSym  "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions,
+                                      \           kconfigConfOptIfExprAnd,
+                                      \           kconfigConfOptIfExprOr,
+                                      \           kconfigConfOptIfExprEq,
+                                      \           kconfigConfOptIfExprNEq
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfExprNCSym '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions,
+                                      \           kconfigConfOptIfExprAnd,
+                                      \           kconfigConfOptIfExprOr,
+                                      \           kconfigConfOptIfExprEq,
+                                      \           kconfigConfOptIfExprNEq
+                                      \ skipwhite skipnl
+
+syn cluster kconfigConfOptIfExprSym2  contains=kconfigConfOptIfExprCSym2,
+                                      \        kconfigConfOptIfExprNCSym2
+
+syn match   kconfigConfOptIfExprEq    '='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptIfExprSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfExprNEq   '!='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptIfExprSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfExprCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions,
+                                      \           kconfigConfOptIfExprAnd,
+                                      \           kconfigConfOptIfExprOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfExprNCSym2 '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions,
+                                      \           kconfigConfOptIfExprAnd,
+                                      \           kconfigConfOptIfExprOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfExprNeg   '!'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfExpr
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfExprAnd   '&&'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfExpr
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfExprOr    '||'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfExpr
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfExprGroup '('
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfGExp
+                                      \ skipwhite
+
+" TODO: hm, this kind of recursion doesn't work right.  We need another set of
+" expressions that have kconfigConfigOPtionIfGExp as nextgroup and a matcher
+" for '(' that sets it all off.
+syn cluster kconfigConfigOptionIfGExp contains=@kconfigConfOptIfGExpSym,
+                                      \        kconfigConfOptIfGExpNeg,
+                                      \        kconfigConfOptIfExprGroup
+
+syn cluster kconfigConfOptIfGExpSym   contains=kconfigConfOptIfGExpCSym,
+                                      \        kconfigConfOptIfGExpNCSym
+
+syn match   kconfigConfOptIfGExpCSym  '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigIf,
+                                      \           kconfigConfOptIfGExpAnd,
+                                      \           kconfigConfOptIfGExpOr,
+                                      \           kconfigConfOptIfGExpEq,
+                                      \           kconfigConfOptIfGExpNEq
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfGExpCSym  "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigIf,
+                                      \           kconfigConfOptIfGExpAnd,
+                                      \           kconfigConfOptIfGExpOr,
+                                      \           kconfigConfOptIfGExpEq,
+                                      \           kconfigConfOptIfGExpNEq
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfGExpNCSym '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptIfExprGrpE,
+                                      \           kconfigConfOptIfGExpAnd,
+                                      \           kconfigConfOptIfGExpOr,
+                                      \           kconfigConfOptIfGExpEq,
+                                      \           kconfigConfOptIfGExpNEq
+                                      \ skipwhite skipnl
+
+syn cluster kconfigConfOptIfGExpSym2  contains=kconfigConfOptIfGExpCSym2,
+                                      \        kconfigConfOptIfGExpNCSym2
+
+syn match   kconfigConfOptIfGExpEq    '='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptIfGExpSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfGExpNEq   '!='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptIfGExpSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfGExpCSym2 '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptIfExprGrpE,
+                                      \           kconfigConfOptIfGExpAnd,
+                                      \           kconfigConfOptIfGExpOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfGExpCSym2 "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptIfExprGrpE,
+                                      \           kconfigConfOptIfGExpAnd,
+                                      \           kconfigConfOptIfGExpOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfGExpNCSym2 '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptIfExprGrpE,
+                                      \           kconfigConfOptIfGExpAnd,
+                                      \           kconfigConfOptIfGExpOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptIfGExpNeg   '!'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfGExp
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfGExpAnd   '&&'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfGExp
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfGExpOr    '||'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionIfGExp
+                                      \ skipwhite
+
+syn match   kconfigConfOptIfExprGrpE  ')'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptions,
+                                      \           kconfigConfOptIfExprAnd,
+                                      \           kconfigConfOptIfExprOr
+                                      \ skipwhite skipnl
+
+
+syn cluster kconfigConfigOptionExpr   contains=@kconfigConfOptExprSym,
+                                      \        kconfigConfOptExprNeg,
+                                      \        kconfigConfOptExprGroup
+
+syn cluster kconfigConfOptExprSym     contains=kconfigConfOptExprCSym,
+                                      \        kconfigConfOptExprNCSym
+
+syn match   kconfigConfOptExprCSym    '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           kconfigConfOptExprAnd,
+                                      \           kconfigConfOptExprOr,
+                                      \           kconfigConfOptExprEq,
+                                      \           kconfigConfOptExprNEq,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptExprCSym    "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           kconfigConfOptExprAnd,
+                                      \           kconfigConfOptExprOr,
+                                      \           kconfigConfOptExprEq,
+                                      \           kconfigConfOptExprNEq,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptExprNCSym   '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           kconfigConfOptExprAnd,
+                                      \           kconfigConfOptExprOr,
+                                      \           kconfigConfOptExprEq,
+                                      \           kconfigConfOptExprNEq,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn cluster kconfigConfOptExprSym2    contains=kconfigConfOptExprCSym2,
+                                      \        kconfigConfOptExprNCSym2
+
+syn match   kconfigConfOptExprEq      '='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptExprSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptExprNEq     '!='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptExprSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptExprCSym2   '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           kconfigConfOptExprAnd,
+                                      \           kconfigConfOptExprOr,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptExprCSym2   "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           kconfigConfOptExprAnd,
+                                      \           kconfigConfOptExprOr,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptExprNCSym2  '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           kconfigConfOptExprAnd,
+                                      \           kconfigConfOptExprOr,
+                                      \           @kconfigConfigOptions
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptExprNeg     '!'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionExpr
+                                      \ skipwhite
+
+syn match   kconfigConfOptExprAnd     '&&'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionExpr
+                                      \ skipwhite
+
+syn match   kconfigConfOptExprOr      '||'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionExpr
+                                      \ skipwhite
+
+syn match   kconfigConfOptExprGroup   '('
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionGExp
+                                      \ skipwhite
+
+syn cluster kconfigConfigOptionGExp   contains=@kconfigConfOptGExpSym,
+                                      \        kconfigConfOptGExpNeg,
+                                      \        kconfigConfOptGExpGroup
+
+syn cluster kconfigConfOptGExpSym     contains=kconfigConfOptGExpCSym,
+                                      \        kconfigConfOptGExpNCSym
+
+syn match   kconfigConfOptGExpCSym    '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptExprGrpE,
+                                      \           kconfigConfOptGExpAnd,
+                                      \           kconfigConfOptGExpOr,
+                                      \           kconfigConfOptGExpEq,
+                                      \           kconfigConfOptGExpNEq
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptGExpCSym    "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptExprGrpE,
+                                      \           kconfigConfOptGExpAnd,
+                                      \           kconfigConfOptGExpOr,
+                                      \           kconfigConfOptGExpEq,
+                                      \           kconfigConfOptGExpNEq
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptGExpNCSym   '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptExprGrpE,
+                                      \           kconfigConfOptGExpAnd,
+                                      \           kconfigConfOptGExpOr,
+                                      \           kconfigConfOptGExpEq,
+                                      \           kconfigConfOptGExpNEq
+                                      \ skipwhite skipnl
+
+syn cluster kconfigConfOptGExpSym2    contains=kconfigConfOptGExpCSym2,
+                                      \        kconfigConfOptGExpNCSym2
+
+syn match   kconfigConfOptGExpEq      '='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptGExpSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptGExpNEq     '!='
+                                      \ contained
+                                      \ nextgroup=@kconfigConfOptGExpSym2
+                                      \ skipwhite
+
+syn match   kconfigConfOptGExpCSym2   '"[^"\\]*\%(\\.[^"\\]*\)*"'
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptExprGrpE,
+                                      \           kconfigConfOptGExpAnd,
+                                      \           kconfigConfOptGExpOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptGExpCSym2   "'[^'\\]*\%(\\.[^'\\]*\)*'"
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptExprGrpE,
+                                      \           kconfigConfOptGExpAnd,
+                                      \           kconfigConfOptGExpOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptGExpNCSym2  '\<\k\+\>'
+                                      \ contained
+                                      \ nextgroup=kconfigConfOptExprGrpE,
+                                      \           kconfigConfOptGExpAnd,
+                                      \           kconfigConfOptGExpOr
+                                      \ skipwhite skipnl
+
+syn match   kconfigConfOptGExpNeg     '!'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionGExp
+                                      \ skipwhite
+
+syn match   kconfigConfOptGExpAnd     '&&'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionGExp
+                                      \ skipwhite
+
+syn match   kconfigConfOptGExpOr      '||'
+                                      \ contained
+                                      \ nextgroup=@kconfigConfigOptionGExp
+                                      \ skipwhite
+
+syn match   kconfigConfOptExprGrpE    ')'
+                                      \ contained
+                                      \ nextgroup=kconfigConfigOptionIf,
+                                      \           kconfigConfOptExprAnd,
+                                      \           kconfigConfOptExprOr
+                                      \ skipwhite skipnl
+
+hi def link kconfigTodo                 Todo
+hi def link kconfigComment              Comment
+hi def link kconfigKeyword              Keyword
+hi def link kconfigPreProc              PreProc
+hi def link kconfigConditional          Conditional
+hi def link kconfigPrompt               String
+hi def link kconfigKeywordPrompt        kconfigPrompt
+hi def link kconfigPath                 String
+hi def link kconfigSymbol               String
+hi def link kconfigConstantSymbol       Constant
+hi def link kconfigConfigOption         Type
+hi def link kconfigTypeDefinition       kconfigConfigOption
+hi def link kconfigTypeDefPrompt        kconfigPrompt
+hi def link kconfigInputPrompt          kconfigConfigOption
+hi def link kconfigPromptPrompt         kconfigPrompt
+hi def link kconfigDefaultValue         kconfigConfigOption
+hi def link kconfigDependencies         kconfigConfigOption
+hi def link kconfigReverseDependencies  kconfigConfigOption
+hi def link kconfigRevDepCSymbol        kconfigConstantSymbol
+hi def link kconfigRevDepNCSymbol       kconfigSymbol
+hi def link kconfigNumericalRanges      kconfigConfigOption
+hi def link kconfigRangeCSymbol         kconfigConstantSymbol
+hi def link kconfigRangeNCSymbol        kconfigSymbol
+hi def link kconfigRangeCSymbol2        kconfigConstantSymbol
+hi def link kconfigRangeNCSymbol2       kconfigSymbol
+hi def link kconfigHelpText             Normal
+hi def link kconfigDefBool              kconfigConfigOption
+hi def link kconfigDefBoolCSymbol       kconfigConstantSymbol
+hi def link kconfigDefBoolNCSymbol      kconfigSymbol
+hi def link kconfigOptional             kconfigConfigOption
+hi def link kconfigConfigOptionIf       Conditional
+hi def link kconfigConfOptIfExprCSym    kconfigConstantSymbol
+hi def link kconfigConfOptIfExprNCSym   kconfigSymbol
+hi def link kconfigOperator             Operator
+hi def link kconfigConfOptIfExprEq      kconfigOperator
+hi def link kconfigConfOptIfExprNEq     kconfigOperator
+hi def link kconfigConfOptIfExprCSym2   kconfigConstantSymbol
+hi def link kconfigConfOptIfExprNCSym2  kconfigSymbol
+hi def link kconfigConfOptIfExprNeg     kconfigOperator
+hi def link kconfigConfOptIfExprAnd     kconfigOperator
+hi def link kconfigConfOptIfExprOr      kconfigOperator
+hi def link kconfigDelimiter            Delimiter
+hi def link kconfigConfOptIfExprGroup   kconfigDelimiter
+hi def link kconfigConfOptIfGExpCSym    kconfigConstantSymbol
+hi def link kconfigConfOptIfGExpNCSym   kconfigSymbol
+hi def link kconfigConfOptIfGExpEq      kconfigOperator
+hi def link kconfigConfOptIfGExpNEq     kconfigOperator
+hi def link kconfigConfOptIfGExpCSym2   kconfigConstantSymbol
+hi def link kconfigConfOptIfGExpNCSym2  kconfigSymbol
+hi def link kconfigConfOptIfGExpNeg     kconfigOperator
+hi def link kconfigConfOptIfGExpAnd     kconfigOperator
+hi def link kconfigConfOptIfGExpOr      kconfigOperator
+hi def link kconfigConfOptIfExprGrpE    kconfigDelimiter
+hi def link kconfigConfOptExprCSym      kconfigConstantSymbol
+hi def link kconfigConfOptExprNCSym     kconfigSymbol
+hi def link kconfigConfOptExprEq        kconfigOperator
+hi def link kconfigConfOptExprNEq       kconfigOperator
+hi def link kconfigConfOptExprCSym2     kconfigConstantSymbol
+hi def link kconfigConfOptExprNCSym2    kconfigSymbol
+hi def link kconfigConfOptExprNeg       kconfigOperator
+hi def link kconfigConfOptExprAnd       kconfigOperator
+hi def link kconfigConfOptExprOr        kconfigOperator
+hi def link kconfigConfOptExprGroup     kconfigDelimiter
+hi def link kconfigConfOptGExpCSym      kconfigConstantSymbol
+hi def link kconfigConfOptGExpNCSym     kconfigSymbol
+hi def link kconfigConfOptGExpEq        kconfigOperator
+hi def link kconfigConfOptGExpNEq       kconfigOperator
+hi def link kconfigConfOptGExpCSym2     kconfigConstantSymbol
+hi def link kconfigConfOptGExpNCSym2    kconfigSymbol
+hi def link kconfigConfOptGExpNeg       kconfigOperator
+hi def link kconfigConfOptGExpAnd       kconfigOperator
+hi def link kconfigConfOptGExpOr        kconfigOperator
+hi def link kconfigConfOptExprGrpE      kconfigConfOptIfExprGroup
+
+else
+
+syn keyword kconfigTodo               contained TODO FIXME XXX NOTE
+
+syn match   kconfigComment            display '#.*$' contains=kconfigTodo
+
+syn keyword kconfigKeyword            config menuconfig comment menu mainmenu
+
+syn keyword kconfigConditional        choice endchoice if endif
+
+syn keyword kconfigPreProc            source
+                                      \ nextgroup=kconfigPath
+                                      \ skipwhite
+
+syn match   kconfigSpecialChar        contained '\\.'
+
+syn region  kconfigPath               matchgroup=kconfigPath
+                                      \ start=+"+ skip=+\\\\\|\\\"+ end=+"+
+                                      \ contains=kconfigSpecialChar
+
+syn region  kconfigPath               matchgroup=kconfigPath
+                                      \ start=+'+ skip=+\\\\\|\\\'+ end=+'+
+                                      \ contains=kconfigSpecialChar
+
+syn match   kconfigPath               '\S\+'
+                                      \ contained
+
+syn region  kconfigString             matchgroup=kconfigString
+                                      \ start=+"+ skip=+\\\\\|\\\"+ end=+"+
+                                      \ contains=kconfigSpecialChar
+
+syn region  kconfigString             matchgroup=kconfigString
+                                      \ start=+'+ skip=+\\\\\|\\\'+ end=+'+
+                                      \ contains=kconfigSpecialChar
+
+syn keyword kconfigType               bool boolean tristate string hex int
+
+syn keyword kconfigOption             prompt default requires select range
+                                      \ optional
+syn match   kconfigOption             'depends\%( on\)'
+
+syn keyword kconfigMacro              def_bool def_tristate
+
+syn region  kconfigHelpText           contained
+      \ matchgroup=kconfigConfigOption
+      \ start='\%(help\|---help---\)\s*\n\ze\z(\s\+\)'
+      \ skip='^$'
+      \ end='^\z1\@!'
+
+hi def link kconfigTodo         Todo
+hi def link kconfigComment      Comment
+hi def link kconfigKeyword      Keyword
+hi def link kconfigConditional  Conditional
+hi def link kconfigPreProc      PreProc
+hi def link kconfigSpecialChar  SpecialChar
+hi def link kconfigPath         String
+hi def link kconfigString       String
+hi def link kconfigType         Type
+hi def link kconfigOption       Identifier
+hi def link kconfigHelpText     Normal
+hi def link kconfigmacro        Macro
+
+endif
+
+let b:current_syntax = "kconfig"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
--- a/runtime/syntax/ocaml.vim
+++ b/runtime/syntax/ocaml.vim
@@ -5,9 +5,9 @@
 "               Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
 "               Issac Trotts      <ijtrotts@ucdavis.edu>
 " URL:          http://www.ocaml.info/vim/syntax/ocaml.vim
-" Last Change:  2005 May 18 - Added 'NOTE' to highlighted comment words (MM)
+" Last Change:  2006 Apr 11 - Fixed an initialization bug (MM)
+"               2005 May 18 - Added 'NOTE' to highlighted comment words (MM)
 "               2005 Apr 14 - Fixed a small bug concerning 'include' (MM)
-"               2005 Mar 15 - Added a patch from David Baelde (MM)
 
 " A minor patch was applied to the official version so that object/end
 " can be distinguished from begin/end, which is used for indentation,
@@ -17,7 +17,7 @@
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
   syntax clear
-elseif exists("b:current_syntax") && b:current_syntax != "ocaml"
+elseif exists("b:current_syntax") && b:current_syntax == "ocaml"
   finish
 endif
 
--- a/runtime/syntax/progress.vim
+++ b/runtime/syntax/progress.vim
@@ -3,12 +3,12 @@
 " Filename extensions:	*.p (collides with Pascal),
 "						*.i (collides with assembler)
 "						*.w (collides with cweb)
-" Maintainer:			Philip Uren			<philu@computer.org>
-" Contributors:			Chris Ruprecht		<chrup@mac.com>
-"						Philip Uren			<philu@computer.org>
+" Maintainer:			Philip Uren			<philuSPAX@ieee.org> Remove "SPAX" spam block
+" Contributors:         Chris Ruprecht		<chrup@mac.com>
 "						Mikhail Kuperblum	<mikhail@whasup.com>
-" URL:					http://www.zeta.org.au/~philu/vim/progress.vim
-" Last Change:			Thu May  3 08:49:47 EST 2001
+"						John Florian		<jflorian@voyager.net>
+" Last Change:			Tue Apr 11 10:18:23 EST 2006
+" $Id$
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -24,6 +24,9 @@ else
   set iskeyword=@,48-57,_,-,!,#,$,%
 endif
 
+" The Progress editor doesn't cope with tabs very well.
+set expandtab
+
 syn case ignore
 
 " Progress Blocks of code and mismatched "end." errors.
@@ -31,7 +34,7 @@ syn match   ProgressEndError		"\<end\>"
 syn region ProgressDoBlock transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
 syn region ProgressForBlock transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
 syn region ProgressRepeatBlock transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
-syn region ProgressCaseBlock transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn region ProgressCaseBlock transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
 
 " These are Progress reserved words,
 " and they could go in ProgressReserved,
@@ -43,14 +46,23 @@ syn keyword ProgressFor				each where
 syn keyword	ProgressTodo			contained	TODO BUG FIX
 syn keyword ProgressDebug			contained	DEBUG
 syn keyword ProgressDebug						debugger
+syn match   ProgressTodo            contained   "NEED[S]*\s\s*WORK"
 
-syn keyword ProgressFunction	procedure function
+" If you like to highlight the whole line of
+" the start and end of procedures
+" to make the whole block of code stand out:
+syn match ProgressProcedure		"^\s*procedure.*"
+syn match ProgressProcedure		"^\s*end\s\s*procedure.*"
+syn match ProgressFunction		"^\s*function.*"
+syn match ProgressFunction		"^\s*end\s\s*function.*"
+" ... otherwise use this:
+" syn keyword ProgressFunction	procedure function
 
 syn keyword ProgressReserved	accum[ulate] active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending] assign at attr[-space]
 syn keyword ProgressReserved	authorization auto-ret[urn] avail[able] back[ground] before-h[ide] begins bell between blank break btos by call can-do can-find
-syn keyword ProgressReserved	center[ed] check chr clear clipboard col colon color col[umn] column-lab[el] col[umns] compiler connected control count-of
+syn keyword ProgressReserved	center[ed] character check chr clear clipboard col colon color col[umn] column-lab[el] col[umns] compiler connected control count-of
 syn keyword ProgressReserved	cpstream create ctos current current-changed current-lang[uage] current-window current_date curs[or] database dataservers
-syn keyword ProgressReserved	dbcodepage dbcollation dbname dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimals declare
+syn keyword ProgressReserved	dbcodepage dbcollation dbname dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimal decimals declare
 syn keyword ProgressReserved	def default default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp
 syn keyword ProgressReserved	disp[lay] distinct dos down drop editing enable encode entry error-stat[us] escape etime except exclusive
 syn keyword ProgressReserved	exclusive[-lock] exclusive-web-us[er] exists export false fetch field field[s] file-info[rmation] fill find find-case-sensitive
@@ -58,7 +70,7 @@ syn keyword ProgressReserved	find-global
 syn keyword ProgressReserved	fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line frame-name frame-row frame-val[ue]
 syn keyword ProgressReserved	from from-c[hars] from-p[ixels] gateway[s] get-byte get-codepage[s] get-coll[ations] get-key-val[ue] getbyte global go-on
 syn keyword ProgressReserved	go-pend[ing] grant graphic-e[dge] group having header help hide import in index indicator input input-o[utput] insert
-syn keyword ProgressReserved	into is is-attr[-space] join kblabel key-code key-func[tion] key-label keycode keyfunc[tion] keylabel keys keyword label
+syn keyword ProgressReserved	integer into is is-attr[-space] join kblabel key-code key-func[tion] key-label keycode keyfunc[tion] keylabel keys keyword label
 syn keyword ProgressReserved	last last-even[t] last-key last-of lastkey ldbname leave library like line-count[er] listi[ng] locked lookup machine-class
 syn keyword ProgressReserved	map member message message-lines mouse mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s]
 syn keyword ProgressReserved	no-lock no-map no-mes[sage] no-pause no-prefe[tch] no-undo no-val[idate] no-wait not null num-ali[ases] num-dbs num-entries
@@ -70,39 +82,51 @@ syn keyword ProgressReserved	release rep
 syn keyword ProgressReserved	scroll sdbname search seek select self session set setuser[id] share[-lock] shared show-stat[s] skip some space status stream
 syn keyword ProgressReserved	stream-io string-xref system-dialog table term term[inal] text text-cursor text-seg[-growth] this-procedure time title
 syn keyword ProgressReserved	to today top-only trans trans[action] trigger triggers trim true underl[ine] undo unform[atted] union unique unix up update
-syn keyword ProgressReserved	use-index use-revvideo use-underline user user[id] using v6frame value values view view-as vms wait-for web-con[text]
+syn keyword ProgressReserved	use-index use-revvideo use-underline user user[id] using v6frame value values variable view view-as vms wait-for web-con[text]
 syn keyword ProgressReserved	window window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xref yes _cbit
-syn keyword ProgressReserved	_control _list _memory _msg _pcontrol _serial[-num] _trace
+syn keyword ProgressReserved	_control _list _memory _msg _pcontrol _serial[-num] _trace 
 
 " Strings. Handles embedded quotes.
 " Note that, for some reason, Progress doesn't use the backslash, "\"
 " as the escape character; it uses tilde, "~".
-syn region ProgressString	matchgroup=ProgressQuote	start=+"+ end=+"+	skip=+\~"+
-syn region ProgressString	matchgroup=ProgressQuote	start=+'+ end=+'+	skip=+\~'+
+syn region ProgressString	matchgroup=ProgressQuote	start=+"+ end=+"+	skip=+\~'\|\~\~+
+syn region ProgressString	matchgroup=ProgressQuote	start=+'+ end=+'+	skip=+\~'\|\~\~+
 
-syn match  ProgressIdentifier			"\<[a-zA-Z_][a-zA-Z0-9_]*\>()"
+syn match  ProgressIdentifier			"\<[a-zA-Z_%#]+\>()"
 
 " syn match  ProgressDelimiter			"()"
 
-" syn match  ProgressMatrixDelimiter	"[][]"
-
+syn match  ProgressMatrixDelimiter	"[][]"
 " If you prefer you can highlight the range
 "syn match  ProgressMatrixDelimiter		"[\d\+\.\.\d\+]"
 
-syn match  ProgressNumber				"\<\d\+\(u\=l\=\|lu\|f\)\>"
+syn match  ProgressNumber				"\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
 syn match  ProgressByte					"\$[0-9a-fA-F]\+"
 
+" More values: Logicals, and Progress's unknown value, ?.
+syn match   ProgressNumber				"?"
+syn keyword ProgressNumber				true false yes no
+
 " If you don't like tabs:
-"syn match ProgressShowTab "\t"
-"syn match ProgressShowTabc "\t"
+syn match ProgressShowTab "\t"
+
+" If you don't like white space on the end of lines:
+" syn match   ProgressSpaceError "\s\+$"
 
 syn region ProgressComment		start="/\*"  end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug
-syn match ProgressInclude		"^[ 	]*[{].*\.i[}]"
+syn region ProgressInclude		start="^[ 	]*[{][^&]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
+syn region ProgressPreProc		start="&" end="\>" contained
 
-syn match ProgressSubstitute	"^[ 	]*[{].*[^i][}]"
-syn match ProgressPreProc		"^[ 	]*&.*"
-
-syn match ProgressOperator		"[!;|)(:.><+*=-]"
+" This next line works reasonably well.
+" syn match ProgressOperator        "[!;|)(:.><+*=-]"
+"
+" Progress allows a '-' to be part of an identifier.  To be considered
+" the subtraction/negation operation operator it needs a non-word
+" character on either side.  Also valid are cases where the minus
+" operation appears at the beginning or end of a line.
+" This next line trips up on "no-undo" etc.
+" syn match ProgressOperator    "[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
+syn match ProgressOperator      "[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
 
 syn keyword ProgressOperator	<= <> >= abs[olute] accelerator across add-first add-last advise alert-box allow-replication ansi-only anywhere append appl-alert[-boxes] application as-cursor ask-overwrite
 syn keyword ProgressOperator	attach[ment] auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-z[ap] available-formats ave[rage] avg backward[s] base-key batch[-mode] bgc[olor] binary
@@ -114,7 +138,7 @@ syn keyword ProgressOperator	column-labe
 syn keyword ProgressOperator	connect constrained contents context context-pop[up] control-containe[r] c[ontrol-form] convert-to-offse[t] convert count cpcase cpcoll cpint[ernal] cplog
 syn keyword ProgressOperator	cpprint cprcodein cprcodeout cpterm crc-val[ue] c[reate-control] create-result-list-entry create-test-file current-column current-environm[ent] current-iteration
 syn keyword ProgressOperator	current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-entry-retur[n] data-t[ype] date date-f[ormat] day db-references
-syn keyword ProgressOperator	dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] dec[imal] default-b[utton] default-extensio[n] defer-lob-fetch defined delete-char delete-current-row
+syn keyword ProgressOperator	dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] dec[imal] default-b[utton] default-extensio[n] defer-lob-fetch define defined delete-char delete-current-row
 syn keyword ProgressOperator	delete-line delete-selected-row delete-selected-rows deselect-focused-row deselect-rows deselect-selected-row d[esign-mode] dialog-box dialog-help dir disabled display-message
 syn keyword ProgressOperator	display-t[ype] double drag-enabled drop-down drop-down-list dump dynamic echo edge edge[-chars] edge-p[ixels] editor empty end-key endkey entered eq error error-col[umn]
 syn keyword ProgressOperator	error-row event-t[ype] event[s] exclusive-id execute exp expand extended extent external extract fetch-selected-row fgc[olor] file file-name file-off[set] file-type
@@ -174,38 +198,30 @@ if version >= 508 || !exists("did_progre
   endif
 
   " The default methods for highlighting. Can be overridden later.
-  HiLink ProgressByte			    Number
+  HiLink ProgressByte				Number
   HiLink ProgressCase				Repeat
-  HiLink ProgressComment			StatusLine
+  HiLink ProgressComment			Comment
   HiLink ProgressConditional		Conditional
   HiLink ProgressDebug				Debug
   HiLink ProgressDo					Repeat
   HiLink ProgressEndError			Error
   HiLink ProgressFor				Repeat
   HiLink ProgressFunction			Procedure
+  HiLink ProgressIdentifier			Identifier
   HiLink ProgressInclude			Include
-  HiLink ProgressLabel				Label
   HiLink ProgressMatrixDelimiter	Identifier
-  HiLink ProgressModifier			Type
   HiLink ProgressNumber				Number
-  HiLink ProgressOperator			Function
+  HiLink ProgressOperator			Operator
   HiLink ProgressPreProc			PreProc
   HiLink ProgressProcedure			Procedure
   HiLink ProgressQuote				Delimiter
   HiLink ProgressRepeat				Repeat
-  HiLink ProgressReserved			Identifier
+  HiLink ProgressReserved			Statement
+  HiLink ProgressSpaceError			Error
   HiLink ProgressString				String
-  HiLink ProgressStructure			Structure
-  HiLink ProgressSubstitute			PreProc
   HiLink ProgressTodo				Todo
   HiLink ProgressType				Statement
-  HiLink ProgressUnclassified		Statement
-
-  " Optional highlighting
-  " HiLink ProgressDelimiter		Identifier
-  " HiLink ProgressShowTab			Error
-  " HiLink ProgressShowTabc			Error
-  " HiLink ProgressIdentifier		Identifier
+  HiLink ProgressShowTab			Error
 
   delcommand HiLink
 endif
--- a/runtime/syntax/rexx.vim
+++ b/runtime/syntax/rexx.vim
@@ -1,11 +1,15 @@
 " Vim syntax file
 " Language:	Rexx
 " Maintainer:	Thomas Geulig <geulig@nentec.de>
-" Last Change:	2001 May 2
-" URL:		http://mywebpage.netscape.com/sharpPeople/vim/syntax/rexx.vim
+" Last Change:  2005 Dez  9, added some <http://www.ooRexx.org>-coloring,
+"                            line comments, do *over*, messages, directives,
+"                            highlighting classes, methods, routines and requires
+"               Rony G. Flatscher <rony.flatscher@wu-wien.ac.at>
 "
-" Special Thanks to Dan Sharp <dwsharp@hotmail.com> for comments and additions
-" (and providing the webspace)
+" URL:		http://www.geulig.de/vim/rexx.vim
+"
+" Special Thanks to Dan Sharp <dwsharp@hotmail.com> and Rony G. Flatscher
+" <Rony.Flatscher@wu-wien.ac.at> for comments and additions
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -17,65 +21,126 @@ endif
 
 syn case ignore
 
+" add to valid identifier chars
+setlocal iskeyword+=.
+setlocal iskeyword+=!
+setlocal iskeyword+=?
+
+" ---rgf, position important: must be before comments etc. !
+syn match rexxOperator "[-=|\/\\\+\*\[\],;<>&\~]"
+
+syn match rexxIdentifier        "\<[a-zA-Z\!\?_]\([a-zA-Z0-9._?!]\)*\>"
+syn match rexxEnvironmentSymbol "\<\.\+\([a-zA-Z0-9._?!]\)*\>"
+
+
 " A Keyword is the first symbol in a clause.  A clause begins at the start
 " of a line or after a semicolon.  THEN, ELSE, OTHERWISE, and colons are always
 " followed by an implied semicolon.
-syn match rexxClause "\(^\|;\|:\|then \|else \|otherwise \)\s*\w\+" contains=ALL
+syn match rexxClause "\(^\|;\|:\|then \|else \|otherwise \)\s*\w\+" contains=ALLBUT,rexxParse2,rexxRaise2
+
 
 " Considered keywords when used together in a phrase and begin a clause
-syn match rexxKeyword contained "\<signal\( on \(error\|failure\|halt\|notready\|novalue\|syntax\|lostdigits\)\(\s\+name\)\=\)\=\>"
-syn match rexxKeyword contained "\<signal off \(error\|failure\|halt\|notready\|novalue\|syntax\|lostdigits\)\>"
-syn match rexxKeyword contained "\<call off \(error\|failure\|halt\|notready\)\>"
-syn match rexxKeyword contained "\<parse \(upper \)\=\(arg\|linein\|pull\|source\|var\|value\|version\)\>"
+syn match rexxParse "\<parse\s*\(\(upper\|lower\|caseless\)\s*\)\=\(arg\|linein\|pull\|source\|var\|\<value\>\|version\)\>"
+syn match rexxParse2 "\<with\>" contained containedin=rexxParse
+
+
 syn match rexxKeyword contained "\<numeric \(digits\|form \(scientific\|engineering\|value\)\|fuzz\)\>"
 syn match rexxKeyword contained "\<\(address\|trace\)\( value\)\=\>"
-syn match rexxKeyword contained "\<procedure\( expose\)\=\>"
-syn match rexxKeyword contained "\<do\( forever\)\=\>"
+syn match rexxKeyword contained "\<procedure\(\s*expose\)\=\>"
+syn match rexxKeyword contained "\<do\>\(\s*forever\)\=\>"
+syn match rexxKeyword contained "\<use\>\s*\<arg\>"
 
 " Another keyword phrase, separated to aid highlighting in rexxFunction
-syn match rexxKeyword2 contained "\<call\( on \(error\|failure\|halt\|notready\)\(\s\+name\)\=\)\=\>"
+syn match rexxKeyword contained "\<signal\(\s*\(on\|off\)\s*\(any\|error\|failure\|halt\|lostdigits\|nomethod\|nostring\|notready\|novalue\|syntax\|user\s*\k*\)\(\s\+name\)\=\)\=\>"
+syn match rexxKeyword2 contained "\<call\(\s*\(on\|off\)\s*\(any\|error\|failure\|halt\|notready\|user\s*\k*\)\(\s\+name\)\=\)\=\>"
+
 
 " Considered keywords when they begin a clause
-syn match rexxKeyword contained "\<\(arg\|drop\|end\|exit\|if\|interpret\|iterate\|leave\|nop\)\>"
-syn match rexxKeyword contained "\<\(options\|pull\|push\|queue\|return\|say\|select\|trace\)\>"
+syn match rexxKeyword contained "\<\(arg\|do\|drop\|end\|exit\|expose\|forward\|if\|interpret\|iterate\|leave\|nop\)\>"
+syn match rexxKeyword contained "\<\(options\|pull\|push\|queue\|raise\|reply\|return\|say\|select\|trace\)\>"
 
 " Conditional phrases
-syn match rexxConditional "\(^\s*\| \)\(to\|by\|for\|until\|while\|then\|when\|otherwise\|else\)\( \|\s*$\)" contains=ALLBUT,rexxConditional
-syn match rexxConditional contained "\<\(to\|by\|for\|until\|while\|then\|when\|else\|otherwise\)\>"
+syn match rexxConditional  "\(^\s*\| \)\(to\|by\|for\|until\|while\|then\|when\|otherwise\|else\|over\)\( \|\s*$\)"
+syn match rexxConditional contained "\<\(to\|by\|for\|until\|while\|then\|when\|otherwise\|else\|over\)\>"
+
+" must be after Conditional phrases!
+syn match rexxKeyword ".*\<\(then\|else\)\s*\<do\>"
 
-" Assignments -- a keyword followed by an equal sign becomes a variable
-syn match rexxAssign "\<\w\+\s*=\s*" contains=rexxSpecialVariable
+" Raise statement
+syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\="
+syn match rexxRaise2 "\<\(additional\|array\|description\|exit\|return\)\>" contained containedin=rexxRaise
+
+" Forward statement keywords
+syn match rexxForward  "\(^\|;\|:\)\<forward\>\s*"
+syn match rexxForward2 "\<\(arguments\|array\|continue\|message\|class\|to\)\>" contained containedin=rexxForward
 
 " Functions/Procedures
-syn match rexxFunction	"\<\h\w*\(/\*\s*\*/\)*("me=e-1 contains=rexxComment,rexxConditional,rexxKeyword
-syn match rexxFunction	"\<\(arg\|trace\)\(/\*\s*\*/\)*("me=e-1
-syn match rexxFunction	"\<call\( on \(error\|failure\|halt\|notready\)\(\s\+name\)\=\)\=\>\s\+\w\+\>" contains=rexxKeyword2
+syn match rexxFunction	"\<\w*\(/\*\s*\*/\)*("me=e-1 contains=rexxComment,rexxConditional,rexxKeyword,rexxIdentifier
+syn match rexxFunction 	"\<\<[a-zA-Z\!\?_]\([a-zA-Z0-9._?!]\)*\>("me=e-1
+syn match rexxFunction	"\<call\s\+\k\+\>"  contains=rexxKeyword2
+syn match rexxFunction "[()]"
 
 " String constants
-syn region rexxString	  start=+"+ skip=+\\\\\|\\'+ end=+"+
-syn region rexxString	  start=+'+ skip=+\\\\\|\\"+ end=+'+
-syn match  rexxCharacter  +"'[^\\]'"+
+syn region rexxString	  start=+"+ skip=+""+ end=+"\(x\|b\)\=+ oneline
+syn region rexxString	  start=+'+ skip=+''+ end=+'\(x\|b\)\=+ oneline
 
 " Catch errors caused by wrong parenthesis
-syn region rexxParen transparent start='(' end=')' contains=ALLBUT,rexxParenError,rexxTodo,rexxUserLabel,rexxKeyword
+syn region rexxParen transparent start='(' end=')' contains=ALLBUT,rexxParenError,rexxTodo,rexxLabel,rexxKeyword
 syn match rexxParenError	 ")"
 syn match rexxInParen		"[\\[\\]{}]"
 
 " Comments
 syn region rexxComment		start="/\*" end="\*/" contains=rexxTodo,rexxComment
 syn match  rexxCommentError	"\*/"
+syn match  rexxLineComment       /--.*/
 
 syn keyword rexxTodo contained	TODO FIXME XXX
 
+
+" ooRexx messages
+syn region rexxMessageOperator start="\(\~\|\~\~\)" end="\(\S\|\s\)"me=e-1
+syn match rexxMessage "\(\~\|\~\~\)\s*\<\.*[a-zA-Z]\([a-zA-Z0-9._?!]\)*\>" contains=rexxMessageOperator
+
 " Highlight User Labels
-syn match rexxUserLabel		 "\<\I\i*\s*:"me=e-1
+syn match rexxLabel		 "^\s*\k*\s*:"me=e-1
+
+syn match rexxLineContinue ",\ze\s*\(--.*\|\/\*.*\)*$"
+" the following is necessary, otherwise three consecutive dashes will cause it to highlight the first one
+syn match rexxLineContinue "-\ze\(\s+--.*\|\s*\/\*.*\)*$"
 
 " Special Variables
-syn keyword rexxSpecialVariable  sigl rc result
-syn match   rexxCompoundVariable "\<\w\+\.\w*\>"
+syn keyword rexxSpecialVariable  sigl rc result self super
+
+" Constants
+syn keyword rexxConst .true .false .nil
+
+" ooRexx builtin classes, first define dot to be o.k. in keywords
+syn keyword rexxBuiltinClass .object .class .method .message
+syn keyword rexxBuiltinClass .monitor .alarm
+syn keyword rexxBuiltinClass .stem .stream .string
+syn keyword rexxBuiltinClass .mutablebuffer
+syn keyword rexxBuiltinClass .array .list .queue .directory .table .set
+syn keyword rexxBuiltinClass .relation .bag .supplier .regularExpressions
+
+" Windows-only classes
+syn keyword rexxBuiltinClass .OLEObject .MenuObject .WindowsClipboard .WindowsEventLog
+syn keyword rexxBuiltinClass .WindowsManager .WindowObject .WindowsProgramManager
+
+
+" ooRexx directives, ---rgf location important, otherwise directives in top of
+" file not matched!
+syn region rexxClass    start="::\s*class\s*"ms=e+1    end="\ze\(\s\|;\|$\)"
+syn region rexxMethod   start="::\s*method\s*"ms=e+1   end="\ze\(\s\|;\|$\)"
+syn region rexxRequires start="::\s*requires\s*"ms=e+1 end="\ze\(\s\|;\|$\)"
+syn region rexxRoutine  start="::\s*routine\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+
+syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxComment,rexxLineComment,rexxClass,rexxMethod,rexxRoutine,rexxRequires keepend
+
+
 
 if !exists("rexx_minlines")
-  let rexx_minlines = 10
+"  let rexx_minlines = 10
+  let rexx_minlines = 500
 endif
 exec "syn sync ccomment rexxComment minlines=" . rexx_minlines
 
@@ -90,7 +155,7 @@ if version >= 508 || !exists("did_rexx_s
     command -nargs=+ HiLink hi def link <args>
   endif
 
-  HiLink rexxUserLabel		Function
+  HiLink rexxLabel		Function
   HiLink rexxCharacter		Character
   HiLink rexxParenError		rexxError
   HiLink rexxInParen		rexxError
@@ -105,6 +170,34 @@ if version >= 508 || !exists("did_rexx_s
   HiLink rexxSpecialVariable	Special
   HiLink rexxConditional	rexxKeyword
 
+  HiLink rexxOperator		Operator
+  HiLink rexxMessageOperator	rexxOperator
+  HiLink rexxLineComment	RexxComment
+
+  HiLink rexxLineContinue	WildMenu
+
+  HiLink rexxDirective		rexxKeyword
+  HiLink rexxClass              Type
+  HiLink rexxMethod             rexxFunction
+  HiLink rexxRequires           Include
+  HiLink rexxRoutine            rexxFunction
+
+  HiLink rexxConst		Constant
+  HiLink rexxTypeSpecifier	Type
+  HiLink rexxBuiltinClass	rexxTypeSpecifier
+
+  HiLink rexxEnvironmentSymbol  rexxConst
+  HiLink rexxMessage		rexxFunction
+
+  HiLink rexxParse              rexxKeyword
+  HiLink rexxParse2             rexxParse
+
+  HiLink rexxRaise              rexxKeyword
+  HiLink rexxRaise2             rexxRaise
+
+  HiLink rexxForward            rexxKeyword
+  HiLink rexxForward2           rexxForward
+
   delcommand HiLink
 endif
 
--- a/runtime/syntax/xml.vim
+++ b/runtime/syntax/xml.vim
@@ -58,8 +58,8 @@ syn match xmlError "[<&]"
 "
 " <tag foo.attribute = "value">
 "                      ^^^^^^^
-syn region  xmlString contained start=+"+ end=+"+ contains=xmlEntity display
-syn region  xmlString contained start=+'+ end=+'+ contains=xmlEntity display
+syn region  xmlString contained start=+"+ end=+"+ contains=xmlEntity,@Spell display
+syn region  xmlString contained start=+'+ end=+'+ contains=xmlEntity,@Spell display
 
 
 " punctuation (within attributes) e.g. <tag xml:foo.attribute ...>
@@ -183,7 +183,7 @@ if exists('g:xml_syntax_folding')
 	\ end=+</\z1\_\s\{-}>+
 	\ matchgroup=xmlEndTag end=+/>+
 	\ fold
-	\ contains=xmlTag,xmlEndTag,xmlCdata,xmlRegion,xmlComment,xmlEntity,xmlProcessing,@xmlRegionHook
+	\ contains=xmlTag,xmlEndTag,xmlCdata,xmlRegion,xmlComment,xmlEntity,xmlProcessing,@xmlRegionHook,@Spell
 	\ keepend
 	\ extend
 
@@ -239,7 +239,7 @@ syn region  xmlCommentPart
     \ start=+--+
     \ end=+--+
     \ contained
-    \ contains=xmlTodo,@xmlCommentHook
+    \ contains=xmlTodo,@xmlCommentHook,@Spell
 
 
 " CData sections
@@ -249,7 +249,7 @@ syn region  xmlCommentPart
 syn region    xmlCdata
     \ start=+<!\[CDATA\[+
     \ end=+]]>+
-    \ contains=xmlCdataStart,xmlCdataEnd,@xmlCdataHook
+    \ contains=xmlCdataStart,xmlCdataEnd,@xmlCdataHook,@Spell
     \ keepend
     \ extend
 
--- a/src/Make_vms.mms
+++ b/src/Make_vms.mms
@@ -2,7 +2,7 @@
 # Makefile for Vim on OpenVMS
 #
 # Maintainer:   Zoltan Arpadffy <arpadffy@polarhome.com>
-# Last change:  2006 Mar 31
+# Last change:  2006 Apr 11
 #
 # This has script been tested on VMS 6.2 to 8.2 on DEC Alpha, VAX and IA64
 # with MMS and MMK
@@ -44,6 +44,7 @@ MODEL = BIG
 
 # GUI or terminal mode executable.
 # Comment out if you want just the character terminal mode only.
+# GUI with Motif
 GUI = YES
 
 # GUI with GTK
@@ -136,12 +137,24 @@ VIMRUN  = ""
 
 CONFIG_H = os_vms_conf.h
 
+# GTK or XPM but not both
 .IFDEF GTK
 .IFDEF GUI
-.IFDEF XPM
 .ELSE
 GUI = YES
 .ENDIF
+.IFDEF XPM
+XPM = ""
+.ENDIF
+.ENDIF
+
+.IFDEF XPM
+.IFDEF GUI
+.ELSE
+GUI = YES
+.ENDIF
+.IFDEF GTK
+GTK = ""
 .ENDIF
 .ENDIF
 
--- a/src/dosinst.h
+++ b/src/dosinst.h
@@ -207,6 +207,14 @@ searchpath_save(char *name)
 }
 
 #ifdef WIN3264
+
+#ifndef CSIDL_COMMON_PROGRAMS
+# define CSIDL_COMMON_PROGRAMS 0x0017
+#endif
+#ifndef CSIDL_COMMON_DESKTOPDIRECTORY
+# define CSIDL_COMMON_DESKTOPDIRECTORY 0x0019
+#endif
+
 /*
  * Get the path to a requested Windows shell folder.
  *
@@ -234,22 +242,14 @@ get_shell_folder_path(
     if (strcmp(shell_folder_name, "desktop") == 0)
     {
 	pcsidl = &desktop_csidl;
-#ifdef CSIDL_COMMON_DESKTOPDIRECTORY
 	csidl = CSIDL_COMMON_DESKTOPDIRECTORY;
 	alt_csidl = CSIDL_DESKTOP;
-#else
-	csidl = CSIDL_DESKTOP;
-#endif
     }
     else if (strncmp(shell_folder_name, "Programs", 8) == 0)
     {
 	pcsidl = &programs_csidl;
-#ifdef CSIDL_COMMON_PROGRAMS
 	csidl = CSIDL_COMMON_PROGRAMS;
 	alt_csidl = CSIDL_PROGRAMS;
-#else
-	csidl = CSIDL_PROGRAMS;
-#endif
     }
     else
     {
--- a/src/edit.c
+++ b/src/edit.c
@@ -2969,6 +2969,9 @@ ins_compl_bs()
 	    ins_compl_set_original_text(compl_leader);
 	else
 	{
+#ifdef FEAT_SPELL
+	    spell_bad_len = 0;	/* need to redetect bad word */
+#endif
 	    /* Matches were cleared, need to search for them now. */
 	    if (ins_complete(Ctrl_N) == FAIL)
 		compl_cont_status = 0;
--- a/src/eval.c
+++ b/src/eval.c
@@ -16208,7 +16208,7 @@ var2fpos(varp, lnum, fnum)
 	    return NULL;
 	len = (long)STRLEN(ml_get(pos.lnum));
 	/* Accept a position up to the NUL after the line. */
-	if (pos.col <= 0 || (int)pos.col > len + 1)
+	if (pos.col == 0 || (int)pos.col > len + 1)
 	    return NULL;	/* invalid column number */
 	--pos.col;
 
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -261,18 +261,23 @@ linelen(has_tab)
     return len;
 }
 
-/* Buffer for one line used during sorting.  It's allocated to contain the
- * longest line being sorted. */
-static char_u	*sortbuf;
+/* Buffer for two lines used during sorting.  They are allocated to
+ * contain the longest line being sorted. */
+static char_u	*sortbuf1;
+static char_u	*sortbuf2;
 
 static int	sort_ic;		/* ignore case */
 static int	sort_nr;		/* sort on number */
+static int	sort_rx;		/* sort on regex instead of skipping it */
+
+static int	sort_abort;		/* flag to indicate if sorting has been interrupted */
 
 /* Struct to store info to be sorted. */
 typedef struct
 {
     linenr_T	lnum;			/* line number */
-    long	col_nr;			/* column number or number */
+    long	start_col_nr;		/* starting column number or number */
+    long	end_col_nr;		/* ending column number */
 } sorti_T;
 
 static int
@@ -291,18 +296,35 @@ sort_compare(s1, s2)
 {
     sorti_T	l1 = *(sorti_T *)s1;
     sorti_T	l2 = *(sorti_T *)s2;
-    char_u	*s;
-
-    /* When sorting numbers "col_nr" is the number, not the column number. */
+    int		result = 0;
+
+    /* If the user interrupts, there's no way to stop qsort() immediately, but
+     * if we return 0 every time, qsort will assume it's done sorting and exit */
+    if (sort_abort)
+	return 0;
+    fast_breakcheck();
+    if (got_int)
+	sort_abort = TRUE;
+
+    /* When sorting numbers "start_col_nr" is the number, not the column number. */
     if (sort_nr)
-	return l1.col_nr - l2.col_nr;
-
-    /* We need to copy one line into "sortbuf", because there is no guarantee
-     * that the first pointer becomes invalid when obtaining the second one. */
-    STRCPY(sortbuf, ml_get(l1.lnum) + l1.col_nr);
-    s = ml_get(l2.lnum) + l2.col_nr;
-
-    return sort_ic ? STRICMP(sortbuf, s) : STRCMP(sortbuf, s);
+	result = l1.start_col_nr - l2.start_col_nr;
+    else
+    {
+	/* We need to copy one line into "sortbuf1", because there is no guarantee
+	 * that the first pointer becomes invalid when obtaining the second one. */
+	STRNCPY(sortbuf1, ml_get(l1.lnum) + l1.start_col_nr, l1.end_col_nr - l1.start_col_nr + 1);
+	sortbuf1[l1.end_col_nr - l1.start_col_nr] = 0;
+	STRNCPY(sortbuf2, ml_get(l2.lnum) + l2.start_col_nr, l2.end_col_nr - l2.start_col_nr + 1);
+	sortbuf2[l2.end_col_nr - l2.start_col_nr] = 0;
+
+	result = sort_ic ? STRICMP(sortbuf1, sortbuf2) : STRCMP(sortbuf1, sortbuf2);
+    }
+    /* If the two lines have the same value, preserve the original line order */
+    if (result == 0)
+	return (int) (l1.lnum - l2.lnum);
+    else
+	return result;
 }
 
 /*
@@ -321,21 +343,25 @@ ex_sort(eap)
     size_t	i;
     char_u	*p;
     char_u	*s;
+    char_u	*s2;
+    char_u	c;			/* temporary character storage */
     int		unique = FALSE;
     long	deleted;
-    colnr_T	col;
+    colnr_T	start_col;
+    colnr_T	end_col;
     int		sort_oct;		/* sort on octal number */
     int		sort_hex;		/* sort on hex number */
 
     if (u_save((linenr_T)(eap->line1 - 1), (linenr_T)(eap->line2 + 1)) == FAIL)
 	return;
-    sortbuf = NULL;
+    sortbuf1 = NULL;
+    sortbuf2 = NULL;
     regmatch.regprog = NULL;
     nrs = (sorti_T *)lalloc((long_u)(count * sizeof(sorti_T)), TRUE);
     if (nrs == NULL)
-	goto theend;
-
-    sort_ic = sort_nr = sort_oct = sort_hex = 0;
+	goto sortend;
+
+    sort_abort = sort_ic = sort_rx = sort_nr = sort_oct = sort_hex = 0;
 
     for (p = eap->arg; *p != NUL; ++p)
     {
@@ -343,6 +369,8 @@ ex_sort(eap)
 	    ;
 	else if (*p == 'i')
 	    sort_ic = TRUE;
+	else if (*p == 'r')
+	    sort_rx = TRUE;
 	else if (*p == 'n')
 	    sort_nr = 2;
 	else if (*p == 'o')
@@ -364,19 +392,19 @@ ex_sort(eap)
 	    if (*s != *p)
 	    {
 		EMSG(_(e_invalpat));
-		goto theend;
+		goto sortend;
 	    }
 	    *s = NUL;
 	    regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC);
 	    if (regmatch.regprog == NULL)
-		goto theend;
+		goto sortend;
 	    p = s;		/* continue after the regexp */
 	    regmatch.rm_ic = p_ic;
 	}
 	else
 	{
 	    EMSG2(_(e_invarg2), p);
-	    goto theend;
+	    goto sortend;
 	}
     }
 
@@ -384,7 +412,7 @@ ex_sort(eap)
     if (sort_nr + sort_oct + sort_hex > 2)
     {
 	EMSG(_(e_invarg));
-	goto theend;
+	goto sortend;
     }
 
     /* From here on "sort_nr" is used as a flag for any number sorting. */
@@ -393,9 +421,9 @@ ex_sort(eap)
     /*
      * Make an array with all line numbers.  This avoids having to copy all
      * the lines into allocated memory.
-     * When sorting on strings "col_nr" is de offset in the line, for numbers
-     * sorting it's the number to sort on.  This means the pattern matching
-     * and number conversion only has to be done once per line.
+     * When sorting on strings "start_col_nr" is the offset in the line, for
+     * numbers sorting it's the number to sort on.  This means the pattern
+     * matching and number conversion only has to be done once per line.
      * Also get the longest line length for allocating "sortbuf".
      */
     for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
@@ -405,57 +433,83 @@ ex_sort(eap)
 	if (maxlen < len)
 	    maxlen = len;
 
+	start_col = 0;
+	end_col = len;
 	if (regmatch.regprog != NULL && vim_regexec(&regmatch, s, 0))
-	    col = regmatch.endp[0] - s;
+	{
+	    if (sort_rx)
+	    {
+		start_col = regmatch.startp[0] - s;
+		end_col = regmatch.endp[0] - s;
+	    }
+	    else
+		start_col = regmatch.endp[0] - s;
+	}
 	else
-	    col = 0;
+	    if (regmatch.regprog != NULL)
+		end_col = 0;
 
 	if (sort_nr)
 	{
+	    /* Make sure vim_str2nr doesn't read any digits past the end
+	     * of the match, by temporarily terminating the string there */
+	    s2 = s + end_col;
+	    c = *s2;
+	    (*s2) = 0;
 	    /* Sorting on number: Store the number itself. */
 	    if (sort_hex)
-		s = skiptohex(s + col);
+		s = skiptohex(s + start_col);
 	    else
-		s = skiptodigit(s + col);
+		s = skiptodigit(s + start_col);
 	    vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
-					&nrs[lnum - eap->line1].col_nr, NULL);
+					&nrs[lnum - eap->line1].start_col_nr, NULL);
+	    (*s2) = c;
 	}
 	else
+	{
 	    /* Store the column to sort at. */
-	    nrs[lnum - eap->line1].col_nr = col;
+	    nrs[lnum - eap->line1].start_col_nr = start_col;
+	    nrs[lnum - eap->line1].end_col_nr = end_col;
+	}
 
 	nrs[lnum - eap->line1].lnum = lnum;
 
 	if (regmatch.regprog != NULL)
 	    fast_breakcheck();
 	if (got_int)
-	    goto theend;
+	    goto sortend;
     }
 
     /* Allocate a buffer that can hold the longest line. */
-    sortbuf = alloc((unsigned)maxlen + 1);
-    if (sortbuf == NULL)
-	goto theend;
+    sortbuf1 = alloc((unsigned)maxlen + 1);
+    if (sortbuf1 == NULL)
+	goto sortend;
+    sortbuf2 = alloc((unsigned)maxlen + 1);
+    if (sortbuf2 == NULL)
+	goto sortend;
 
     /* Sort the array of line numbers.  Note: can't be interrupted! */
     qsort((void *)nrs, count, sizeof(sorti_T), sort_compare);
 
+    if (sort_abort)
+	goto sortend;
+
     /* Insert the lines in the sorted order below the last one. */
     lnum = eap->line2;
     for (i = 0; i < count; ++i)
     {
 	s = ml_get(nrs[eap->forceit ? count - i - 1 : i].lnum);
 	if (!unique || i == 0
-		|| (sort_ic ? STRICMP(s, sortbuf) : STRCMP(s, sortbuf)) != 0)
+		|| (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0)
 	{
 	    if (ml_append(lnum++, s, (colnr_T)0, FALSE) == FAIL)
 		break;
 	    if (unique)
-		STRCPY(sortbuf, s);
+		STRCPY(sortbuf1, s);
 	}
 	fast_breakcheck();
 	if (got_int)
-	    goto theend;
+	    goto sortend;
     }
 
     /* delete the original lines if appending worked */
@@ -476,9 +530,10 @@ ex_sort(eap)
     curwin->w_cursor.lnum = eap->line1;
     beginline(BL_WHITE | BL_FIX);
 
-theend:
+sortend:
     vim_free(nrs);
-    vim_free(sortbuf);
+    vim_free(sortbuf1);
+    vim_free(sortbuf2);
     vim_free(regmatch.regprog);
     if (got_int)
 	EMSG(_(e_interr));
--- a/src/option.c
+++ b/src/option.c
@@ -10252,7 +10252,7 @@ vimrc_found(fname, envname)
     char_u	*envname;
 {
     int		opt_idx;
-    int		dofree;
+    int		dofree = FALSE;
     char_u	*p;
 
     if (!option_was_set((char_u *)"cp"))
index 124a7303a1ed9693327921610e30718a02040ee0..2219e2ce99a31bcd9c4c7b9e0b3c8bd3033b6d36
GIT binary patch
literal 40106
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
--- a/src/screen.c
+++ b/src/screen.c
@@ -231,7 +231,15 @@ redraw_win_later(wp, type)
 redraw_later_clear()
 {
     redraw_all_later(CLEAR);
-    screen_attr = HL_BOLD | HL_UNDERLINE;
+#ifdef FEAT_GUI
+    if (gui.in_use)
+	/* Use a code that will reset gui.highlight_mask in
+	 * gui_stop_highlight(). */
+	screen_attr = HL_ALL + 1;
+    else
+#endif
+	/* Use attributes that is very unlikely to appear in text. */
+	screen_attr = HL_BOLD | HL_UNDERLINE | HL_INVERSE;
 }
 
 /*
--- a/src/testdir/test57.in
+++ b/src/testdir/test57.in
@@ -3,50 +3,494 @@ Tests for :sort command.     vim: set ft
 STARTTEST
 :so small.vim
 :"
-:/^t1:/+1,/^t2/-1sort
-:/^t2:/+1,/^t3/-1sort u
-:/^t3:/+1,/^t4/-1sort u /[^:]*:/
-:/^t4:/+1,/^t5/-1sort n
-:/^t5:/+1,/^t6/-1sort n -[^:]*:-
-:/^t6:/+1,/^t7/-1sort o
-:/^t7:/+1,/^t8/-1sort x ,.*/,
-:/^t8:/+1,/^t9/-1sort n o
-:/^t1:/,$wq! test.out
+:/^t01:/+1,/^t02/-1sort
+:/^t02:/+1,/^t03/-1sort n
+:/^t03:/+1,/^t04/-1sort x
+:/^t04:/+1,/^t05/-1sort u
+:/^t05:/+1,/^t06/-1sort!
+:/^t06:/+1,/^t07/-1sort! n        
+:/^t07:/+1,/^t08/-1sort! u
+:/^t08:/+1,/^t09/-1sort o         
+:/^t09:/+1,/^t10/-1sort! x        
+:/^t10:/+1,/^t11/-1sort/./        
+:/^t11:/+1,/^t12/-1sort/../       
+:/^t12:/+1,/^t13/-1sort/../u
+:/^t13:/+1,/^t14/-1sort/./n
+:/^t14:/+1,/^t15/-1sort/./r
+:/^t15:/+1,/^t16/-1sort/../r
+:/^t16:/+1,/^t17/-1sort/./rn
+:/^t17:/+1,/^t18/-1sort/\d/
+:/^t18:/+1,/^t19/-1sort/\d/r
+:/^t19:/+1,/^t20/-1sort/\d/n
+:/^t20:/+1,/^t21/-1sort/\d/rn
+:/^t21:/+1,/^t22/-1sort/\d\d/
+:/^t22:/+1,/^t23/-1sort/\d\d/n
+:/^t23:/+1,/^t24/-1sort/\d\d/x
+:/^t24:/+1,/^t25/-1sort/\d\d/r
+:/^t25:/+1,/^t26/-1sort/\d\d/rn
+:/^t26:/+1,/^t27/-1sort/\d\d/rx
+:/^t27:/+1,/^t28/-1sort no
+:/^t01:/,$wq! test.out
 ENDTEST
 
-t1: alphabetical
-two test
-One test
-one test
-Two test
-t2: alpha, unique
-One test
-one test
-Two test
-one test
-Two test 
-t3: alpha, unique, skip pattern
-one: xay
-two: aaa
-another: tuvy
-t4: number
-asdf 83 asd
-one 333   
-xce   9
-t5: number and skip
-asdf 3 a: sd 11
-one 33:4   99
-:9 
-t6: octal
-2389
-111
-asdf 0014
-t7: hex and skip
-sf/0x1d3
-0x44/1a1
-asd/ad 1413
-t8: wrong arguments
-ccc
-bbb
-aaa
-t8:
+t01: alphebetical
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t02: numeric
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t03: hexadecimal
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t04: alpha, unique
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t05: alpha, reverse
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t06: numeric, reverse
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t07: unique, reverse
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t08: octal
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t09: reverse, hexadecimal
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t10: alpha, skip first character
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t11: alpha, skip first 2 characters
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t12: alpha, unique, skip first 2 characters
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t13: numeric, skip first character
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t14: alpha, sort on first character
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t15: alpha, sort on first 2 characters
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t16: numeric, sort on first character
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t17: alpha, skip past first digit
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t18: alpha, sort on first digit
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t19: numeric, skip past first digit
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t20: numeric, sort on first digit
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t21: alpha, skip past first 2 digits
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t22: numeric, skip past first 2 digits
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t23: hexadecimal, skip past first 2 digits
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t24: alpha, sort on first 2 digits
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t25: numeric, sort on first 2 digits
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t26: hexadecimal, sort on first 2 digits
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t27: wrong arguments
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t28: done
+
--- a/src/testdir/test57.ok
+++ b/src/testdir/test57.ok
@@ -1,35 +1,455 @@
-t1: alphabetical
-One test
-Two test
-one test
-two test
-t2: alpha, unique
-One test
-Two test
-Two test 
-one test
-t3: alpha, unique, skip pattern
-two: aaa
-another: tuvy
-one: xay
-t4: number
-xce   9
-asdf 83 asd
-one 333   
-t5: number and skip
-one 33:4   99
-:9 
-asdf 3 a: sd 11
-t6: octal
-asdf 0014
-2389
-111
-t7: hex and skip
-asd/ad 1413
-0x44/1a1
-sf/0x1d3
-t8: wrong arguments
-ccc
-bbb
-aaa
-t8:
+t01: alphebetical
+
+
+ 123b
+a
+a122
+a123
+a321
+ab
+abc
+b123
+b321
+b321
+b321b
+b322b
+c123d
+c321d
+t02: numeric
+abc
+ab
+a
+
+
+a122
+a123
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b321
+b321b
+b322b
+t03: hexadecimal
+
+
+a
+ab
+abc
+ 123b
+a122
+a123
+a321
+b123
+b321
+b321
+b321b
+b322b
+c123d
+c321d
+t04: alpha, unique
+
+ 123b
+a
+a122
+a123
+a321
+ab
+abc
+b123
+b321
+b321b
+b322b
+c123d
+c321d
+t05: alpha, reverse
+c321d
+c123d
+b322b
+b321b
+b321
+b321
+b123
+abc
+ab
+a321
+a123
+a122
+a
+ 123b
+
+
+t06: numeric, reverse
+b322b
+b321b
+b321
+c321d
+b321
+a321
+ 123b
+c123d
+b123
+a123
+a122
+
+
+a
+ab
+abc
+t07: unique, reverse
+c321d
+c123d
+b322b
+b321b
+b321
+b123
+abc
+ab
+a321
+a123
+a122
+a
+ 123b
+
+t08: octal
+abc
+ab
+a
+
+
+a122
+a123
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b321
+b321b
+b322b
+t09: reverse, hexadecimal
+c321d
+c123d
+b322b
+b321b
+b321
+b321
+b123
+a321
+a123
+a122
+ 123b
+abc
+ab
+a
+
+
+t10: alpha, skip first character
+a
+
+
+a122
+a123
+b123
+ 123b
+c123d
+a321
+b321
+b321
+b321b
+c321d
+b322b
+ab
+abc
+t11: alpha, skip first 2 characters
+ab
+a
+
+
+a321
+b321
+b321
+b321b
+c321d
+a122
+b322b
+a123
+b123
+ 123b
+c123d
+abc
+t12: alpha, unique, skip first 2 characters
+ab
+a
+
+a321
+b321
+b321b
+c321d
+a122
+b322b
+a123
+b123
+ 123b
+c123d
+abc
+t13: numeric, skip first character
+abc
+ab
+a
+
+
+a122
+a123
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b321
+b321b
+b322b
+t14: alpha, sort on first character
+
+
+ 123b
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+b322b
+b321
+b321b
+c123d
+c321d
+t15: alpha, sort on first 2 characters
+a
+
+
+ 123b
+a123
+a122
+a321
+abc
+ab
+b123
+b321
+b322b
+b321
+b321b
+c123d
+c321d
+t16: numeric, sort on first character
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t17: alpha, skip past first digit
+abc
+ab
+a
+
+
+a321
+b321
+b321
+b321b
+c321d
+a122
+b322b
+a123
+b123
+ 123b
+c123d
+t18: alpha, sort on first digit
+abc
+ab
+a
+
+
+a123
+a122
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b322b
+b321
+b321b
+t19: numeric, skip past first digit
+abc
+ab
+a
+
+
+a321
+b321
+c321d
+b321
+b321b
+a122
+b322b
+a123
+b123
+c123d
+ 123b
+t20: numeric, sort on first digit
+abc
+ab
+a
+
+
+a123
+a122
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b322b
+b321
+b321b
+t21: alpha, skip past first 2 digits
+abc
+ab
+a
+
+
+a321
+b321
+b321
+b321b
+c321d
+a122
+b322b
+a123
+b123
+ 123b
+c123d
+t22: numeric, skip past first 2 digits
+abc
+ab
+a
+
+
+a321
+b321
+c321d
+b321
+b321b
+a122
+b322b
+a123
+b123
+c123d
+ 123b
+t23: hexadecimal, skip past first 2 digits
+abc
+ab
+a
+
+
+a321
+b321
+b321
+a122
+a123
+b123
+b321b
+c321d
+b322b
+ 123b
+c123d
+t24: alpha, sort on first 2 digits
+abc
+ab
+a
+
+
+a123
+a122
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b322b
+b321
+b321b
+t25: numeric, sort on first 2 digits
+abc
+ab
+a
+
+
+a123
+a122
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b322b
+b321
+b321b
+t26: hexadecimal, sort on first 2 digits
+abc
+ab
+a
+
+
+a123
+a122
+b123
+c123d
+ 123b
+a321
+b321
+c321d
+b322b
+b321
+b321b
+t27: wrong arguments
+abc
+ab
+a
+a321
+a123
+a122
+b321
+b123
+c123d
+ 123b
+c321d
+b322b
+b321
+b321b
+
+
+t28: done
+
--- a/src/version.h
+++ b/src/version.h
@@ -35,6 +35,6 @@
  */
 #define VIM_VERSION_NODOT	"vim70d"
 #define VIM_VERSION_SHORT	"7.0d"
-#define VIM_VERSION_MEDIUM	"7.0d BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0d BETA (2006 Apr 10)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0d BETA (2006 Apr 10, compiled "
+#define VIM_VERSION_MEDIUM	"7.0d01 BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0d01 BETA (2006 Apr 11)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0d01 BETA (2006 Apr 11, compiled "
--- a/src/window.c
+++ b/src/window.c
@@ -91,6 +91,9 @@ static void win_new_height __ARGS((win_T
 #endif
 
 #if defined(FEAT_WINDOWS) || defined(PROTO)
+
+static char *m_onlyone = N_("Already only one window");
+
 /*
  * all CTRL-W window commands are handled here, called from normal_cmd().
  */
@@ -330,6 +333,31 @@ newwindow:
 		break;
 #endif
 
+/* move window to new tab page */
+    case 'T':
+		if (firstwin == lastwin)
+		    MSG(_(m_onlyone));
+		else
+		{
+		    tabpage_T	*oldtab = curtab;
+		    tabpage_T	*newtab;
+		    win_T	*wp = curwin;
+
+		    /* First create a new tab with the window, then go back to
+		     * the old tab and close the window there. */
+		    if (win_new_tabpage((int)Prenum) == OK
+						     && valid_tabpage(oldtab))
+		    {
+			newtab = curtab;
+			goto_tabpage_tp(oldtab);
+			if (curwin == wp)
+			    win_close(curwin, FALSE);
+			if (valid_tabpage(newtab))
+			    goto_tabpage_tp(newtab);
+		    }
+		}
+		break;
+
 /* cursor to top-left window */
     case 't':
     case Ctrl_T:
@@ -1102,6 +1130,7 @@ win_init(newp, oldp)
     newp->w_pcmark = oldp->w_pcmark;
     newp->w_prev_pcmark = oldp->w_prev_pcmark;
     newp->w_alt_fnum = oldp->w_alt_fnum;
+    newp->w_wrow = oldp->w_wrow;
     newp->w_fraction = oldp->w_fraction;
     newp->w_prev_fraction_row = oldp->w_prev_fraction_row;
 #ifdef FEAT_JUMPLIST
@@ -2938,7 +2967,7 @@ close_others(message, forceit)
 		    && !autocmd_busy
 #endif
 				    )
-	    MSG(_("Already only one window"));
+	    MSG(_(m_onlyone));
 	return;
     }
 
@@ -5153,6 +5182,8 @@ win_new_height(wp, height)
      * Will equalize heights soon to fix it. */
     if (height < 0)
 	height = 0;
+    if (wp->w_height == height)
+	return;	    /* nothing to do */
 
     if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
 	wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT