changeset 798:95dac6af3b3a v7.0232

updated for version 7.0232
author vimboss
date Thu, 23 Mar 2006 22:59:57 +0000
parents a1a08851eac8
children 6beb2c667935
files runtime/autoload/netrwFileHandlers.vim runtime/autoload/netrwSettings.vim runtime/autoload/zip.vim runtime/doc/eval.txt runtime/doc/filetype.txt runtime/doc/quickfix.txt runtime/doc/tags runtime/doc/todo.txt runtime/doc/various.txt runtime/doc/version7.txt runtime/filetype.vim runtime/keymap/greek_cp737.vim runtime/plugin/vimball.vim runtime/syntax/django.vim runtime/syntax/htmldjango.vim src/Makefile src/config.mk.in src/configure.in src/eval.c src/ex_cmds.h src/ex_getln.c src/gui_gtk_x11.c src/option.c src/quickfix.c src/regexp.c src/screen.c src/undo.c src/version.h
diffstat 28 files changed, 417 insertions(+), 349 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/autoload/netrwFileHandlers.vim
+++ b/runtime/autoload/netrwFileHandlers.vim
@@ -1,8 +1,8 @@
 " netrwFileHandlers: contains various extension-based file handlers for
 "                    netrw's browsers' x command ("eXecute launcher")
 " Author:	Charles E. Campbell, Jr.
-" Date:		Feb 15, 2006
-" Version:	8a	ASTRO-ONLY
+" Date:		Mar 22, 2006
+" Version:	8
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
@@ -22,7 +22,7 @@ if exists("g:loaded_netrwFileHandlers") 
 endif
 let s:keepcpo= &cpo
 set cpo&vim
-let g:loaded_netrwFileHandlers= "v8a"
+let g:loaded_netrwFileHandlers= "v8"
 
 " ---------------------------------------------------------------------
 " netrwFileHandlers#Invoke: {{{2
--- a/runtime/autoload/netrwSettings.vim
+++ b/runtime/autoload/netrwSettings.vim
@@ -1,7 +1,7 @@
 " netrwSettings.vim: makes netrw settings simpler
-" Date:		Jan 26, 2006
+" Date:		Mar 22, 2006
 " Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	6a	ASTRO-ONLY
+" Version:	6
 " Copyright:    Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
@@ -19,7 +19,7 @@
 if exists("g:loaded_netrwSettings") || &cp
   finish
 endif
-let g:loaded_netrwSettings  = "v6a"
+let g:loaded_netrwSettings  = "v6"
 
 " ---------------------------------------------------------------------
 " NetrwSettings: {{{1
@@ -56,10 +56,10 @@ fun! netrwSettings#NetrwSettings()
    let g:netrw_ignorenetrc= 0
   endif
 
-  put ='+ --------------------------------------------'
-  put ='+ NetrwSettings:  by Charles E. Campbell, Jr.'
-  put ='+  Press ? with cursor atop any line for help  '
-  put ='+ --------------------------------------------'
+  put ='+ ---------------------------------------------'
+  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
+  put ='+ Press <F1> with cursor atop any line for help'
+  put ='+ ---------------------------------------------'
   let s:netrw_settings_stop= line(".")
 
   put =''
@@ -132,7 +132,7 @@ fun! netrwSettings#NetrwSettings()
 
   set nomod
 
-  map <buffer> <silent> ? :call NetrwSettingHelp()<cr>
+  map <buffer> <silent> <F1> :call NetrwSettingHelp()<cr>
   let tmpfile= tempname()
   exe 'au BufWriteCmd	Netrw\ Settings	silent w! '.tmpfile.'|so '.tmpfile.'|call delete("'.tmpfile.'")|set nomod'
 endfun
--- a/runtime/autoload/zip.vim
+++ b/runtime/autoload/zip.vim
@@ -1,7 +1,7 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:			Dec 21, 2005
-" Version:		6
+" Date:			Mar 22, 2006
+" Version:		7
 " 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,8 @@ if exists("g:loaded_zip")
  finish
 endif
 
-let g:loaded_zip= "v6"
+let g:loaded_zip     = "v7"
+let s:zipfile_escape = ' ?&;\'
 
 " ----------------
 "  Functions: {{{1
@@ -53,6 +54,7 @@ fun! zip#Browse(zipfile)
 "   call Dret("zip#Browse : file<".a:zipfile."> not readable")
    return
   endif
+"  call Decho("passed sanity checks")
   if &ma != 1
    set ma
   endif
@@ -73,7 +75,8 @@ fun! zip#Browse(zipfile)
   0d
   $
 
-  exe "silent r! unzip -l ".a:zipfile
+  call Decho("exe silent r! unzip -l '".escape(a:zipfile,s:zipfile_escape)."'")
+  exe "silent r! unzip -l '".escape(a:zipfile,s:zipfile_escape)."'"
   $d
   silent 4,$v/^\s\+\d\+\s\{0,5}\d/d
   silent  4,$s/^\%(.*\)\s\+\(\S\)/\1/
@@ -111,12 +114,15 @@ fun! s:ZipBrowseSelect()
 
   " get zipfile to the new-window
   let zipfile= substitute(w:zipfile,'.zip$','','e')
-  let curfile= expand("%")
+  let curfile= escape(expand("%"),s:zipfile_escape)
+"  call Decho("zipfile<".zipfile.">")
+"  call Decho("curfile<".curfile.">")
 
   new
   wincmd _
   let s:zipfile_{winnr()}= curfile
-  exe "e zipfile:".zipfile.':'.fname
+"  call Decho("exe e zipfile:".escape(zipfile,s:zipfile_escape).':'.fname)
+  exe "e zipfile:".escape(zipfile,s:zipfile_escape).':'.fname
   filetype detect
 
   let &report= repkeep
@@ -130,11 +136,12 @@ fun! zip#Read(fname,mode)
   let repkeep= &report
   set report=10
 
-  let zipfile = substitute(a:fname,'zipfile:\(.\{-}\):.*$','\1','')
-  let fname   = substitute(a:fname,'zipfile:.\{-}:\(.*\)$','\1','')
+  let zipfile = substitute(a:fname,'zipfile:\(.\{-}\):[^\\].*$','\1','')
+  let fname   = substitute(a:fname,'zipfile:.\{-}:\([^\\].*\)$','\1','')
 "  call Decho("zipfile<".zipfile."> fname<".fname.">")
 
-  exe "r! unzip -p ".zipfile." ".fname
+"  call Decho("exe r! unzip -p '".escape(zipfile,s:zipfile_escape)."' ".fname)
+  exe "r! unzip -p '".escape(zipfile,s:zipfile_escape)."' ".fname
 
   " cleanup
   0d
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 21
+*eval.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 22
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -3591,7 +3591,7 @@ getpos({expr})	Get the position for {exp
 		This can be used to save and restore the cursor position: >
 			let save_cursor = getpos(".")
 			MoveTheCursorAround
-			call setpos(save_cursor)
+			call setpos('.', save_cursor)
 <		Also see |setpos()|.
 
 prevnonblank({lnum})					*prevnonblank()*
@@ -4225,6 +4225,7 @@ setpos({expr}, {list})
 		the current buffer.  To set a mark in another buffer you can
 		use the |bufnr()| function to turn a file name into a buffer
 		number.
+		Does not change the jumplist.
 
 		"lnum" and "col" are the position in the buffer.  The first
 		column is 1.  Use a zero "lnum" to delete a mark.
@@ -4918,8 +4919,8 @@ winsaveview()	Returns a |Dictionary| tha
 		This is useful if you have a mapping that jumps around in the
 		buffer and you want to go back to the original view.
 		This does not save fold information.  Use the 'foldenable'
-		option to temporarily switch of folding, so that folds are not
-		opened when moving around.
+		option to temporarily switch off folding, so that folds are
+		not opened when moving around.
 		The return value includes:
 			lnum		cursor line number
 			col		cursor column
--- a/runtime/doc/filetype.txt
+++ b/runtime/doc/filetype.txt
@@ -1,4 +1,4 @@
-*filetype.txt*  For Vim version 7.0aa.  Last change: 2006 Mar 09
+*filetype.txt*  For Vim version 7.0aa.  Last change: 2006 Mar 21
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -148,6 +148,7 @@ can be used to overrule the filetype use
 	*.i		g:filetype_i	|ft-progress-syntax|
 	*.p		g:filetype_p	|ft-pascal-syntax|
 	*.sh		g:bash_is_sh	|ft-sh-syntax|
+	*.tex		g:tex_flavor	|ft-tex-plugin|
 
 							*filetype-ignore*
 To avoid that certain files are being inspected, the g:ft_ignore_pat variable
@@ -542,4 +543,16 @@ Since the text for this plugin is rather
 file: |sql.txt|.
 
 
+TEX							*ft-tex-plugin*
+
+If the first line of a *.tex file has the form >
+	%&<format>
+then this determined the file type:  plaintex (for plain TeX), context (for
+ConTeXt), or tex (for LaTeX).  Otherwise, the file is searched for keywords to
+choose context or tex.  If no keywords are found, it defaults to tex.  You can
+change the default by defining the variable g:tex_flavor to the format (not
+the file type) you use most:  plain or context or latex.  (Currently no other
+formats are recognized.)
+
+
  vim:tw=78:ts=8:ft=help:norl:
--- a/runtime/doc/quickfix.txt
+++ b/runtime/doc/quickfix.txt
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 7.0aa.  Last change: 2006 Mar 20
+*quickfix.txt*  For Vim version 7.0aa.  Last change: 2006 Mar 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -189,6 +189,15 @@ command with 'l'.
 :lb[uffer] [bufnr]	Same as ":cbuffer", except the location list for the
 			current window is used instead of the quickfix list.
 
+						*:cgetb* *:cgetbuffer*
+:cgetb[uffer] [bufnr]	Read the error list from the current buffer.  Just
+			like ":cbuffer" but don't jump to the first error.
+
+						*:lgetb* *:lgetbuffer*
+:lgetb[uffer] [bufnr]	Same as ":cgetbuffer", except the location list for
+			the current window is used instead of the quickfix
+			list.
+
 							*:caddb* *:caddbuffer*
 :caddb[uffer] [bufnr]	Read the error list from the current buffer and add
 			the errors to the current quickfix list.  If a
@@ -231,6 +240,14 @@ command with 'l'.
 :lad[dexpr][!] {expr}	Same as ":caddexpr", except the location list for the
 			current window is used instead of the quickfix list.
 
+							*:cgete* *:cgetexpr*
+:cgete[xpr][!] {expr}	Create a quickfix list using the result of {expr}.
+			Just like ":cexpr", but don't jump to the first error.
+
+							*:lgete* *:lgetexpr*
+:lgete[xpr][!] {expr}	Same as ":cgetexpr", except the location list for the
+			current window is used instead of the quickfix list.
+
 							*:cl* *:clist*
 :cl[ist] [from] [, [to]]
 			List all errors that are valid |quickfix-valid|.
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -1849,6 +1849,10 @@ 90.5	usr_90.txt	/*90.5*
 :cfir	quickfix.txt	/*:cfir*
 :cfirst	quickfix.txt	/*:cfirst*
 :cg	quickfix.txt	/*:cg*
+:cgetb	quickfix.txt	/*:cgetb*
+:cgetbuffer	quickfix.txt	/*:cgetbuffer*
+:cgete	quickfix.txt	/*:cgete*
+:cgetexpr	quickfix.txt	/*:cgetexpr*
 :cgetfile	quickfix.txt	/*:cgetfile*
 :ch	change.txt	/*:ch*
 :change	change.txt	/*:change*
@@ -2188,6 +2192,10 @@ 90.5	usr_90.txt	/*90.5*
 :lfir	quickfix.txt	/*:lfir*
 :lfirst	quickfix.txt	/*:lfirst*
 :lg	quickfix.txt	/*:lg*
+:lgetb	quickfix.txt	/*:lgetb*
+:lgetbuffer	quickfix.txt	/*:lgetbuffer*
+:lgete	quickfix.txt	/*:lgete*
+:lgetexpr	quickfix.txt	/*:lgetexpr*
 :lgetfile	quickfix.txt	/*:lgetfile*
 :lgr	quickfix.txt	/*:lgr*
 :lgrep	quickfix.txt	/*:lgrep*
@@ -5299,6 +5307,7 @@ ft-sqlinformix-syntax	syntax.txt	/*ft-sq
 ft-syntax-omni	insert.txt	/*ft-syntax-omni*
 ft-tcsh-syntax	syntax.txt	/*ft-tcsh-syntax*
 ft-termcap-syntax	syntax.txt	/*ft-termcap-syntax*
+ft-tex-plugin	filetype.txt	/*ft-tex-plugin*
 ft-tex-syntax	syntax.txt	/*ft-tex-syntax*
 ft-tf-syntax	syntax.txt	/*ft-tf-syntax*
 ft-vb-syntax	syntax.txt	/*ft-vb-syntax*
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 21
+*todo.txt*      For Vim version 7.0aa.  Last change: 2006 Mar 23
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,11 +30,8 @@ be worked on, but only if you sponsor Vi
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-HTML indenting can be slow, find out why.
-
-Adjust src/main.aap for installing manpages like in Makefile.
-    And for generating Vim.app for the Mac.
-    Install spell files with src/main.aap.
+Include patch for recognizing TeX flavor. (Benji Fisher)
+And new tex.vim and plaintex.vim.
 
 Win32: Describe how to do debugging. (George Reilly)
 
@@ -50,6 +47,12 @@ 8   Add patch from Muraoka Taro (Mar 16)
 Darren is including the patch in ctags.  Test it when it's ready.  Change
 "typename" to "typeref" in C complete code.
 
+HTML indenting can be slow.  Caused by using searchpair().  Can search() be
+used instead?
+
+ccomplete: use "signature:" field from tags file when it's present.
+Or list all the fields? (Martin Stubenschrott)
+
 Add more tests for all new functionality in Vim 7.  Especially new functions.
 
 Add text in user manual for using the undo tree.  Example with finding the
@@ -1129,7 +1132,7 @@ Spell checking:
     means the compound flags of the word are not used.
     Instead of "SFX a 0 add/FLAGS ." we could use "SFX a 0 add . /FLAGS" (or
     support both).
--   Support breakpoint character · 0xb7 and ignore it?  Makes it possible to
+-   Support breakpoint character ? 0xb7 and ignore it?  Makes it possible to
     use same wordlist for hyphenation.
 -   Compound word is accepted if nr of words is <= COMPOUNDMAX OR nr of
     syllables <= COMPOUNDSYLMAX.  Specify using AND in the affix file?
--- a/runtime/doc/various.txt
+++ b/runtime/doc/various.txt
@@ -756,6 +756,13 @@ It is possible to add translated help fi
 files.  Vim will search for all help in "doc" directories in 'runtimepath'.
 This is only available when compiled with the |+multi_lang| feature.
 
+At this moment translations are available for:
+	Chinese - multiple authors
+	French  - translated by David Blanchet
+	Italian - translated by Antonio Colombo
+	Russian - translated by Vassily Ragosin
+See the Vim website to find them: http://www.vim.org/translations.php
+
 A set of translated help files consists of these files:
 
 	help.abx
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Mar 21
+*version7.txt*  For Vim version 7.0aa.  Last change: 2006 Mar 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -609,24 +609,27 @@ Win32: The ":winpos" command now also wo
 
 |:viusage|		Help for Vi commands (Nvi command).
 
-|:cbuffer|		Read error lines from a buffer. (partly by Yegappan
-			Lakshmanan)
-
 |:sort|			Sort lines in the buffer without depending on an
 			external command.
 
 |:caddfile|		Add error messages to an existing quickfix list
 			(Yegappan Lakshmanan).
-
+|:cbuffer|		Read error lines from a buffer. (partly by Yegappan
+			Lakshmanan)
+|:cgetbuffer|		Create a quickfix list from a buffer but don't jump to
+			the first error.
+|:caddbuffer|		Add errors from the current buffer to the quickfix
+			list.
 |:cexpr|		Read error messages from a Vim expression (Yegappan
 			Lakshmanan).
-
 |:caddexpr|		Add error messages from a Vim expression to an
 			existing quickfix list. (Yegappan Lakshmanan).
-|:caddbuffer|		Add errors from the current buffer to the quickfix
-			list.
+|:cgetexpr|		Create a quickfix list from a Vim expression, but
+			don't jump to the first error. (Yegappan Lakshmanan).
 
 |:lfile|		Like |:cfile| but use the location list.
+|:lgetbuffer|		Like |:cgetbuffer| but use the location list.
+|:lgetexpr|		Like |:cgetexpr| but use the location list.
 |:lgetfile|		Like |:cgetfile| but use the location list.
 |:laddfile|		Like |:caddfile| but use the location list.
 |:lbuffer|		Like |:cbuffer| but use the location list.
--- 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 Mar 21
+" Last Change:	2006 Mar 23
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -638,7 +638,7 @@ au BufNewFile,BufRead *.t.html			setf ti
 " HTML (.shtml and .stm for server side)
 au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm  call s:FThtml()
 
-" Distinguish between HTML and XHTML
+" Distinguish between HTML, XHTML and Django
 fun! s:FThtml()
   let n = 1
   while n < 10 && n < line("$")
@@ -646,6 +646,10 @@ fun! s:FThtml()
       setf xhtml
       return
     endif
+    if getline(n) =~ '{%\s*\(extends\|block\)\>'
+      setf htmldjango
+      return
+    endif
     let n = n + 1
   endwhile
   setf html
new file mode 100644
--- /dev/null
+++ b/runtime/keymap/greek_cp737.vim
@@ -0,0 +1,104 @@
+" Vim Keymap file for greek DOS cp737
+" Maintainer: Panagiotis Louridas <louridas@acm.org>
+" Last Updated: Thu Mar 23 14:05:45 EET 2006
+
+" This keyboard layout allows all Greek symbols to be typed,
+" including accented capitals and diaeresis. It does not
+" include diaeresis and accent on the same vowel, nor
+" the greek quotes, as these were not included in the codepage. 
+" It includes the Greek semicolon sign.
+
+"
+" accent			";" + letter
+" diaeresis			":" + letter
+" diaeresis + accent		";" + ":" (or ":" + ";") + letter
+" semicolon			"q"
+" colon				"Q"
+" greek semicolon		"W"
+" sigma at end of word		"w"
+
+" Use this short name in the status line.
+let b:keymap_name = "greek"
+
+loadkeymap
+" capital
+A	<char-128>	" €
+B	<char-129>	" 
+G	<char-130>	" ‚
+D	<char-131>	" ƒ
+E	<char-132>	" „
+Z	<char-133>	" …
+H	<char-134>	" †
+U	<char-135>	" ‡
+I	<char-136>	" ˆ
+K	<char-137>	" ‰
+L	<char-138>	" Š
+M	<char-139>	" ‹
+N	<char-140>	" Œ
+J	<char-141>	" 
+O	<char-142>	" Ž
+P	<char-143>	" 
+R	<char-144>	" 
+S	<char-145>	" ‘
+T	<char-146>	" ’
+Y	<char-147>	" “
+F	<char-148>	" ”
+X	<char-149>	" •
+C	<char-150>	" –
+V	<char-151>	" —
+
+" small
+a	<char-152>	" ˜
+b	<char-153>	" ™
+g	<char-154>	" š
+d	<char-155>	" ›
+e	<char-156>	" œ
+z	<char-157>	" 
+h	<char-158>	" ž
+u	<char-159>	" Ÿ
+i	<char-160>	"  
+k	<char-161>	" ¡
+l	<char-162>	" ¢
+m	<char-163>	" £
+n	<char-164>	" ¤
+j	<char-165>	" ¥
+o	<char-166>	" ¦
+p	<char-167>	" §
+r	<char-168>	" ¨
+s	<char-169>	" ©
+w	<char-170>	" ª
+t	<char-171>	" «
+y	<char-172>	" ¬
+f	<char-173>	" ­
+x	<char-174>	" ®
+c	<char-175>	" ¯
+v	<char-224>	" à
+
+" accented capital
+;A	<char-234>	" ê
+;E	<char-235>	" ë
+;H	<char-236>	" ì
+;I	<char-237>	" í
+;O	<char-238>	" î
+;Y	<char-239>	" ï
+;V	<char-240>	" ð
+"
+:I	<char-244>	" ô
+:Y	<char-245>	" õ
+
+" accented small
+;a	<char-225>	" á
+;e	<char-226>	" â
+;h	<char-227>	" ã
+;i	<char-229>	" å
+;o	<char-230>	" æ
+;y	<char-231>	" ç
+;v	<char-233>	" é
+"
+:i	<char-228>	" ä
+:y	<char-232>	" è
+"
+" symbols
+q	;		" ;
+Q	:		" :
+W	<char-250>	" ú
deleted file mode 100644
--- a/runtime/plugin/vimball.vim
+++ /dev/null
@@ -1,256 +0,0 @@
-" vimball : construct a file containing both paths and files
-" Author: Charles E. Campbell, Jr.
-" Date:   Mar 20, 2006
-" Version: 3
-" GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
-" Copyright: (c) 2004-2006 by Charles E. Campbell, Jr.
-"            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
-"            (see |copyright|) except use "Vimball" instead of "Vim".
-"            No warranty, express or implied.
-"  *** ***   Use At-Your-Own-Risk!   *** ***
-
-" ---------------------------------------------------------------------
-"  Load Once: {{{1
-if &cp || exists("g:loaded_vimball")
- finish
-endif
-
-let s:keepcpo        = &cpo
-let g:loaded_vimball = "v3"
-set cpo&vim
-
-" ------------------------------------------------------------------------------
-" Public Interface: {{{1
-com! -ra -na=+ -bang MkVimball call s:MkVimball(<line1>,<line2>,<bang>0,<f-args>)
-com! -na=0 UseVimball  call s:Vimball(1)
-com! -na=0 VimballList call s:Vimball(0)
-au BufReadPost *.vba echohl WarningMsg | echo "Source this file to extract it! (:so %)" | echohl None
-
-" =====================================================================
-"  Functions: {{{1
-
-" ---------------------------------------------------------------------
-" MkVimball: creates a vimball given a list of paths to files {{{2
-" Vimball Format:
-"     path
-"     filesize
-"     [file]
-"     path
-"     filesize
-"     [file]
-fun! s:MkVimball(line1,line2,writelevel,vimballname) range
-"  call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:vimballname.">")
-  let vbname= substitute(a:vimballname,'\.[^.]*$','','e').'.vba'
-  if !a:writelevel && filereadable(vbname)
-   echohl Error | echoerr "(MkVimball) file<".vbname."> exists; use ! to insist" | echohl None
-"   call Dret("MkVimball : file<".vbname."> already exists; use ! to insist")
-   return
-  endif
-
-  " user option bypass
-  let eikeep= &ei
-  set ei=all
-
-  let home   = substitute(&rtp,',.*$','','')
-  let curdir = getcwd()
-  exe "cd ".home
-
-  " record current tab, initialize while loop index
-  let curtabnr = tabpagenr()
-  let linenr   = a:line1
-"  call Decho("curtabnr=".curtabnr)
-
-  while linenr <= a:line2
-   let svfile  = getline(linenr)
-"   call Decho("svfile<".svfile.">")
- 
-   if !filereadable(svfile)
-    echohl Error | echo "unable to read file<".svfile.">" | echohl None
-    let &ei= eikeep
-    exe "cd ".curdir
-"    call Dret("MkVimball")
-    return
-   endif
- 
-   " create/switch to mkvimball tab
-   if !exists("vbtabnr")
-    tabnew
-    silent! file Vimball
-    let vbtabnr= tabpagenr()
-   else
-    exe "tabn ".vbtabnr
-   endif
- 
-   let lastline= line("$") + 1
-   if lastline == 2 && getline("$") == ""
-	call setline(1,'" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.')
-	call setline(2,'UseVimball')
-	call setline(3,'finish')
-	let lastline= 4
-   endif
-   call setline(lastline  ,svfile)
-   call setline(lastline+1,0)
-   exe "$r ".svfile
-   call setline(lastline+1,line("$") - lastline - 1)
-"   call Decho("lastline=".lastline." line$=".line("$"))
-
-  " restore to normal tab
-   exe "tabn ".curtabnr
-   let linenr= linenr + 1
-  endwhile
-
-  " write the vimball
-  exe "tabn ".vbtabnr
-  exe "cd ".curdir
-  if a:really
-   if a:writelevel
-    exe "w! ".vbname
-   else
-    exe "w ".vbname
-   endif
-  endif
-"  call Decho("Vimball<".vbname."> created")
-  echo "Vimball<".vbname."> created"
-
-  " remove the evidence
-  setlocal nomod bh=wipe
-  exe "tabn ".curtabnr
-  exe "tabc ".vbtabnr
-
-  " restore options
-  let &ei= eikeep
-
-"  call Dret("MkVimball")
-endfun
-
-" ---------------------------------------------------------------------
-" Vimball: {{{2
-fun! s:Vimball(really)
-"  call Dfunc("Vimball(really=".a:really.")")
-
-  if getline(1) !~ '^" Vimball Archiver by Charles E. Campbell, Jr., Ph.D.$'
-   echoerr "(Vimball) The current file does not appear to be a Vimball!"
-"   call Dret("Vimball")
-   return
-  endif
-
-  " initialize
-  let regakeep = @a
-  let eikeep   = &ei
-  let vekeep   = &ve
-  let makeep   = getpos("'a")
-  let curtabnr = tabpagenr()
-  set ei=all ve=all
-
-  " set up vimball tab
-  tabnew
-  silent! file Vimball
-  let vbtabnr= tabpagenr()
-  let didhelp= ""
-
-  " go to vim plugin home
-  let home   = substitute(&rtp,',.*$','','')
-  let curdir = getcwd()
-"  call Decho("exe cd ".home)
-  exe "cd ".home
-  let linenr  = 4
-  let filecnt = 0
-
-  " give title to listing of (extracted) files from Vimball Archive
-  if a:really
-   echohl Title | echomsg "Vimball Archive" | echohl None
-  else
-   echohl Title | echomsg "Vimball Archive Listing" | echohl None
-  endif
-
-  " apportion vimball contents to various files
-"  call Decho("exe tabn ".curtabnr)
-  exe "tabn ".curtabnr
-"  call Decho("linenr=".linenr." line$=".line("$"))
-  while 1 < linenr && linenr < line("$")
-   let fname   = getline(linenr)
-   let fsize   = getline(linenr+1)
-   let filecnt = filecnt + 1
-   if a:really
-    echomsg "extracted <".fname.">: ".fsize." lines"
-   else
-    echomsg "would extract <".fname.">: ".fsize." lines"
-   endif
-"   call Decho(linenr.": will extract file<".fname.">")
-"   call Decho((linenr+1).": fsize=".fsize)
-
-   " make directories if they don't exist yet
-   let fnamebuf= fname
-   while fnamebuf =~ '/'
-   	let dirname  = substitute(fnamebuf,'/.*$','','e')
-   	let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','e')
-	if !isdirectory(dirname)
-"	 call Decho("making <".dirname.">")
-	 call mkdir(dirname)
-	endif
-	exe "cd ".dirname
-   endwhile
-   exe "cd ".home
-
-   " grab specified qty of lines and place into "a" buffer
-   exe linenr
-   norm! jjma
-   exe (linenr + fsize + 1)
-   silent norm! "ay'a
-"   call Decho("yanked ".fsize." lines into register-a")
-
-"   call Decho("didhelp<".didhelp."> fname<".fname.">")
-   if didhelp == "" && fname =~ 'doc/[^/]\+\.txt$'
-   	let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.txt$','\1','e')
-"	call Decho("didhelp<".didhelp.">")
-   endif
-
-   " copy "a" buffer into tab
-"   call Decho('copy "a buffer into tab#'.vbtabnr)
-   exe "tabn ".vbtabnr
-   silent! %d
-   silent norm! "aPGdd1G
-"   call Decho("rega<".@a.">")
-
-   " write tab to file
-"   call Decho("exe w! ".fname)
-   exe "silent w! ".fname
-
-"   call Decho("exe tabn ".curtabnr)
-   exe "tabn ".curtabnr
-"   let oldlinenr = linenr " Decho
-   let linenr    = linenr + fsize + 2
-"   call Decho("update linenr= [linenr=".oldlinenr."] + [fsize=".fsize."] + 2 = ".linenr)
-  endwhile
-
-  " set up help
-"  call Decho("about to set up help: didhelp<".didhelp.">")
-  if didhelp != ""
-"   call Decho("exe helptags ".home."/".didhelp)
-   exe "helptags ".home."/".didhelp
-   echomsg "did helptags"
-  endif
-
-  " make sure a "Press ENTER..." prompt appears to keep the messages showing!
-  while filecnt < &ch
-   echomsg " "
-   let filecnt= filecnt + 1
-  endwhile
-
-  " restore events, delete tab and buffer
-  exe "tabn ".vbtabnr
-  setlocal nomod bh=wipe
-  exe "tabn ".curtabnr
-  exe "tabc ".vbtabnr
-  let &ei= eikeep
-  let @a = regakeep
-  if makeep[0] != 0
-   " restore mark a
-"   call Decho("restore mark-a: makeep=".string(makeep))
-   call setpos("'a",makeep)
-   ka
-  endif
-  exe "cd ".curdir
-
-"  call Dret("Vimball")
-endfun
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/django.vim
@@ -0,0 +1,72 @@
+" Vim syntax file
+" Language:	Django template
+" Maintainer:	Dave Hodder <dmh@dmh.org.uk>
+" Last Change:	2006 Mar 23
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syntax case match
+
+" Django template built-in tags and parameters
+" 'comment' doesn't appear here because it gets special treatment
+syn keyword djangoStatement contained as block endblock by cycle debug else
+syn keyword djangoStatement contained extends filter endfilter firstof for
+syn keyword djangoStatement contained endfor if endif ifchanged endifchanged
+syn keyword djangoStatement contained ifequal endifequal ifnotequal
+syn keyword djangoStatement contained endifnotequal in include load not now or
+syn keyword djangoStatement contained parsed regroup reversed spaceless
+syn keyword djangoStatement contained endspaceless ssi templatetag openblock
+syn keyword djangoStatement contained closeblock openvariable closevariable
+syn keyword djangoStatement contained widthratio with
+
+" Django templete built-in filters
+syn keyword djangoFilter contained add addslashes capfirst center cut date
+syn keyword djangoFilter contained default default_if_none dictsort
+syn keyword djangoFilter contained dictsortreversed divisibleby escape
+syn keyword djangoFilter contained filesizeformat first fix_ampersands
+syn keyword djangoFilter contained floatformat get_digit join length length_is
+syn keyword djangoFilter contained linebreaks linebreaksbr linenumbers ljust
+syn keyword djangoFilter contained lower make_list phone2numeric pluralize
+syn keyword djangoFilter contained pprint random removetags rjust slice slugify
+syn keyword djangoFilter contained stringformat striptags time timesince title
+syn keyword djangoFilter contained truncatewords unordered_list upper urlencode
+syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno
+
+" Django template constants (always surrounded by double quotes)
+syn region djangoArgument contained start=/"/ skip=/\\"/ end=/"/
+
+" Django template tag and variable blocks
+syn region djangoTagBlock start="{%" end="%}" contains=djangoStatement,djangoFilter,djangoArgument display
+syn region djangoVarBlock start="{{" end="}}" contains=djangoFilter,djangoArgument display
+
+" Django template 'comment' tag
+syn region djangoComment start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}"
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+if version >= 508 || !exists("did_django_syn_inits")
+  if version < 508
+    let did_django_syn_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink djangoTagBlock PreProc
+  HiLink djangoVarBlock PreProc
+  HiLink djangoStatement Statement
+  HiLink djangoFilter Identifier
+  HiLink djangoArgument Constant
+  HiLink djangoComment Comment
+
+  delcommand HiLink
+endif
+
+let b:current_syntax = "django"
new file mode 100644
--- /dev/null
+++ b/runtime/syntax/htmldjango.vim
@@ -0,0 +1,30 @@
+" Vim syntax file
+" Language:	Django HTML template
+" Maintainer:	Dave Hodder <dmh@dmh.org.uk>
+" Last Change:	2006 Mar 06
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+if !exists("main_syntax")
+  let main_syntax = 'html'
+endif
+
+if version < 600
+  so <sfile>:p:h/django.vim
+  so <sfile>:p:h/html.vim
+else
+  runtime! syntax/django.vim
+  runtime! syntax/html.vim
+  unlet b:current_syntax
+endif
+
+syntax cluster htmlPreproc add=djangoPlaceHolder
+syntax cluster htmlString add=djangoPlaceHolder
+
+let b:current_syntax = "htmldjango"
--- a/src/Makefile
+++ b/src/Makefile
@@ -1857,8 +1857,8 @@ installtutor: $(DEST_RT) $(DEST_TUTOR)
 # spell file is there.
 installspell: $(DEST_VIM) $(DEST_RT) $(DEST_SPELL)
 	if test -f $(SPELLSOURCE)/en.latin1.spl; then \
-	  $(INSTALL_DATA) $(SPELLSOURCE)/*.spl $(SPELLSOURCE)/*.vim $(DEST_SPELL); \
-	  chmod $(HELPMOD) $(DEST_SPELL)/*.spl $(DEST_SPELL)/*.vim; \
+	  $(INSTALL_DATA) $(SPELLSOURCE)/*.spl $(SPELLSOURCE)/*.sug $(SPELLSOURCE)/*.vim $(DEST_SPELL); \
+	  chmod $(HELPMOD) $(DEST_SPELL)/*.spl $(DEST_SPELL)/*.sug $(DEST_SPELL)/*.vim; \
 	fi
 
 # install helper program xxd
@@ -2029,7 +2029,7 @@ installgvimdiff: $(DEST_BIN)/$(GVIMDIFFT
 $(DEST_BIN)/$(EVIEWTARGET):
 	cd $(DEST_BIN); ln -s $(VIMTARGET) $(EVIEWTARGET)
 
-# create links for the manual pages with various names to vim.	This is only
+# Create links for the manual pages with various names to vim.	This is only
 # done when the links (or manpages with the same name) don't exist yet.
 
 INSTALLMLARGS = $(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME) \
@@ -2520,6 +2520,8 @@ install_macosx: gui_bundle
 # Remove the link to the runtime dir, don't want to copy all of that.
 	-rm $(RESDIR)/vim/runtime
 	$(INSTALL_DATA_R) $(APPDIR) $(DESTDIR)$(prefix)
+# Generate the help tags file now, it won't work with "make installruntime".
+	-@srcdir=`pwd`; cd $(HELPSOURCE); $(MAKE) VIMEXE=$$srcdir/$(VIMTARGET) vimtags
 # Install the runtime files.  Recursive!
 	-mkdir -p $(DESTDIR)$(prefix)/$(RESDIR)/vim/runtime
 #	-mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin
@@ -2538,7 +2540,6 @@ gui_bundle: $(RESDIR) bundle-dir bundle-
 	mkdir -p $@
 
 bundle-dir: $(APPDIR)/Contents $(VIMTARGET)
-	-@srcdir=`pwd`; cd $(HELPSOURCE); $(MAKE) VIMEXE=$$srcdir/$(VIMTARGET) vimtags
 # Make a link to the runtime directory, so that we can try out the executable
 # without installing it.
 	mkdir -p $(RESDIR)/vim
--- a/src/config.mk.in
+++ b/src/config.mk.in
@@ -135,8 +135,6 @@ NARROW_PROTO	= @NARROW_PROTO@
 GUI_X_LIBS	= @GUI_X_LIBS@
 MOTIF_LIBNAME	= @MOTIF_LIBNAME@
 GTK_LIBNAME	= @GTK_LIBNAME@
-KDE_PREFIX	= @KDE_PREFIX@
-MOC             = @MOC@
 
 ### Any OS dependent extra source and object file
 OS_EXTRA_SRC	= @OS_EXTRA_SRC@
--- a/src/configure.in
+++ b/src/configure.in
@@ -169,9 +169,9 @@ if test "`(uname) 2>/dev/null`" = Darwin
     fi
   fi
 
-  dnl Avoid a bug with -O2 with gcc 4.0.  Symptom: malloc() reports double
+  dnl Avoid a bug with -O2 with gcc 4.0.1.  Symptom: malloc() reports double
   dnl free.  This happens in expand_filename(), because the optimizer swaps
-  dnl two blocks of code that use "repl" that can't be swapped.
+  dnl two blocks of code, both using "repl", that can't be swapped.
   if test "$MACARCH" = "intel" -o "$MACARCH" = "both"; then
     CFLAGS=`echo "$CFLAGS" | sed 's/-O[[23456789]]/-Oz/'`
   fi
--- a/src/eval.c
+++ b/src/eval.c
@@ -1661,11 +1661,12 @@ ex_let(eap)
     int		var_count = 0;
     int		semicolon = 0;
     char_u	op[2];
-
-    expr = skip_var_list(arg, &var_count, &semicolon);
-    if (expr == NULL)
-	return;
-    expr = vim_strchr(expr, '=');
+    char_u	*argend;
+
+    argend = skip_var_list(arg, &var_count, &semicolon);
+    if (argend == NULL)
+	return;
+    expr = vim_strchr(argend, '=');
     if (expr == NULL)
     {
 	/*
@@ -1692,7 +1693,7 @@ ex_let(eap)
     {
 	op[0] = '=';
 	op[1] = NUL;
-	if (expr > arg)
+	if (expr > argend)
 	{
 	    if (vim_strchr((char_u *)"+-.", expr[-1]) != NULL)
 		op[0] = expr[-1];   /* +=, -= or .= */
@@ -12664,7 +12665,8 @@ list2proftime(arg, tm)
     n1 = list_find_nr(arg->vval.v_list, 0L, &error);
     n2 = list_find_nr(arg->vval.v_list, 1L, &error);
 # ifdef WIN3264
-    tm->QuadPart = (n1 << 32) + n2;
+    tm->HighPart = n1;
+    tm->LowPart = n2;
 # else
     tm->tv_sec = n1;
     tm->tv_usec = n2;
@@ -12710,8 +12712,8 @@ f_reltime(argvars, rettv)
 	long	n1, n2;
 
 # ifdef WIN3264
-	n1 = res.QuadPart >> 32;
-	n2 = res.QuadPart & 0xffffffff;
+	n1 = res.HighPart;
+	n2 = res.LowPart;
 # else
 	n1 = res.tv_sec;
 	n2 = res.tv_usec;
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -213,8 +213,12 @@ EX(CMD_cfile,		"cfile",	ex_cfile,
 			TRLBAR|FILE1|BANG),
 EX(CMD_cfirst,		"cfirst",	ex_cc,
 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
+EX(CMD_cgetbuffer,	"cgetbuffer",	ex_cbuffer,
+			RANGE|NOTADR|WORD1|TRLBAR),
 EX(CMD_cgetfile,	"cgetfile",	ex_cfile,
 			TRLBAR|FILE1|BANG),
+EX(CMD_cgetexpr,	"cgetexpr",	ex_cexpr,
+			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG),
 EX(CMD_chdir,		"chdir",	ex_cd,
 			BANG|FILE1|TRLBAR|CMDWIN),
 EX(CMD_changes,		"changes",	ex_changes,
@@ -517,6 +521,10 @@ EX(CMD_lfirst,		"lfirst",	ex_cc,
 			RANGE|NOTADR|COUNT|TRLBAR|BANG),
 EX(CMD_lgetfile,	"lgetfile",	ex_cfile,
 			TRLBAR|FILE1|BANG),
+EX(CMD_lgetbuffer,	"lgetbuffer",	ex_cbuffer,
+			RANGE|NOTADR|WORD1|TRLBAR),
+EX(CMD_lgetexpr,	"lgetexpr",	ex_cexpr,
+			NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG),
 EX(CMD_lgrep,		"lgrep",	ex_make,
 			RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE),
 EX(CMD_lgrepadd,	"lgrepadd",	ex_make,
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1749,6 +1749,8 @@ cmdline_changed:
 		end_pos = curwin->w_cursor;
 		curwin->w_cursor = save_pos;
 	    }
+	    else
+		end_pos = curwin->w_cursor; /* shutup gcc 4 */
 
 	    validate_cursor();
 
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -41,6 +41,10 @@
 # endif
 # include <gnome.h>
 # include "version.h"
+#  ifdef HAVE_GTK2
+/* missing prototype in bonobo-dock-item.h */
+extern void bonobo_dock_item_set_behavior(BonoboDockItem *dock_item, BonoboDockItemBehavior beh);
+#  endif
 #endif
 
 #if !defined(FEAT_GUI_GTK) && defined(PROTO)
@@ -3541,8 +3545,10 @@ gui_mch_init(void)
 	gnome_app_set_menus(GNOME_APP(gui.mainwin), GTK_MENU_BAR(gui.menubar));
 	dockitem = gnome_app_get_dock_item_by_name(GNOME_APP(gui.mainwin),
 						   GNOME_APP_MENUBAR_NAME);
-	// bonobo_dock_item_set_behavior(dockitem,
-	//				 BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING);
+	/* We don't want the menu to float. */
+	bonobo_dock_item_set_behavior(dockitem,
+		bonobo_dock_item_get_behavior(dockitem)
+				       | BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING);
 	gui.menubar_h = GTK_WIDGET(dockitem);
 #  else
 	gui.menubar_h = gnome_dock_item_new("VimMainMenu",
@@ -3600,9 +3606,10 @@ gui_mch_init(void)
 						   GNOME_APP_TOOLBAR_NAME);
 	gui.toolbar_h = GTK_WIDGET(dockitem);
 	/* When the toolbar is floating it gets stuck.  So long as that isn't
-	 * fixed let's disallow floating.  Also changes it appearance... */
+	 * fixed let's disallow floating. */
 	bonobo_dock_item_set_behavior(dockitem,
-					 BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING);
+		bonobo_dock_item_get_behavior(dockitem)
+				       | BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING);
 	gtk_container_set_border_width(GTK_CONTAINER(gui.toolbar), 0);
 #  else
 	GtkWidget *dockitem;
--- a/src/option.c
+++ b/src/option.c
@@ -6053,7 +6053,7 @@ did_set_string_option(opt_idx, varp, new
 #if defined(FEAT_GUI_TABLINE)
     /* 'guitablabel' */
     else if (varp == &p_gtl)
-	gui_update_tabline();
+	gui_init_which_components(NULL);
 #endif
 
 #if defined(FEAT_MOUSE_TTY) && (defined(UNIX) || defined(VMS))
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -3497,8 +3497,10 @@ set_errorlist(wp, list, action)
 /*
  * ":[range]cbuffer [bufnr]" command.
  * ":[range]caddbuffer [bufnr]" command.
+ * ":[range]cgetbuffer [bufnr]" command.
  * ":[range]lbuffer [bufnr]" command.
  * ":[range]laddbuffer [bufnr]" command.
+ * ":[range]lgetbuffer [bufnr]" command.
  */
     void
 ex_cbuffer(eap)
@@ -3507,7 +3509,8 @@ ex_cbuffer(eap)
     buf_T	*buf = NULL;
     qf_info_T	*qi = &ql_info;
 
-    if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_laddbuffer)
+    if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_lgetbuffer
+	    || eap->cmdidx == CMD_laddbuffer)
     {
 	qi = ll_get_or_alloc_list(curwin);
 	if (qi == NULL)
@@ -3534,12 +3537,12 @@ ex_cbuffer(eap)
 	    EMSG(_(e_invrange));
 	else
 	{
-	    int		buffer_cmd = (eap->cmdidx == CMD_cbuffer
-					       || eap->cmdidx == CMD_lbuffer);
-
-	    if (qf_init_ext(qi, NULL, buf, NULL, p_efm, buffer_cmd,
+	    if (qf_init_ext(qi, NULL, buf, NULL, p_efm,
+			    (eap->cmdidx != CMD_caddbuffer
+			     && eap->cmdidx != CMD_laddbuffer),
 						   eap->line1, eap->line2) > 0
-		    && buffer_cmd)
+		    && (eap->cmdidx == CMD_cbuffer
+			|| eap->cmdidx == CMD_lbuffer))
 		qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
 	}
     }
@@ -3547,8 +3550,8 @@ ex_cbuffer(eap)
 
 #if defined(FEAT_EVAL) || defined(PROTO)
 /*
- * ":cexpr {expr}" and ":caddexpr {expr}" command.
- * ":lexpr {expr}" and ":laddexpr {expr}" command.
+ * ":cexpr {expr}", ":cgetexpr {expr}", ":caddexpr {expr}" command.
+ * ":lexpr {expr}", ":lgetexpr {expr}", ":laddexpr {expr}" command.
  */
     void
 ex_cexpr(eap)
@@ -3557,7 +3560,8 @@ ex_cexpr(eap)
     typval_T	*tv;
     qf_info_T	*qi = &ql_info;
 
-    if (eap->cmdidx == CMD_lexpr || eap->cmdidx == CMD_laddexpr)
+    if (eap->cmdidx == CMD_lexpr || eap->cmdidx == CMD_lgetexpr
+	    || eap->cmdidx == CMD_laddexpr)
     {
 	qi = ll_get_or_alloc_list(curwin);
 	if (qi == NULL)
@@ -3572,11 +3576,12 @@ ex_cexpr(eap)
 	if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
 		|| (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
 	{
-	    int	    expr_cmd = (eap->cmdidx == CMD_cexpr
-				|| eap->cmdidx == CMD_lexpr);
-	    if (qf_init_ext(qi, NULL, NULL, tv, p_efm, expr_cmd,
+	    if (qf_init_ext(qi, NULL, NULL, tv, p_efm,
+			    (eap->cmdidx != CMD_caddexpr
+			     && eap->cmdidx != CMD_laddexpr),
 						 (linenr_T)0, (linenr_T)0) > 0
-		    && expr_cmd)
+		    && (eap->cmdidx == CMD_cexpr
+			|| eap->cmdidx == CMD_lexpr))
 		qf_jump(qi, 0, 0, eap->forceit);  /* display first error */
 	}
 	else
--- a/src/regexp.c
+++ b/src/regexp.c
@@ -6854,6 +6854,23 @@ vim_regsub_both(source, dest, copy, magi
 	}
 	if (no < 0)	      /* Ordinary character. */
 	{
+	    if (c == K_SPECIAL && src[0] != NUL && src[1] != NUL)
+	    {
+		/* Copy a specialy key as-is. */
+		if (copy)
+		{
+		    *dst++ = c;
+		    *dst++ = *src++;
+		    *dst++ = *src++;
+		}
+		else
+		{
+		    dst += 3;
+		    src += 2;
+		}
+		continue;
+	    }
+
 	    if (c == '\\' && *src != NUL)
 	    {
 		/* Check for abbreviations -- webb */
@@ -6877,13 +6894,12 @@ vim_regsub_both(source, dest, copy, magi
 				c = *src++;
 		}
 	    }
+#ifdef FEAT_MBYTE
+	    else if (has_mbyte)
+		c = mb_ptr2char(src - 1);
+#endif
 
 	    /* Write to buffer, if copy is set. */
-#ifdef FEAT_MBYTE
-	    if (has_mbyte)
-		c = mb_ptr2char(src - 1);
-#endif
-
 	    if (func == (fptr_T)NULL)	/* just copy */
 		cc = c;
 	    else
--- a/src/screen.c
+++ b/src/screen.c
@@ -8791,7 +8791,7 @@ draw_tabline()
     redraw_tabline = FALSE;
 
 #ifdef FEAT_GUI_TABLINE
-    /* When the GUI has the tabline then this always returns zero. */
+    /* Take care of a GUI tabline. */
     if (gui_use_tabline())
     {
 	gui_update_tabline();
--- a/src/undo.c
+++ b/src/undo.c
@@ -88,7 +88,7 @@ static int undo_allowed __ARGS((void));
 static int u_savecommon __ARGS((linenr_T, linenr_T, linenr_T));
 static void u_doit __ARGS((int count));
 static void u_undoredo __ARGS((int undo));
-static void u_undo_end __ARGS((int did_undo));
+static void u_undo_end __ARGS((int did_undo, int absolute));
 static void u_add_time __ARGS((char_u *buf, size_t buflen, time_t tt));
 static void u_freeheader __ARGS((buf_T *buf, u_header_T *uhp, u_header_T **uhpp));
 static void u_freebranch __ARGS((buf_T *buf, u_header_T *uhp, u_header_T **uhpp));
@@ -638,7 +638,7 @@ u_doit(startcount)
 	    curbuf->b_u_curhead = curbuf->b_u_curhead->uh_prev;
 	}
     }
-    u_undo_end(undo_undoes);
+    u_undo_end(undo_undoes, FALSE);
 }
 
 static int lastmark = 0;
@@ -704,7 +704,7 @@ undo_time(step, sec, absolute)
 	else
 	{
 	    if (sec)
-		closest = time(NULL) - starttime + 1;
+		closest = (long)(time(NULL) - starttime + 1);
 	    else
 		closest = curbuf->b_u_seq_last + 2;
 	    if (target >= closest)
@@ -739,7 +739,7 @@ undo_time(step, sec, absolute)
 	while (uhp != NULL)
 	{
 	    uhp->uh_walk = mark;
-	    val = (dosec ? (uhp->uh_time - starttime) : uhp->uh_seq);
+	    val = (long)(dosec ? (uhp->uh_time - starttime) : uhp->uh_seq);
 
 	    if (round == 1)
 	    {
@@ -788,7 +788,12 @@ undo_time(step, sec, absolute)
 	    else if (uhp->uh_next != NULL && uhp->uh_alt_prev == NULL
 		    && uhp->uh_next->uh_walk != nomark
 		    && uhp->uh_next->uh_walk != mark)
+	    {
+		/* If still at the start we don't go through this change. */
+		if (uhp == curbuf->b_u_curhead)
+		    uhp->uh_walk = nomark;
 		uhp = uhp->uh_next;
+	    }
 
 	    else
 	    {
@@ -880,7 +885,10 @@ undo_time(step, sec, absolute)
 	    /* Stop when going backwards in time and didn't find the exact
 	     * header we were looking for. */
 	    if (uhp->uh_seq == target && above)
+	    {
+		curbuf->b_u_seq_cur = target - 1;
 		break;
+	    }
 
 	    u_undoredo(FALSE);
 
@@ -903,7 +911,7 @@ undo_time(step, sec, absolute)
 	    }
 	}
     }
-    u_undo_end(did_undo);
+    u_undo_end(did_undo, absolute);
 }
 
 /*
@@ -1176,8 +1184,9 @@ u_undoredo(undo)
  * in some cases, but it's better than nothing).
  */
     static void
-u_undo_end(did_undo)
+u_undo_end(did_undo, absolute)
     int		did_undo;	/* just did an undo */
+    int		absolute;	/* used ":undo N" */
 {
     char	*msg;
     u_header_T	*uhp;
@@ -1215,7 +1224,13 @@ u_undo_end(did_undo)
 
     if (curbuf->b_u_curhead != NULL)
     {
-	if (did_undo)
+	/* For ":undo N" we prefer a "after #N" message. */
+	if (absolute && curbuf->b_u_curhead->uh_next != NULL)
+	{
+	    uhp = curbuf->b_u_curhead->uh_next;
+	    did_undo = FALSE;
+	}
+	else if (did_undo)
 	    uhp = curbuf->b_u_curhead;
 	else
 	    uhp = curbuf->b_u_curhead->uh_next;
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 21)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 21, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 23)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2006 Mar 23, compiled "