*version5.txt*  For Vim version 7.0d.  Last change: 2005 Apr 01


		  VIM REFERENCE MANUAL    by Bram Moolenaar

Welcome to Vim Version 5.0!

This document lists the differences between Vim 4.x and Vim 5.0.
Although 5.0 is mentioned here, this is also for version 5.1, 5.2, etc..
See |vi_diff.txt| for an overview of differences between Vi and Vim 5.0.
See |version4.txt| for differences between Vim 3.0 and Vim 4.0.

INCOMPATIBLE:				|incompatible-5|

Default value for 'compatible' changed	|cp-default|
Text formatting command "Q" changed	|Q-command-changed|
Command-line arguments changed		|cmdline-changed|
Autocommands are kept			|autocmds-kept|
Use of 'hidden' changed			|hidden-changed|
Text object commands changed		|text-objects-changed|
X-Windows Resources removed		|x-resources|
Use of $VIM				|$VIM-use|
Use of $HOME for MS-DOS and Win32	|$HOME-use|
Tags file format changed		|tags-file-changed|
Options changed				|options-changed|
CTRL-B in Insert mode gone		|i_CTRL-B-gone|

NEW FEATURES:				|new-5|

Syntax highlighting			|new-highlighting|
Built-in script language		|new-script|
Perl and Python support			|new-perl-python|
Win32 GUI version			|added-win32-GUI|
VMS version				|added-VMS|
BeOS version				|added-BeOS|
Macintosh GUI version			|added-Mac|
More Vi compatible			|more-compatible|
Read input from stdin			|read-stdin|
Regular expression patterns		|added-regexp|
Overloaded tags				|tag-overloaded|
New commands				|new-commands|
New options				|added-options|
New command-line arguments		|added-cmdline-args|
Various additions			|added-various|

IMPROVEMENTS				|improvements-5|

COMPILE TIME CHANGES			|compile-changes-5|

BUG FIXES				|bug-fixes-5|

VERSION 5.1			|version-5.1|
Changed					|changed-5.1|
Added					|added-5.1|
Fixed					|fixed-5.1|

VERSION 5.2			|version-5.2|
Long lines editable			|long-lines|
File browser added			|file-browser-5.2|
Dialogs added				|dialogs-added|
Popup menu added			|popup-menu-added|
Select mode added			|new-Select-mode|
Session files added			|new-session-files|
User defined functions and commands	|new-user-defined|
New interfaces				|interfaces-5.2|
New ports				|ports-5.2|
Multi-byte support			|new-multi-byte|
New functions				|new-functions-5.2|
New options				|new-options-5.2|
New Ex commands				|new-ex-commands-5.2|
Changed					|changed-5.2|
Added					|added-5.2|
Fixed					|fixed-5.2|

VERSION 5.3			|version-5.3|
Changed					|changed-5.3|
Added					|added-5.3|
Fixed					|fixed-5.3|

VERSION 5.4			|version-5.4|
Runtime directory introduced		|new-runtime-dir|
Filetype introduced			|new-filetype-5.4|
Vim script line continuation		|new-line-continuation|
Improved session files			|improved-sessions|
Autocommands improved			|improved-autocmds-5.4|
Encryption				|new-encryption|
GTK GUI port				|new-GTK-GUI|
Menu changes				|menu-changes-5.4|
Viminfo improved			|improved-viminfo|
Various new commands			|new-commands-5.4|
Various new options			|new-options-5.4|
Vim scripts				|new-script-5.4|
Avoid hit-enter prompt			|avoid-hit-enter|
Improved quickfix			|improved-quickfix|
Regular expressions			|regexp-changes-5.4|
Changed					|changed-5.4|
Added					|added-5.4|
Fixed					|fixed-5.4|

VERSION 5.5			|version-5.5|
Changed					|changed-5.5|
Added					|added-5.5|
Fixed					|fixed-5.5|

VERSION 5.6			|version-5.6|
Changed					|changed-5.6|
Added					|added-5.6|
Fixed					|fixed-5.6|

VERSION 5.7			|version-5.7|
Changed					|changed-5.7|
Added					|added-5.7|
Fixed					|fixed-5.7|

VERSION 5.8			|version-5.8|
Changed					|changed-5.8|
Added					|added-5.8|
Fixed					|fixed-5.8|

==============================================================================
				 INCOMPATIBLE		*incompatible-5*

Default value for 'compatible' changed			*cp-default*
--------------------------------------

Vim version 5.0 tries to be more Vi compatible.  This helps people who use Vim
as a drop-in replacement for Vi, but causes some things to be incompatible
with version 4.x.

In version 4.x the default value for the 'compatible' option was off.  Now the
default is on.  The first thing you will notice is that the "u" command undoes
itself.  Other side effects will be that mappings may work differently or not
work at all.

Since a lot of people switching from Vim 4.x to 5.0 will find this annoying,
the 'compatible' option is switched off if Vim finds a vimrc file.  This is a
bit of magic to make sure that 90% of the Vim users will not be bitten by
this change.

What does this mean?
- If you prefer to run in 'compatible' mode and don't have a vimrc file, you
  don't have to do anything.
- If you prefer to run in 'nocompatible' mode and do have a vimrc file, you
  don't have to do anything.
- If you prefer to run in 'compatible' mode and do have a vimrc file, you
  should put this line first in your vimrc file: >
	:set compatible
- If you prefer to run in 'nocompatible' mode and don't have a vimrc file,
  you can do one of the following:
    - Create an empty vimrc file (e.g.: "~/.vimrc" for Unix).
    - Put this command in your .exrc file or $EXINIT: >
		:set nocompatible
<   - Start Vim with the "-N" argument.

If you are new to Vi and Vim, using 'nocompatible' is strongly recommended,
because Vi has a lot of unexpected side effects, which are avoided by this
setting.  See 'compatible'.

If you like some things from 'compatible' and some not, you can tune the
compatibility with 'cpoptions'.

When you invoke Vim as "ex" or "gex", Vim always starts in compatible mode.


Text formatting command "Q" changed			*Q-command-changed*
-----------------------------------

The "Q" command formerly formatted lines to the width the 'textwidth' option
specifies.  The command for this is now "gq" (see |gq| for more info).  The
reason for this change is that "Q" is the standard Vi command to enter "Ex"
mode, and Vim now does in fact have an "Ex" mode (see |Q| for more info).

If you still want to use "Q" for formatting, use this mapping: >
	:noremap Q gq
And if you also want to use the functionality of "Q": >
	:noremap gQ Q


Command-line arguments changed				*cmdline-changed*
------------------------------

Command-line file-arguments and option-arguments can now be mixed.  You can
give options after the file names.  Example: >
   vim main.c -g

This is not possible when editing a file that starts with a '-'.  Use the "--"
argument then |---|: >
   vim -g -- -main.c

"-v" now means to start Ex in Vi mode, use "-R" for read-only mode.
old: "vim -v file"	|-v|
new: "vim -R file"	|-R|

"-e" now means to start Vi in Ex mode, use "-q" for quickfix.
old: "vim -e errorfile"	|-e|
new: "vim -q errorfile" |-q|

"-s" in Ex mode now means to run in silent (batch) mode. |-s-ex|

"-x" reserved for crypt, use "-f" to avoid starting a new CLI (Amiga).
old: "vim -x file"	|-x|
new: "vim -f file"	|-f|

Vim allows up to ten "+cmd" and "-c cmd" arguments.  Previously Vim executed
only the last one.

"-n" now overrides any setting for 'updatecount' in a vimrc file, but not in
a gvimrc file.


Autocommands are kept					*autocmds-kept*
---------------------

Before version 5.0, autocommands with the same event, file name pattern, and
command could appear only once.  This was fine for simple autocommands (like
setting option values), but for more complicated autocommands, where the same
command might appear twice, this restriction caused problems.  Therefore
Vim stores all autocommands and keeps them in the order that they are defined.

The most obvious side effect of this change is that when you source a vimrc
file twice, the autocommands in it will be defined twice.  To avoid this, do
one of these:

- Remove any autocommands that might potentially defined twice before
  defining them.  Example: >
	:au! * *.ext
	:au BufEnter *.ext ...

- Put the autocommands inside an ":if" command.  Example: >
	if !exists("did_ext_autocmds")
	  let did_ext_autocmds = 1
	  autocmd BufEnter *.ext ...
	endif

- Put your autocommands in a different autocommand group so you can remove
  them before defining them |:augroup|: >
	augroup uncompress
	  au!
	  au BufReadPost *.gz ...
	augroup END


Use of 'hidden' changed					*hidden-changed*
-----------------------

In version 4.x, only some commands used the 'hidden' option.  Now all commands
uses it whenever a buffer disappears from a window.

Previously you could do ":buf xxx" in a changed buffer and that buffer would
then become hidden.  Now you must set the 'hidden' option for this to work.

The new behavior is simpler: whether Vim hides buffers no longer depends on
the specific command that you use.
- with 'hidden' not set, you never get hidden buffers.  Exceptions are the
  ":hide" and ":close!" commands and, in rare cases, where you would otherwise
  lose changes to the buffer.
- With 'hidden' set, you almost never unload a buffer.  Exceptions are the
  ":bunload" or ":bdel" commands.

":buffer" now supports a "!": abandon changes in current buffer.  So do
":bnext", ":brewind", etc.


Text object commands changed				*text-objects-changed*
----------------------------

Text object commands have new names.  This allows more text objects and makes
characters available for other Visual mode commands.  Since no more single
characters were available, text objects names now require two characters.
The first one is always 'i' or 'a'.
	OLD	NEW	~
	a	aw	a word			|v_aw|
	A	aW	a WORD			|v_aW|
	s	as	a sentence		|v_as|
	p	ap	a paragraph		|v_ap|
	S	ab	a () block		|v_ab|
	P	aB	a {} block		|v_aB|

There is another set of text objects that starts with "i", for "inner".  These
select the same objects, but exclude white space.


X-Windows Resources removed				*x-resources*
--------------------------

Vim no longer supports the following X resources:
- boldColor
- italicColor
- underlineColor
- cursorColor

Vim now uses highlight groups to set colors.  This avoids the confusion of
using a bold Font, which would imply a certain color.  See |:highlight| and
|gui-resources|.


Use of $VIM						*$VIM-use*
-----------

Vim now uses the VIM environment variable to find all Vim system files.  This
includes the global vimrc, gvimrc, and menu.vim files and all on-line help
and syntax files.  See |$VIM|.  Starting with version 5.4, |$VIMRUNTIME| can
also be used.
For Unix, Vim sets a default value for $VIM when doing "make install".
When $VIM is not set, its default value is the directory from 'helpfile',
excluding "/doc/help.txt".


Use of $HOME for MS-DOS and Win32			*$HOME-use*
---------------------------------

The MS-DOS and Win32 versions of Vim now first check $HOME when searching for
a vimrc or exrc file and for reading/storing the viminfo file.  Previously Vim
used $VIM for these systems, but this causes trouble on a system with several
users.  Now Vim uses $VIM only when $HOME is not set or the file is not found
in $HOME.  See |_vimrc|.


Tags file format changed				*tags-file-changed*
------------------------

Only Tabs are allowed to separate fields in a tags file.  This allows for
spaces in a file name and is still Vi compatible.  In previous versions of
Vim, any white space was allowed to separate the fields.  If you have a file
which doesn't use a single Tab between fields, edit the tags file and execute
this command: >
	:%s/\(\S*\)\s\+\(\S*\)\s\+\(.*\)/\1\t\2\t\3/


Options changed						*options-changed*
---------------

The default value of 'errorfile' has changed from "errors.vim" to "errors.err".
The reason is that only Vim scripts should have the ".vim" extensions.

The ":make" command no longer uses the 'errorfile' option.  This prevents the
output of the ":make" command from overwriting a manually saved error file.
":make" uses the 'makeef' option instead.  This also allows for generating a
unique name, to prevent concurrently running ":make" commands from overwriting
each other's files.

With 'insertmode' set, a few more things change:
- <Esc> in Normal mode goes to Insert mode.
- <Esc> in Insert mode doesn't leave Insert mode.
- When doing ":set im", go to Insert mode immediately.

Vim considers a buffer to be changed when the 'fileformat' (formerly the
'textmode' option) is different from the buffer's initial format.


CTRL-B in Insert mode gone				*i_CTRL-B-gone*
--------------------------

When Vim was compiled with the |+rightleft| feature, you could use CTRL-B to
toggle the 'revins' option.  Unfortunately, some people hit the 'B' key
accidentally when trying to type CTRL-V or CTRL-N and then didn't know how to
undo this.  Since toggling the 'revins' option can easily be done with the
mapping below, this use of the CTRL-B key is disabled.  You can still use the
CTRL-_ key for this |i_CTRL-_|. >
   :imap <C-B> <C-O>:set revins!<CR>

==============================================================================
				 NEW FEATURES		*new-5*

Syntax highlighting					*new-highlighting*
-------------------

Vim now has a very flexible way to highlighting just about any type of file.
See |syntax|.  Summary: >
   :syntax on

Colors and attributes can be set for the syntax highlighting, and also for
other highlighted items with the ':' flag in the 'highlight' option.  All
highlighted items are assigned a highlight group which specifies their
highlighting.  See |:highlight|.  The default colors have been improved.

You can use the "Normal" group to set the default fore/background colors for a
color terminal.  For the GUI, you can use this group to specify the font, too.

The "2html.vim" script can be used to convert any file that has syntax
highlighting to HTML.  The colors will be exactly the same as how you see them
in Vim.  With a HTML viewer you can also print the file with colors.


Built-in script language				*new-script*
------------------------

A few extra commands and an expression evaluator enable you to write simple
but powerful scripts.  Commands include ":if" and ":while".  Expressions can
manipulate numbers and strings.  You can use the '=' register to insert
directly the result of an expression.  See |expression|.


Perl and Python support					*new-perl-python*
-----------------------

Vim can call Perl commands with ":perldo", ":perl", etc.  See |perl|.
Patches made by Sven Verdoolaege and Matt Gerassimoff.

Vim can call Python commands with ":python" and ":pyfile".  See |python|.

Both of these are only available when enabled at compile time.


Win32 GUI version					*added-win32-GUI*
-----------------

The GUI has been ported to MS Windows 95 and NT.  All the features of the X11
GUI are available to Windows users now.  |gui-w32|
This also fixes problems with running the Win32 console version under Windows
95, where console support has always been bad.
There is also a version that supports OLE automation interface.  |if_ole.txt|
Vim can be integrated with Microsoft Developer Studio using the VisVim DLL.
It is possible to produce a DLL version of gvim with Borland C++ (Aaron).


VMS version						*added-VMS*
-----------

Vim can now also be used on VMS systems.  Port done by Henk Elbers.
This has not been tested much, but it should work.
Sorry, no documentation!


BeOS version						*added-BeOS*
------------

Vim can be used on BeOS systems (including the BeBox).  (Olaf Seibert)
See |os_beos.txt|.


Macintosh GUI version					*added-Mac*
---------------------

Vim can now be used on the Macintosh.  (Dany St-Amant)
It has not been tested much yet, be careful!
See |os_mac.txt|.


More Vi compatible					*more-compatible*
------------------

There is now a real Ex mode.  Started with the "Q" command, or by calling the
executable "ex" or "gex".  |Ex-mode|

Always allow multi-level undo, also in Vi compatible mode.  When the 'u' flag
in 'cpoptions' is included, CTRL-R is used for repeating the undo or redo
(like "." in Nvi).


Read input from stdin					*read-stdin*
---------------------

When using the "-" command-line argument, Vim reads its text input from stdin.
This can be used for putting Vim at the end of a pipe: >
   grep "^a.*" *.c | vim -
See |--|.


Regular expression patterns				*added-regexp*
---------------------------

Added specifying a range for the number of matches of a atom: "\{a,b}". |/\{|
Added the "shortest match" regexp "\{-}" (Webb).
Added "\s", matches a white character.  Can replace "[ \t]".		|/\s|
Added "\S", matches a non-white character.  Can replace "[^ \t]".	|/\S|


Overloaded tags						*tag-overloaded*
---------------

When using a language like C++, there can be several tags for the same
tagname.  Commands have been added to be able to jump to any of these
overloaded tags:
|:tselect|	List matching tags, and jump to one of them.
|:stselect|	Idem, and split window.
|g_CTRL-]|	Do ":tselect" with the word under the cursor.

	After ":ta {tagname}" with multiple matches:
|:tnext|	Go to next matching tag.
|:tprevious|	Go to previous matching tag.
|:trewind|	Go to first matching tag.
|:tlast|	Go to last matching tag.

The ":tag" command now also accepts wildcards.  When doing command-line
completion on tags, case-insensitive matching is also available (at the end).


New commands						*new-commands*
------------

|:amenu|	Define menus for all modes, inserting a CTRL-O for Insert
		mode, ESC for Visual and CTRL-C for Cmdline mode.  "amenu" is
		used for the default menus and the Syntax menu.

|:augroup|	Set group to be used for following autocommands.  Allows the
		grouping of autocommands to enable deletion of a specific
		group.

|:crewind|	Go to first error.
|:clast|	Go to last error.

|:doautoall|	Execute autocommands for all loaded buffers.

|:echo|		Echo its argument, which is an expression.  Can be used to
		display messages which include variables.

|:execute|	Execute its argument, which is an expression.  Can be used to
		built up an Ex command with anything.

|:hide|		Works like ":close".

|:if|		Conditional execution, for built-in script language.

|:intro|	Show introductory message.  This is always executed when Vim
		is started without file arguments.

|:let|		Assign a value to an internal variable.

|:omap|		Map only in operator-pending mode.  Makes it possible to map
		text-object commands.

|:redir|	Redirect output of messages to a file.

|:update|	Write when buffer has changed.

|:while|	While-loop for built-in script language.

Visual mode:
|v_O|		"O" in Visual block mode, moves the cursor to the other corner
		horizontally.
|v_D|		"D" in Visual block mode deletes till end of line.

Insert mode:
|i_CTRL-]|	Triggers abbreviation, without inserting any character.


New options						*added-options*
-----------

'background'	Used for selecting highlight color defaults.  Also used in
		"syntax.vim" for selecting the syntax colors.  Often set
		automatically, depending on the terminal used.

'complete'	Specifies how Insert mode completion works.

'eventignore'	Makes it possible to ignore autocommands temporarily.

'fileformat'	Current file format.  Replaces 'textmode'.
'fileformats'	Possible file formats.  Replaces 'textauto'.
		New is that this also supports Macintosh format: A single <CR>
		separates lines.
		The default for 'fileformats' for MS-DOS, Win32 and OS/2 is
		"dos,unix", also when 'compatible' set.  Unix type files
		didn't work anyway when 'fileformats' was empty.

'guicursor'	Set the cursor shape and blinking in various modes.
		Default is to adjust the cursor for Insert and Replace mode,
		and when an operator is pending.  Blinking is default on.

'fkmap'		Farsi key mapping.

'hlsearch'	Highlight all matches with the last used search pattern.

'hkmapp'	Phonetic Hebrew mapping. (Ilya Dogolazky)

'iconstring'	Define the name of the icon, when not empty.  (Version 5.2: the
		string is used literally, a newline can be used to make two
		lines.)

'lazyredraw'	Don't redraw the screen while executing macros, registers or
		other not typed commands.

'makeef'	Errorfile to be used for ":make".  "##" is replaced with a
		unique number.  Avoids that two Vim sessions overwrite each
		others errorfile.  The Unix default is "/tmp/vim##.err"; for
		Amiga "t:vim##.Err, for others "vim##.err".

'matchtime'	1/10s of a second to show a matching paren, when 'showmatch'
		is set.  Like Nvi.

'mousehide'	Hide mouse pointer in GUI when typing text.

'nrformats'	Defines what bases Vim will consider for numbers when using
		the CTRL-A and CTRL-X commands.  Default: "hex,octal".

'shellxquote'	Add extra quotes around the whole shell command, including
		redirection.

'softtabstop'	Make typing behave like tabstop is set at this value, without
		changing the value of 'tabstop'.  Makes it more easy to keep
		'ts' at 8, while still getting four spaces for a <Tab>.

'titlestring'	String for the window title, when not empty.  (Version 5.2:
		this string is used literally, a newline can be used to make
		two lines.)

'verbose'	Level of verbosity.  Makes it possible to show which .vimrc,
		.exrc, .viminfo files etc. are used for initializing.  Also
		to show autocommands that are being executed.  Can also be set
		by using the "-V" command-line argument.


New command-line arguments				*added-cmdline-args*
--------------------------

|-U|		Set the gvimrc file to be used.  Like "-u" for the vimrc.

|-V|		Set the 'verbose' option.  E.g. "vim -V10".

|-N|		Start in non-compatible mode.

|-C|		Start in compatible mode.

|-Z|		Start in restricted mode, disallow shell commands.  Can also
		be done by calling the executable "rvim".

|-h|		Show usage information and exit.


Various additions					*added-various*
-----------------

Added support for SNiFF+ connection (submitted by Toni Leherbauer).  Vim can
be used as an editor for SNiFF.  No documentation available...

For producing a bug report, the bugreport.vim script has been included.
Can be used with ":so $VIMRUNTIME/bugreport.vim", which creates the file
"bugreport.txt" in the current directory. |bugs|

Added range to ":normal" command.  Now you can repeat the same command for
each line in the range.  |:normal-range|

Included support for the Farsi language (Shiran).  Only when enabled at
compile time.  See |farsi|.

==============================================================================
				 IMPROVEMENTS		*improvements-5*

Performance:
- When 'showcmd' was set, mappings would execute much more slowly because the
  output would be flushed very often.  Helps a lot when executing the "life"
  macros with 'showcmd' set.
- Included patches for binary searching in tags file (David O'Neill).
  Can be disabled by resetting the 'tagbsearch' option.
- Don't update the ruler when repeating insert (slowed it down a lot).
- For Unix, file name expansion is now done internally instead of starting a
  shell for it.
- Expand environment variables with expand_env(), instead of calling the
  shell.  Makes ":so $VIMRUNTIME/syntax/syntax.vim" a LOT faster.
- Reduced output for cursor positioning: Use CR-LF for moving to first few
  columns in next few lines;  Don't output CR twice when using termios.
- Optimized cursor positioning.  Use CR, BS and NL when it's shorter than
  absolute cursor positioning.
- Disable redrawing while repeating insert "1000ii<Esc>".
- Made "d$" or "D" for long lines a lot faster (delete all characters at once,
  instead of one by one).
- Access option table by first letter, instead of searching from start.
- Made setting special highlighting attributes a lot faster by using
  highlight_attr[], instead of searching in the 'highlight' string.
- Don't show the mode when redrawing is disabled.
- When setting an option, only redraw the screen when required.
- Improved performance of Ex commands by using a lookup table for the first
  character.

Options:
'cinoptions'	Added 'g' flag, for C++ scope declarations.
'cpoptions'	Added 'E' flag: Disallow yanking, deleting, etc. empty text
		area.  Default is to allow empty yanks.  When 'E' is included,
		"y$" in an empty line now is handled as an error (Vi
		compatible).
		Added 'j' flag: Only add two spaces for a join after a '.',
		not after a '?' or '!'.
		Added 'A' flag: don't give ATTENTION message.
		Added 'L' flag: When not included, and 'list' is set,
		'textwidth' formatting works like 'list' is not set.
		Added 'W' flag:  Let ":w!" behave like Vi: don't overwrite
		readonly files, or a file owned by someone else.
'highlight'	Added '@' flag, for '@' characters after the last line on the
		screen, and '$' at the end of the line when 'list' is set.
		Added 'i' flag: Set highlighting for 'incsearch'.  Default
		uses "IncSearch" highlight group, which is linked to "Visual".
		Disallow 'h' flag in 'highlight' (wasn't used anymore since
		3.0).
'guifont'	Win32 GUI only: When set to "*" brings up a font requester.
'guipty'	Default on, because so many people need it.
'path'		Can contain wildcards, and "**" for searching a whole tree.
'shortmess'	Added 'I' flag to avoid the intro message.
'viminfo'	Added '%' flag: Store buffer list in viminfo file.

- Increased defaults for 'maxmem' and 'maxmemtot' for Unix and Win32.  Most
  machines have much more RAM now that prices have dropped.
- Implemented ":set all&", set all options to their default value. |:set|

Swap file:
- Don't create a swap file for a readonly file.  Then create one on the first
  change.  Also create a swapfile when the amount of memory used is getting
  too high. |swap-file|
- Make swap file "hidden", if possible.  On Unix this is done by prepending a
  dot to the swap file name.  When long file names are used, the DJGPP and
  Win32 versions also prepend a dot, in case a file on a mounted Unix file
  system is edited.  |:swapname|  On MSDOS the hidden file attribute is NOT
  set, because this causes problems with share.exe.
- 'updatecount' always defaults to non-zero, also for Vi compatible mode.
  This means there is a swap file, which can be used for recovery.

Tags:
- Included ctags 2.0 (Darren Hiebert).  The syntax for static tags changed
  from
	{tag}:{fname}	{fname}	{command}
  to
	{tag}	{fname}	{command};"	file:
  Which is both faster to parse, shorter and Vi compatible.  The old format is
  also still accepted, unless disabled in src/feature.h (see OLD_STATIC_TAGS).
  |tags-file-format|
- Completion of tags now also includes static tags for other files, at the
  end.
- Included "shtags" from Stephen Riehm.
- When finding a matching tag, but the file doesn't exist, continue searching
  for another match.  Helps when using the same tags file (with links) for
  different versions of source code.
- Give a tag with a global match in the current file a higher priority than a
  global match in another file.

Included xxd version V1.8 (Juergen Weigert).

Autocommands:
- VimLeave autocommands are executed after writing the viminfo file, instead
  of before.  |VimLeave|
- Allow changing autocommands while executing them.  This allows for
  self-modifying autocommands.  (idea from Goldberg)
- When using autocommands with two or more patterns, could not split
  ":if/:endif" over two lines.  Now all matching autocommands are executed in
  one do_cmdline().
- Autocommands no longer change the command repeated with ".".
- Search patterns are restored after executing autocommands.  This avoids
  that the 'hlsearch' highlighting is messed up by autocommands.
- When trying to execute an autocommand, also try matching the pattern with
  the short file name.  Helps when short file name is different from full
  file name (expanded symbolic links). |autocmd-patterns|
- Made the output of ":autocmd" shorter and look better.
- Expand <sfile> in an ":autocmd" when it is defined.  |<sfile>|
- Added "nested" flag to ":autocmd", allows nesting.  |autocmd-nested|
- Added [group] argument to ":autocmd".  Overrides the currently set group.
  |autocmd-groups|
- new events:
  |BufUnload|		before a buffer is unloaded
  |BufDelete|		before a buffer is deleted from the buffer list
  |FileChangedShell|	when a file's modification time has changed after
			executing a shell command
  |User|		user-defined autocommand
- When 'modified' was set by a BufRead* autocommand, it was reset again
  afterwards.  Now the ":set modified" is remembered.

GUI:
- Improved GUI scrollbar handling when redrawing is slower than the scrollbar
  events are generated.
- "vim -u NONE" now also stops loading the .gvimrc and other GUI inits.  |-u|
  Use "-U" to use another gvimrc file.  |-U|
- Handle CTRL-C for external command, also for systems where "setsid()" is
  supported.
- When starting the GUI, restrict the window size to the screen size.
- The default menus are read from $VIMRUNTIME/menu.vim.  This allows for a
  customized default menu.  |menu.vim|
- Improved the default menus.  Added File/Print, a Window menu, Syntax menu,
  etc.
- Added priority to the ":menu" command.  Now each menu can be put in a place
  where you want it, independent of the order in which the menus are defined.
  |menu-priority|

Give a warning in the intro screen when running the Win32 console version on
Windows 95 because there are problems using this version under Windows 95.
|win32-problems|

Added 'e' flag for ":substitute" command: Don't complain when not finding a
match (Campbell).  |:s|

When using search commands in a mapping, only the last one is kept in the
history.  Avoids that the history is trashed by long mappings.

Ignore characters after "ex", "view" and "gvim" when checking startup mode.
Allows the use of "gvim5" et. al.  |gvim| "gview" starts the GUI in readonly
mode.  |gview|

When resizing windows, the cursor is kept in the same relative position, if
possible.  (Webb)

":all" and ":ball" no longer close and then open a window for the same buffer.
Avoids losing options, jumplist, and other info.

"-f" command-line argument is now ignored if Vim was compiled without GUI.
|-f|

In Visual block mode, the right mouse button picks up the nearest corner.

Changed default mappings for DOS et al.  Removed the DOS-specific mappings,
only use the Windows ones.  Added Shift-Insert, Ctrl-Insert, Ctrl-Del and
Shift-Del.

Changed the numbers in the output of ":jumps", so you can see where {count}
CTRL-O takes you.  |:jumps|

Using "~" for $HOME now works for all systems.  |$HOME|

Unix: Besides using CTRL-C, also use the INTR character from the tty settings.
Somebody has INTR set to DEL.

Allow a <LF> in a ":help" command argument to end the help command, so another
command can follow.

Doing "%" on a line that starts with "   #if" didn't jump to matching "#else".
Don't recognize "#if", "#else" etc. for '%' when 'cpo' contains the '%' flag.
|%|

Insert mode expansion with "CTRL-N", "CTRL-P" and "CTRL-X" improved
|ins-completion|:
- 'complete' option added.
- When 'nowrapscan' is set, and no match found, report the searched direction
  in the error message.
- Repeating CTRL-X commands adds following words/lines after the match.
- When adding-expansions, accept single character matches.
- Made repeated CTRL-X CTRL-N not break undo, and "." repeats the whole
  insertion.  Also fixes not being able to backspace over a word that has been
  inserted with CTRL-N.

When copying characters in Insert mode from previous/next line, with CTRL-E or
CTRL-Y, 'textwidth' is no longer used.  |i_CTRL-E|

Commands that move in the arglist, like ":n" and ":rew", keep the old cursor
position of the file (this is mostly Vi compatible).

Vim now remembers the '< and '> marks for each buffer.  This fixes a problem
that a line-delete in one buffer invalidated the '< and '> marks in another
buffer.  |'<|

For MSDOS, Unix and OS/2: When $VIM not set, use the path from the executable.
When using the executable path for $VIM, remove "src/" when present.  Should
make Vim find the docs and syntax files when it is run directly after
compiling.  |$VIM|

When quitting Visual mode with <Esc>, the cursor is put at start of the Visual
area (like after executing an operator).

Win32 and Unix version: Removed 1100 character limit on external commands.

Added possibility to include a space in a ":edit +command" argument, by
putting a backslash before it.  |+cmd|

After recovery, BufReadPost autocommands are applied.  |:recover|

Added color support for "os2ansi", OS/2 console. (Slootman) |os2ansi|

Allow "%:p:h" when % is empty.  |:_%|

Included "<sfile>": file name from the ":source" command.  |<sfile>|

Added "<Bslash>" special character.  Helps for avoiding multiple backslashes
in mappings and menus.

In a help window, a double-click jumps to the tag under the cursor (like
CTRL-]).

<C-Left> and <C-Right> now work like <S-Left> and <S-Right>, move a word
forward/backward (Windows compatible). |<C-Left>|

Removed the requirement for a ":version" command in a .vimrc file.  It wasn't
used for anything.  You can use ":if" to handle differences between versions.
|:version|

For MS-DOS, Win32 and OS/2: When comparing file names for autocommands, don't
make a difference between '/' and '\' for path separator.

New termcap options:
"mb": blink.  Can only be used by assigning it to one of the other highlight
      options.  |t_mb|
"bc": backspace character.  |t_bc|
"nd": Used for moving the cursor right in the GUI, to avoid removing one line
      of pixels from the last bold character.  |t_nd|
"xs": highlighting not erased by overwriting, for hpterm.  Combined with
      'weirdinvert'.  Visual mode works on hpterm now.  |t_xs|

Unix: Set time of patch and backup file same as original file.  (Hiebert).

Amiga: In QuickFix mode no longer opens another window.  Shell commands can be
used now.

Added decmouse patches from David Binette.  Can now use Dec and Netterm mouse.
But only when enabled at compile time.

Added '#' register: Alternate file name |quote#|.  Display '#' register with
":dis" command. |:display|

Removed ':' from 'isfname' default for Unix.  Check for "://" in a file name
anyway.  Also check for ":\\", for MS-DOS.

Added count to "K"eyword command, when 'keywordprg' is "man", is inserted in
the man command.  "2K" results in "!man 2 <cword>".  |K|

When using "gf" on a relative path name, remove "../" from the file name, like
it's done for file names in the tags file. |gf|

When finishing recording, don't make the recorded register the default put
register.

When using "!!", don't put ":5,5!" on the command-line, but ":.!".  And some
other enhancements to replace the line number with "." or "$" when possible.

MSDOS et al.: Renamed $VIM/viminfo to $VIM/_viminfo.  It's more consistent:
.vimrc/_vimrc and .viminfo/_viminfo

For systems where case doesn't matter in file names (MSDOS, Amiga), ignore
case while sorting file names.  For buffer names too.

When reading from stdin doesn't work, read from stderr (helps for "foo | xargs
vim").

32 bit MS-DOS version: Replaced csdpmi3 by csdpmi4.

Changed <C-Left> and <C-Right> to skip a WORD instead of a word.

Warning for changed modified time when overwriting a file now also works on
other systems than Unix.

Unix: Changed the defaults for configure to be the same as the defaults for
Makefile: include GUI, Perl, and Python.

Some versions of Motif require "-lXpm".  Added check for this in configure.

Don't add "-L/usr/lib" to the link line, causes problems on a few systems.

==============================================================================
			     COMPILE TIME CHANGES	*compile-changes-5*

When compiling, allow a choice for minimal, normal or maximal features in an
easy way, by changing a single line in src/feature.h.
The DOS16 version has been compiled with minimal features to avoid running
out of memory too quickly. |dos16|
The Win32, DJGPP, and OS/2 versions use maximal features, because they have
enough memory.
The Amiga version is available with normal and maximal features.

Added "make test" to Unix version Makefile.  Allows for a quick check if most
"normal" commands work properly.  Also tests a few specific commands.

Added setlocale() with codepage support for DJGPP version.

autoconf:
- Added autoconf check for -lXdmcp.
- Included check for -lXmu, no longer needed to edit the Makefile for this.
- Switched to autoconf 2.12.
- Added configure check for <poll.h>.  Seems to be needed when including
  Perl on Linux?
- termlib is now checked before termcap.
- Added configure check for strncasecmp(), stricmp() and strnicmp().  Added
  vim_stricmp() for when there's no library function for stricmp().
- Use "datadir" in configure, instead of our own check for HELPDIR.

Removed "make proto" from Makefile.manx.  Could not make it work without a lot
of #ifdefs.

Removed "proto/" from paths in proto.h.  Needed for the Mac port.

Drastically changed Makefile.mint.  Now it includes the Unix Makefile.

Added support for Dos16 in Makefile.b32 (renamed Makefile.b32 to Makefile.bor)

All source files are now edited with a tabstop of 8 instead of 4, which is
better when debugging and using other tools.  'softtabstop' is set to 4, to
make editing easier.

Unix: Added "link.sh" script, which removes a few unnecessary libraries from
the link command.

Don't use HPUX digraphs by default, but only when HPUX_DIGRAPHS is defined.
|digraphs-default|

==============================================================================
				 BUG FIXES		*bug-fixes-5*

Note:	Some of these fixes may only apply to test versions which were
	created after version 4.6, but before 5.0.


When doing ":bdel", try going to the next loaded buffer.  Don't rewind to the
start of the buffer list.

mch_isdir() for Unix returned TRUE for "" on some systems.

Win32: 'shell' set to "mksnt/sh.exe" breaks ":!" commands.  Don't use
backslashes in the temp file names.

On linux, with a FAT file system, could get spurious "file xxx changed since
editing started" messages, because the time is rounded off to two seconds
unexpectedly.

Crash in GUI, when selecting a word (double click) and then extend until an
empty line.

For systems where isdigit() can't handle characters > 255, get_number() caused
a crash when moving the mouse during the prompt for recovery.

In Insert mode, "CTRL-O P" left the cursor on the last inserted character.
Now the cursor is left after the last putted character.

When quickfix found an error type other than 'e' or 'w', it was never printed.

A setting for 'errorfile' in a .vimrc overruled the "-q errorfile" argument.

Some systems create a file when generating a temp file name.  Filtering would
then create a backup file for this, which was never deleted.  Now no backup
file is made when filtering.

simplify_filename() could remove a ".." after a link, resulting in the wrong
file name.  Made simplify_filename also work for MSDOS.  Don't use it for
Amiga, since it doesn't have "../".

otherfile() was unreliable when using links.  Could think that reading/writing
was for a different file, when it was the same.

Pasting with mouse in Replace mode didn't replace anything.

Window height computed wrong when resizing a window with an autocommand (could
cause a crash).

":s!foo!bar!" wasn't possible (Vi compatible).

do_bang() freed memory twice when called recursively, because of autocommands
(test11).  Thanks to Electric Fence!

"v$d" on an empty line didn't remove the "-- VISUAL --" mode message from the
command-line, and inverted the cursor.

":mkexrc" didn't check for failure to open the file, causing a crash.
(Felderhoff).

Win32 mch_write() wrote past fixed buffer, causing terminal keys no longer to
be recognized.  Both console and GUI version.

Athena GUI: Crash when removing a menu item.  Now Vim doesn't crash, but the
reversing of the menu item is still wrong.

Always reset 'list' option for the help window.

When 'scrolloff' is non-zero, a 'showmatch' could cause the shown match to be
in the wrong line and the window to be scrolled (Acevedo).

After ":set all&", 'lines' and 'ttytype' were still non-default, because the
defaults never got set.  Now the defaults for 'lines' and 'columns' are set
after detecting the window size.  'term' and 'ttytype' defaults are set when
detecting the terminal type.

For (most) non-Unix systems, don't add file names with illegal characters when
expanding.  Fixes "cannot open swapfile" error when doing ":e *.burp", when
there is no match.

In X11 GUI, drawing part of the cursor obscured the text.  Now the text is
drawn over the cursor, like when it fills the block. (Seibert)

when started with "-c cmd -q errfile", the cursor would be left in line 1.
Now a ":cc" is done after executing "cmd".

":ilist" never ignored case, even when 'ignorecase' set.

"vim -r file" for a readonly file, then making a change, got ATTENTION message
in insert mode, display mixed up until <Esc> typed.  Also don't give ATTENTION
message after recovering a file.

The abbreviation ":ab #i #include" could not be removed.

CTRL-L completion (longest common match) on command-line didn't work properly
for case-insensitive systems (MS-DOS, Windows, etc.).  (suggested by Richard
Kilgore).

For terminals that can hide the cursor ("vi" termcap entry), resizing the
window caused the cursor to disappear.

Using an invalid mark in an Ex address didn't abort the command.

When 'smarttab' set, would use 'shiftround' when inserting a TAB after a
space.  Now it always rounds to a tabstop.

Set '[ and '] marks for ":copy", ":move", ":append", ":insert", ":substitute"
and ":change".  (Acevedo).

"d$" in an empty line still caused an error, even when 'E' is not in
'cpoptions'.

Help files were stored in the viminfo buffer list without a path.

GUI: Displaying cursor was not synchronized with other displaying.  Caused
several display errors.  For example, when the last two lines in the file
start with spaces, "dd" on the last line copied text to the (then) last line.

Win32: Needed to type CTRL-SHIFT-- to get CTRL-_.

GUI: Moving the cursor forwards over bold text would remove one column of bold
pixels.

X11 GUI: When a bold character in the last column was scrolled up or down, one
column of pixels would not be copied.

Using <BS> to move the cursor left can sometimes erase a character.  Now use
"le" termcap entry for this.

Keyword completion with regexp didn't work.  e.g., for "b.*crat".

Fixed: With CTRL-O that jumps to another file, cursor could end up just after
the line.

Amiga: '$' was missing from character recognized as wildcards, causing $VIM
sometimes not to be expanded.

":change" didn't adjust marks for deleted lines.

":help [range]" didn't work.  Also for [pattern], [count] and [quotex].

For 'cindent'ing, typing "class::method" doesn't align like a label when the
second ':' is typed.
When inserting a CR with 'cindent' set (and a bunch of other conditions) the
cursor went to a wrong location.
'cindent' was wrong for a line that ends in '}'.
'cindent' was wrong after "else {".

While editing the cmdline in the GUI, could not use the mouse to select text
from the command-line itself.

When deleting lines, marks in tag stack were only adjusted for the current
window, not for other windows on the same buffer.

Tag guessing could find a function "some_func" instead of the "func" we were
looking for.

Tags file name relative to the current file didn't work.

":g/pat2/s//pat2/g", causing the number of subs to be reported, used to cause
a scroll up.  Now you no longer have to hit <CR>.

X11 GUI: Selecting text could cause a crash.

32 bit DOS version: CTRL-C in external command killed Vim.  When SHELL is set
to "sh.exe", external commands didn't work.  Removed using of command.com, no
longer need to set 'shellquote'.

Fixed crash when using ":g/pat/i".

Fixed (potential) crash for X11 GUI, when using an X selection.  Was giving a
pointer on the stack to a callback function, now it's static.

Using "#" and "*" with an operator didn't work.  E.g. "c#".

Command-line expansion didn't work properly after ":*". (Acevedo)

Setting 'weirdinvert' caused highlighting to be wrong in the GUI.

":e +4 #" didn't work, because the "4" was in unallocated memory (could cause
a crash).

Cursor position was wrong for ":e #", after ":e #" failed, because of changes
to the buffer.

When doing ":buf N", going to a buffer that was edited with ":view", the
readonly flag was reset.  Now make a difference between ":e file" and ":buf
file": Only set/reset 'ro' for the first one.

Avoid |hit-enter| prompt when not able to write viminfo on exit.

When giving error messages in the terminal where the GUI was started, GUI
escape codes would be written to the terminal.  In an xterm this could be seen
as a '$' after the message.

Mouse would not work directly after ":gui", because full_screen isn't set,
which causes starttermcap() not to do its work.

'incsearch' did not scroll the window in the same way as the actual search.
When 'nowrap' set, incsearch didn't show a match when it was off the side of
the screen.  Now it also shows the whole match, instead of just the cursor
position (if possible).

":unmap", ":unab" and ":unmenu" did not accept a double quote, it was seen as
the start of a comment.  Now it's Vi compatible.

Using <Up><Left><Left><Up> in the command-line, when there is no previous
cmdline in the history, inserted a NUL on the command-line.

"i<Esc>" when on a <Tab> in column 0 left the cursor in the wrong place.

GUI Motif: When adding a lot of menu items, the menu bar goes into two rows.
Deleting menu items, reducing the number of rows, now also works.

With ":g/pat/s//foo/c", a match in the first line was scrolled off of the
screen, so you could not see it.
When using ":s//c", with 'nowrap' set, a match could be off the side of the
screen, so you could not see it.

When 'helpfile' was set to a fixed, non-absolute path in feature.h, Vim would
crash.  mch_Fullname can now handle file names in read-only memory. (Lottem)

When using CTRL-A or CTRL-@ in Insert mode, there could be strange effects
when using CTRL-D next.  Also, when repeating inserted text that included "0
CTRL-D" or "^ CTRL-D" this didn't work. (Acevedo)
Using CTRL-D after using CTRL-E or CTRL-Y in Insert mode that inserted a '0'
or '^', removed the '0' or '^' and more indent.

The command "2".p" caused the last inserted text to be executed as commands.
(Acevedo)

Repeating the insert of "CTRL-V 048" resulted in "^@" to be inserted.

Repeating Insert completion could fail if there are special characters in the
text. (Acevedo)

":normal /string<CR>" caused the window to scroll.  Now all ":normal" commands
are executed without scrolling messages.

Redo of CTRL-E or CTRL-Y in Insert mode interpreted special characters as
commands.

Line wrapping for 'tw' was done one character off for insert expansion
inserts.

buffer_exists() function didn't work properly for buffer names with a symbolic
link in them (e.g. when using buffer_exists(#)).

Removed the "MOTIF_COMMENT" construction from Makefile.  It now works with
FreeBSD make, and probably with NeXT make too.

Matching the 'define' and 'include' arguments now honor the settings for
'ignorecase'. (Acevedo)

When one file shown in two windows, Visual selection mixed up cursor position
in current window and other window.

When doing ":e file" from a help file, the 'isk' option wasn't reset properly,
because of a modeline in the help file.

When doing ":e!", a cursor in another window on the same buffer could become
invalid, leading to "ml_get: invalid lnum" errors.

Matching buffer name for when expanded name has a different path from not
expanded name (Brugnara).

Normal mappings didn't work after an operator.  For example, with ":map Q gq",
"QQ" didn't work.

When ":make" resulted in zero errors, a "No Errors" error message was given
(which breaks mappings).

When ":sourcing" a file, line length was limited to 1024 characters.  CTRL-V
before <EOL> was not handled Vi compatible.  (Acevedo)

Unexpected exit for X11 GUI, caused by SAVE_YOURSELF event.  (Heimann)

CTRL-X CTRL-I only found one match per line. (Acevedo)
When using an illegal CTRL-X key in Insert mode, the CTRL-X mode message
was stuck.

Finally managed to ignore the "Quit" menu entry of the Window manager!  Now
Vim only exists when there are no changed buffers.

Trying to start the GUI when $DISPLAY is not set resulted in a crash.
When $DISPLAY is not set and gvim starts vim, title was restored to "Thanks
for flying Vim".
When $DISPLAY not set, starting "gvim" (dropping back to vim) and then
selecting text with the mouse caused a crash.

"J", with 'joinspaces' set, on a line ending in ". ", caused one space too
many to be added.  (Acevedo)

In insert mode, a CTRL-R {regname} which didn't insert anything left the '"'
on the screen.

":z10" didn't work. (Clapp)

"Help "*" didn't work.

Renamed a lot of functions, to avoid clashes with POSIX name space.

When adding characters to a line, making it wrap, the following lines were
sometimes not shifted down (e.g. after a tag jump).

CTRL-E, with 'so' set and cursor on last line, now does not move cursor as
long as the last line is on the screen.

When there are two windows, doing "^W+^W-" in the bottom window could cause
the status line to be doubled (not redrawn correctly).

This command would hang: ":n `cat`".  Now connect stdin of the external
command to /dev/null, when expanding.

Fixed lalloc(0,) error for ":echo %:e:r".  (Acevedo)

The "+command" argument to ":split" didn't work when there was no file name.

When selecting text in the GUI, which is the output of a command-line command
or an external command, the inversion would sometimes remain.

GUI: "-mh 70" argument was broken.  Now, when menuheight is specified, it is
not changed anymore.

GUI: When using the scrollbar or mouse while executing an external command,
this caused garbage characters.

Showmatch sometimes jumped to the wrong position.  Was caused by a call to
findmatch() when redrawing the display (when syntax highlighting is on).

Search pattern "\(a *\)\{3} did not work correctly, also matched "a a".
Problem with brace_count not being decremented.

Wildcard expansion added too many non-matching file names.

When 'iskeyword' contains characters like '~', "*" and "#" didn't work
properly. (Acevedo)

On Linux, on a FAT file system, modification time can change by one second.
Avoid a "file has changed" warning for a one second difference.

When using the page-switching in an xterm, Vim would position the cursor on
the last line of the window on exit.  Also removed the cursor positioning for
":!" commands.

":g/pat/p" command (partly) overwrote the command.  Now the output is on a
separate line.

With 'ic' and 'scs' set, a search for "Keyword", ignore-case matches were
highlighted too.

"^" on a line with only white space, put cursor beyond the end of the line.

When deleting characters before where insertion started ('bs' == 2), could not
use abbreviations.

CTRL-E at end of file puts cursor below the file, in Visual mode, when 'so' is
non-zero.  CTRL-E didn't work when 'so' is big and the line below the window
wraps.  CTRL-E, when 'so' is non-zero, at end of the file, caused jumping
up-down.

":retab" didn't work well when 'list' is set.

Amiga: When inserting characters at the last line on the screen, causing it
to wrap, messed up the display.  It appears that a '\n' on the last line
doesn't always cause a scroll up.

In Insert mode "0<C-D><C-D>" deleted an extra character, because Vim thought
that the "0" was still there. (Acevedo)

"z{count}l" ignored the count.  Also for "zh" et. al. (Acevedo)

"S" when 'autoindent' is off didn't delete leading white space.

"/<Tab>" landed on the wrong character when 'incsearch' is set.

Asking a yes/no question could cause a |hit-enter| prompt.

When the file consists of one long line (>4100 characters), making changes
caused various errors and a crash.

DJGPP version could not save long lines (>64000) for undo.

"yw" on the last char in the file didn't work.  Also fixed "6x" at the end of
the line.  "6X" at the start of a line fails, but does not break a mapping.  In
general, a movement for an operator doesn't beep or flush a mapping, but when
there is nothing to operate on it beeps (this is Vi compatible).

"m'" and "m`" now set the '' mark at the cursor position.

Unix: Resetting of signals for external program didn't work, because SIG_DFL
and NULL are the same!  For "!!yes|dd count=1|, the yes command kept on
running.

Partly fixed: Unix GUI: Typeahead while executing an external command was lost.
Now it's not lost while the command is producing output.

Typing <S-Tab> in Insert mode, when it isn't mapped, inserted "<S-Tab>".  Now
it works like a normal <Tab>, just like <C-Tab> and <M-Tab>.

Redrawing ruler didn't check for old value correctly (caused UMR warnings in
Purify).

Negative array index in finish_viminfo_history().

":g/^/d|mo $" deleted all the lines.  The ":move" command now removes the
:global mark from the moved lines.

Using "vG" while the last line in the window is a "@" line, didn't update
correctly.  Just the "v" showed "~" lines.

"daw" on the last char of the file, when it's a space, moved the cursor beyond
the end of the line.

When 'hlsearch' was set or reset, only the current buffer was redrawn, while
this affects all windows.

CTRL-^, positioning the cursor somewhere from 1/2 to 1 1/2 screen down the
file, put the cursor at the bottom of the window, instead of halfway.

When scrolling up for ":append" command, not all windows were updated
correctly.

When 'hlsearch' is set, and an auto-indent is highlighted, pressing <Esc>
didn't remove the highlighting, although the indent was deleted.

When 'ru' set and 'nosc', using "$j" showed a wrong ruler.

Under Xfree 3.2, Shift-Tab didn't work (wrong keysym is used).

Mapping <S-Tab> didn't work.  Changed the key translations to use the shortest
key code possible.  This makes the termcode translations and mappings more
consistent.  Now all modifiers work in all combinations, not only with <Tab>,
but also with <Space>, <CR>, etc.

For Unix, restore three more signals.  And Vim catches SIGINT now, so CTRL-C
in Ex mode doesn't make Vim exit.

""a5Y" yanked 25 lines instead of 5.

"vrxxx<Esc>" in an empty line could not be undone.

A CTRL-C that breaks ":make" caused the errorfile not to be read (annoying
when you want to handle what ":make" produced so far).

":0;/pat" didn't find "pat" in line 1.

Search for "/test/s+1" at first char of file gave bottom-top message, or
didn't work at all with 'nowrapscan'.

Bug in viminfo history.  Could cause a crash on exit.

":print" didn't put cursor on first non-blank in line.

":0r !cat </dev/null" left cursor in line zero, with very strange effects.

With 'showcmd' set and 'timeoutlen' set to a few seconds, trick to position
the cursor leftwards didn't work.

AIX stty settings were restored to cs5 instead of cs8 (Winn).

File name completion didn't work for "zsh" versions that put spaces between
file names, instead of NULs.

Changed "XawChain*" to "XtChain*", should work for more systems.

Included quite a few fixes for rightleft mode (Lottem).

Didn't ask to |hit-enter| when GUI is started and error messages are printed.

When trying to edit a file in a non-existent directory, ended up with editing
"No file".

"gqap" to format a paragraph did too much redrawing.

When 'hlsearch' set, only the current window was updated for a new search
pattern.

Sometimes error messages on startup didn't cause a |hit-enter| prompt,
because of autocommands containing an empty line.

Was possible to select part of the window in the border, below the command
line.

'< and '> marks were not at the correct position after linewise Visual
selection.

When translating a help argument to "CTRL-x", prepend or append a '_', when
applicable.

Blockwise visual mode wasn't correct when moving vertically over a special
character (displayed as two screen characters).

Renamed "struct option" to "struct vimoption" to avoid name clash with GNU
getopt().

":abclear" didn't work (but ":iabclear" and ":cabclear" did work).

When 'nowrap' used, screen wasn't always updated correctly.

"vim -c split file" displayed extra lines.

After starting the GUI, searched the termcap for a "gui" term.

When 'hls' used, search for "^$" caused a hang.
When 'hls' was set, an error in the last regexp caused trouble.

Unix: Only output an extra <EOL> on exit when outputted something in the
alternate screen, or when there is a message that needs to be cleared.

"/a\{" did strange things, depending on previous search.

"c}" only redrew one line (with -u NONE).

For mappings, CTRL-META-A was shown as <M-^A> instead of <MC-A>, while :map
only accepts <MC-A>.  Now <M-C-A> is shown.

Unix: When using full path name in a tags file, which contains a link, and
'hidden' set and jumping to a tag in the current file, would get bogus
ATTENTION message.  Solved by always expanding file names, even when starting
with '/'.

'hlsearch' highlighting of special characters (e.g., a TAB) didn't highlight
the whole thing.

"r<CR>" didn't work correctly on the last char of a line.

sometimes a window resize or other signal caused an endless loop, involving
set_winsize().

"vim -r" didn't work, it would just hang (using tgetent() while 'term' is
empty).

"gk" while 'nowrap' set moved two lines up.

When windows are split, a message that causes a scroll-up messed up one of the
windows, which required a CTRL-L to be typed.

Possible endless loop when using shell command in the GUI.

Menus defined in the .vimrc were removed when GUI started.

Crash when pasting with the mouse in insert mode.

Crash with ":unmenu *" in .gvimrc for Athena.

"5>>" shifted 5 lines 5 times, instead of 1 time.

CTRL-C when getting a prompt in ":global" didn't interrupt.

When 'so' is non-zero, and moving the scrollbar completely to the bottom,
there was a lot of flashing.

GUI: Scrollbar ident must be long for DEC Alpha.

Some functions called vim_regcomp() without setting reg_magic, which could
lead to unpredictable magicness.

Crash when clicking around the status line, could get a selection with a
backwards range.

When deleting more than one line characterwise, the last character wasn't
deleted.

GUI: Status line could be overwritten when moving the scrollbar quickly (or
when 'wd' is non-zero).

An ESC at the end of a ":normal" command caused a wait for a terminal code to
finish.  Now, a terminal code is not recognized when its start comes from a
mapping or ":normal" command.

Included patches from Robert Webb for GUI.  Layout of the windows is now done
inside Vim, instead of letting the layout manager do this.  Makes Vim work
with Lesstif!

UMR warning in set_expand_context().

Memory leak: b_winlnum list was never freed.

Removed TIOCLSET/TIOCLGET code from os_unix.c.  Was changing some of the
terminal settings, and looked like it wasn't doing anything good.  (suggested
by Juergen Weigert).

Ruler overwrote "is a directory" message.  When starting up, and 'cmdheight'
set to > 1, first message could still be in the last line.

Removed prototype for putenv() from proto.h, it's already in osdef2.h.in.

In replace mode, when moving the cursor and then backspacing, wrong characters
were inserted.

Win32 GUI was checking for a CTRL-C too often, making it slow.

Removed mappings for MS-DOS that were already covered by commands.

When visually selecting all lines in a file, cursor at last line, then "J".
Gave ml_get errors.  Was a problem with scrolling down during redrawing.

When doing a linewise operator, and then an operator with a mouse click, it
was also linewise, instead of characterwise.

When 'list' is set, the column of the ruler was wrong.

Spurious error message for "/\(b\+\)*".

When visually selected many lines, message from ":w file" disappeared when
redrawing the screen.

":set <M-b>=^[b", then insert "^[b", waited for another character.  And then
inserted "<M-b>" instead of the real <M-b> character.  Was trying to insert
K_SPECIAL x NUL.

CTRL-W ] didn't use count to set window height.

GUI: "-font" command-line argument didn't override 'guifont' setting from
.gvimrc. (Acevedo)

GUI: clipboard wasn't used for "*y".  And some more Win32/X11 differences
fixed for the clipboard (Webb).

Jumping from one help file to another help file, with 'compatible' set,
removed the 'help' flag from the buffer.

File-writable bit could be reset when using ":w!" for a readonly file.

There was a wait for CTRL-O n in Insert mode, because the search pattern was
shown.
Reduced wait, to allow reading a message, from 10 to 3 seconds.  It seemed
nothing was happening.

":recover" found same swap file twice.

GUI: "*yy only worked the second time (when pasting to an xterm)."

DJGPP version (dos32): The system flags were cleared.

Dos32 version: Underscores were sometimes replaced with y-umlaut (Levin).

Version 4.1 of ncurses can't handle tputs("", ..).  Avoid calling tputs() with
an empty string.

<S-Tab> in the command-line worked like CTRL-P when no completion started yet.
Now it does completion, last match first.

Unix: Could get annoying "can't write viminfo" message after doing "su".  Now
the viminfo file is overwritten, and the user set back to the original one.

":set term=builtin_gui" started the GUI in a wrong way.  Now it's not
allowed anymore.  But "vim -T gui" does start the GUI correctly now.

GUI: Triple click after a line only put last char in selection, when it is a
single character word.

When the window is bigger than the screen, the scrolling up of messages was
wrong (e.g. ":vers", ":hi").  Also when the bottom part of the window was
obscured by another window.

When using a wrong option only an error message is printed, to avoid that the
usage information makes it scroll off the screen.

When exiting because of not being able to read from stdin, didn't preserve the
swap files properly.

Visual selecting all chars in more than one line, then hit "x" didn't leave an
empty line.  For one line it did leave an empty line.

Message for which autocommand is executing messed up file write message (for
FileWritePost event).

"vim -h" included "-U" even when GUI is not available, and "-l" when lisp is
not available.

Crash for ":he <C-A>" (command-line longer than screen).

":s/this/that/gc", type "y" two times, then undo, did reset the modified
option, even though the file is still modified.

Empty lines in a tags file caused a ":tag" to be aborted.

When hitting 'q' at the more prompt for ":menu", still scrolled a few lines.

In an xterm that uses the bold trick a single row of characters could remain
after an erased bold character.  Now erase one extra char after the bold char,
like for the GUI.

":pop!" didn't work.

When the reading a buffer was interrupted, ":w" should not be able to
overwrite the file, ":w!" is required.

":cf%" caused a crash.

":gui longfilename", when forking is enabled, could leave part of the
longfilename at the shell prompt.

==============================================================================
VERSION 5.1						*version-5.1*

Improvements made between version 5.0 and 5.1.

This was mostly a bug-fix release, not many new features.


Changed							*changed-5.1*
-------

The expand() function now separates file names with <NL> instead of a space.
This avoids problems for file names with embedded spaces.  To get the old
result, use substitute(expand(foo), "\n", " ", "g").

For Insert-expanding dictionaries allow a backslash to be used for
wildchars.  Allows expanding "ze\kra", when 'isk' includes a backslash.

New icon for the Win32 GUI.

":tag", ":tselect" etc. only use the argument as a regexp when it starts
with '/'.  Avoids that ":tag xx~" gives an error message: "No previous sub.
regexp".  Also, when the :tag argument contained wildcard characters, it was
not Vi compatible.
When using '/', the argument is taken literally too, with a higher priority,
so it's found before wildcard matches.
Only when the '/' is used are matches with different case found, even though
'ignorecase' isn't set.
Changed "g^]" to only do ":tselect" when there is more than on matching tag.

Changed some of the default colors, because they were not very readable on a
dark background.

A character offset to a search pattern can move the cursor to the next or
previous line.  Also fixes that "/pattern/e+2" got stuck on "pattern" at the
end of a line.

Double-clicks in the status line do no longer start Visual mode.  Dragging a
status line no longer stops Visual mode.

Perl interface: Buffers() and Windows() now use more logical arguments, like
they are used in the rest of Vim (Moore).

Init '" mark to the first character of the first line.  Makes it possible to
use '" in an autocommand without getting an error message.


Added							*added-5.1*
-----

"shell_error" internal variable: result of last shell command.

":echohl" command: Set highlighting for ":echo".

'S' flag in 'highlight' and StatusLineNC highlight group: highlighting for
status line of not-current window.  Default is to use bold for current
window.

Added buffer_name() and buffer_number() functions (Aaron).
Added flags argument "g" to substitute() function (Aaron).
Added winheight() function.

Win32: When an external command starts with "start ", no console is opened
for it (Aaron).

Win32 console: Use termcap codes for bold/reverse based on the current
console attributes.

Configure check for "strip". (Napier)

CTRL-R CTRL-R x in Insert mode: Insert the contents of a register literally,
instead of as typed.

Made a few "No match" error messages more informative by adding the pattern
that didn't match.

"make install" now also copies the macro files.

tools/tcltags, a shell script to generate a tags file from a TCL file.

"--with-tlib" setting for configure.  Easy way to use termlib: "./configure
--with-tlib=termlib".

'u' flag in 'cino' for setting the indent for contained () parts.

When Win32 OLE version can't load the registered type library, ask the user
if he wants to register Vim now. (Erhardt)
Win32 with OLE: When registered automatically, exit Vim.
Included VisVim 1.1b, with a few enhancements and the new icon (Heiko
Erhardt).

Added patch from Vince Negri for Win32s support.  Needs to be compiled with
VC 4.1!

Perl interface: Added $curbuf.  Rationalized Buffers() and Windows().
(Moore) Added "group" argument to Msg().

Included Perl files in DOS source archive.  Changed Makefile.bor and
Makefile.w32 to support building a Win32 version with Perl included.

Included new Makefile.w32 from Ken Scott.  Now it's able to make all Win32
versions, including OLE, Perl and Python.

Added CTRL-W g ] and CTRL-W g ^]: split window and do g] or g^].

Added "g]" to always do ":tselect" for the ident under the cursor.
Added ":tjump" and ":stjump" commands.
Improved listing of ":tselect" when tag names are a bit long.

Included patches for the Macintosh version.  Also for Python interface.
(St-Amant)

":buf foo" now also restores cursor column, when the buffer was used before.

Adjusted the Makefile for different final destinations for the syntax files
and scripts (for Debian Linux).

Amiga: $VIM can be used everywhere.  When $VIM is not defined, "VIM:" is
used.  This fixes that "VIM:" had to be assigned for the help files, and
$VIM set for the syntax files.  Now either of these work.

Some xterms send vt100 compatible function keys F1-F4.  Since it's not
possible to detect this, recognize both type of keys and translate them to
<F1> - <F4>.

Added "VimEnter" autocommand.  Executed after loading all the startup stuff.

BeOS version now also runs on Intel CPUs (Seibert).


Fixed							*fixed-5.1*
-----

":ts" changed position in the tag stack when cancelled with <CR>.
":ts" changed the cursor position for CTRL-T when cancelled with <CR>.
":tn" would always jump to the second match.	Was using the wrong entry in
the tag stack.
Doing "tag foo", then ":tselect", overwrote the original cursor position in
the tag stack.

"make install" changed the vim.1 manpage in a wrong way, causing "doc/doc"
to appear for the documentation files.

When compiled with MAX_FEAT, xterm mouse handling failed.  Was caused by DEC
mouse handling interfering.

Was leaking memory when using selection in X11.

CTRL-D halfway a command-line left some characters behind the first line(s)
of the listing.

When expanding directories for ":set path=", put two extra backslashes
before a space in a directory name.

When 'lisp' set, first line of a function would be indented.  Now its indent
is set to zero.  And use the indent of the first previous line that is at
the same () level.  Added test33.

"so<Esc>u" in an empty file didn't work.

DOS: "seek error in swap file write" errors, when using DOS 6.2 share.exe,
because the swap file was made hidden.  It's no longer hidden.

":global" command would sometimes not execute on a matching line.  Happened
when a data block is full in ml_replace().

For AIX use a tgetent buffer of 2048 bytes, instead of 1024.

Win32 gvim now only sets the console size for external commands to 25x80
on Windows 95, not on NT.

Win32 console: Dead key could cause a crash, because of a missing "WINAPI"
(Deshpande).

The right mouse button started Visual mode, even when 'mouse' is empty, and
in the command-line, a left click moved the cursor when 'mouse' is empty.
In Visual mode, 'n' in 'mouse' would be used instead of 'v'.

A blinking cursor or focus change cleared a non-Visual selection.

CTRL-Home and CTRL-End didn't work for MS-DOS versions.

Could include NUL in 'iskeyword', causing a crash when doing insert mode
completion.

Use _dos_commit() to flush the swap file to disk for MSDOS 16 bit version.

In mappings, CTRL-H was replaced by the backspace key code.  This caused
problems when it was used as text, e.g. ":map _U :%s/.^H//g<CR>".

":set t_Co=0" was not handled like a normal term.  Now it's translated into
":set t_Co=", which works.

For ":syntax keyword" the "transparent" option did work, although not
mentioned in the help.  But synID() returned wrong name.

"gqG" in a file with one-word-per-line (e.g. a dictionary) was very slow and
not interruptable.

"gq" operator inserted screen lines in the wrong situation.  Now screen
lines are inserted or deleted when this speeds up displaying.

cindent was wrong when an "if" contained "((".

'r' flag in 'viminfo' was not used for '%'.  Could get files in the buffer
list from removable media.

Win32 GUI with OLE: if_ole_vc.mak could not be converted into a project.
Hand-edited to fix this...

With 'nosol' set, doing "$kdw" below an empty line positioned the cursor at
the end of the line.

Dos32 version changed "\dir\file" into "/dir/file", to work around a DJGPP
bug.  That bug appears to have been fixed, therefore this translation has
been removed.

"/^*" didn't work (find '*' in first column).

"<afile>" was not always set for autocommands.  E.g., for ":au BufEnter *
let &tags = expand("<afile>:p:h") . "/tags".

In an xterm, the window may be a child of the outer xterm window.  Use the
parent window when getting the title and icon names. (Smith)

When starting with "gvim -bg black -fg white", the value of 'background' is
only set after reading the .gvimrc file.  This causes a ":syntax on" to use
the wrong colors.  Now allow using ":gui" to open the GUI window and set the
colors.  Previously ":gui" in a gvimrc crashed Vim.

tempname() returned the same name all the time, unless the file was actually
created.  Now there are at least 26 different names.

File name used for <afile> was sometimes full path, sometimes file name
relative to current directory.

When 'background' was set after the GUI window was opened, it could change
colors that were set by the user in the .gvimrc file.  Now it only changes
colors that have not been set by the user.

Ignore special characters after a CSI in the GUI version.  These could be
interpreted as special characters in a wrong way. (St-Amant)

Memory leak in farsi code, when using search or ":s" command.
Farsi string reversing for a mapping was only done for new mappings.  Now it
also works for replacing a mapping.

Crash in Win32 when using a file name longer than _MAX_PATH. (Aaron)

When BufDelete autocommands were executed, some things for the buffer were
already deleted (esp. Perl stuff).

Perl interface: Buffer specific items were deleted too soon; fixes "screen
no longer exists" messages.  (Moore)

The Perl functions didn't set the 'modified' flag.

link.sh did not return an error on exit, which may cause Vim to start
installing, even though there is no executable to install. (Riehm)

Vi incompatibility: In Vi "." redoes the "y" command.  Added the 'y' flag to
'cpoptions'.  Only for 'compatible' mode.

":echohl" defined a new group, when the argument was not an existing group.

"syn on" and ":syn off" could move the cursor, if there is a hidden buffer
that is shorter that the current cursor position.

The " mark was not set when doing ":b file".

When a "nextgroup" is used with "skipwhite" in syntax highlighting, space at
the end of the line made the nextgroup also be found in the next line.

":he g<CTRL-D>", then ":" and backspace to the start didn't redraw.

X11 GUI: "gvim -rv" reversed the colors twice on Sun.  Now Vim checks if the
result is really reverse video (background darker than foreground).

"cat link.sh | vim -" didn't set syntax highlighting.

Win32: Expanding "file.sw?" matched ".file.swp".  This is an error of
FindnextFile() that we need to work around.  (Kilgore)

"gqgq" gave an "Invalid lnum" error on the last line.
Formatting with "gq" didn't format the first line after a change of comment
leader.

There was no check for out-of-memory in win_alloc().

"vim -h" didn't mention "-register" and "-unregister" for the OLE version.

Could not increase 'cmdheight' when the last window is only one line.  Now
other windows are also made smaller, when necessary.

Added a few {} to avoid "suggest braces around" warnings from gcc 2.8.x.
Changed return type of main() from void to int. (Nam)

Using '~' twice in a substitute pattern caused a crash.

"syn on" and ":syn off" could scroll the window, if there is a hidden buffer
that is shorter that the current cursor position.

":if 0 | if 1 | endif | endif" didn't work.  Same for ":while" and "elseif".

With two windows on modified files, with 'autowrite' set, cursor in second
window, ":qa" gave a warning for the file in the first window, but then
auto-wrote the file in the second window. (Webb)

Win32 GUI scrollbar could only handle 32767 lines.  Also makes the
intellimouse wheel use the configurable number of scrolls. (Robinson)

When using 'patchmode', and the backup file is on another partition, the file
copying messed up the write-file message.

GUI X11: Alt-Backspace and Alt-Delete didn't work.

"`0" could put the cursor after the last character in the line, causing
trouble for other commands, like "i".

When completing tags in insert mode with ^X^], some matches were skipped,
because the compare with other tags was wrong.  E.g., when "mnuFileSave" was
already there, "mnuFile" would be skipped. (Negri)

When scrolling up/down, a syntax item with "keepend" didn't work properly.
Now the flags are also stored for the syntax state a the start of each line.

When 'ic' was changed while 'hlsearch' is on, there was no redraw to show the
effect.

Win32 GUI: Don't display "No write since last chance" in a message box, but in
the Vim window.

==============================================================================
VERSION 5.2						*version-5.2*

Improvements made between version 5.1 and 5.2.


Long lines editable					*long-lines*
-------------------

A single long line that doesn't fit in the window doesn't show a line of @@@
anymore.  Redrawing starts at a character further on in the line, such that
the text around the cursor can be seen.  This makes it possible to edit these
long lines when wrapping is on.


File browser added					*file-browser-5.2*
------------------

The Win32, Athena and Motif GUI bring up a file requester if the user asks to
":browse" for the ":e", ":w", ":r", ":so", ":redirect" and
":mkexrc/vimrc/vsess" commands.  ::browse e /foo/bar" opens the requester in
the /foo/bar directory, so you can have nice mapping rhs's like ":browse so
$vim/macros".  If no initial dir specified for ":browse e", can be compiled to
either begin in the current directory, or that of the current buffer. (Negri
and Kahn)
Added the 'browsedir' option, with value "current", "last" or "buffer".  Tells
whether a browse dialog starts in last used dir, dir of current buffer, or
current dir.  ":browse w" is unaffected.
The default menus have been changed to use the ":browse" command.


Dialogs added						*dialogs-added*
-------------

Added the ":confirm" command.  Works on ":e", ":q", ":w", ":cl".  Win32,
Athena and Motif GUI uses a window-dialog.  All other platforms can use
prompt in command-line.  ":confirm qa" offers a choice to save all modified
files.

confirm() function: allows user access to the confirm engine.

Added 'v' flag to 'guioptions'.  When included, a vertical button layout is
always used for the Win32 GUI dialog.  Otherwise, a horizontal layout is
preferred.

Win32 GUI: ":promptfind" and ":promptrepl" pop up a dialog to find/replace.
To be used from a menu entry. (Negri)


Popup menu added					*popup-menu-added*
----------------

When the 'mousemodel' option is set to "popup", the right mouse button
displays the top level menu headed with "PopUp" as pop-up context menu.  The
"PopUp" menu is not displayed in the normal menu bar.  This currently only
works for Win32 and Athena GUI.


Select mode added					*new-Select-mode*
-----------------

A new mode has been added: "Select mode".  It is like Visual mode, but typing
a printable character replaces the selection.
- CTRL-G can be used to toggle between Visual mode and Select mode.
- CTRL-O can be used to switch from Select mode to Visual mode for one command.
- Added 'selectmode' option: tells when to start Select mode instead of Visual
  mode.
- Added 'mousemodel' option: Change use of mouse buttons.
- Added 'keymodel' option: tells to use shifted special keys to start a
  Visual or Select mode selection.
- Added ":behave".  Can be used to quickly set 'selectmode', 'mousemodel'
  and 'keymodel' for MS-Windows and xterm behavior.
- The xterm-like selection is now called modeless selection.
- Visual mode mappings and menus are used in Select mode.  They automatically
  switch to Visual mode first.  Afterwards, reselect the area, unless it was
  deleted.  The "gV" command can be used in a mapping to skip the reselection.
- Added the "gh", "gH" and "g^H" commands: start Select (highlight) mode.
- Backspace in Select mode deletes the selected area.

"mswin.vim" script.  Sets behavior mostly like MS-Windows.


Session files added					*new-session-files*
-------------------

":mks[ession]" acts like "mkvimrc", but also writes the full filenames of the
currently loaded buffers and current directory, so that :so'ing the file
re-loads those files and cd's to that directory.  Also stores and restores
windows.  File names are made relative to session file.
The 'sessionoptions' option sets behavior of ":mksession". (Negri)


User defined functions and commands			*new-user-defined*
-----------------------------------

Added user defined functions.  Defined with ":function" until ":endfunction".
Called with "Func()".  Allows the use of a variable number of arguments.
Included support for local variables "l:name".  Return a value with ":return".
See |:function|.
Call a function with ":call".  When using a range, the function is called for
each line in the range. |:call|
"macros/justify.vim" is an example of using user defined functions.
User functions do not change the last used search pattern or the command to be
redone with ".".
'maxfuncdepth' option.  Restricts the depth of function calls.  Avoids trouble
(crash because of out-of-memory) when a function uses endless recursion.

User definable Ex commands: ":command", ":delcommand" and ":comclear".
(Moore)  See |user-commands|.


New interfaces						*interfaces-5.2*
--------------

Tcl interface. (Wilken)  See |tcl|.
Uses the ":tcl", ":tcldo" and "tclfile" commands.

Cscope support. (Kahn) (Sekera)  See |cscope|.
Uses the ":cscope" and ":cstag" commands.  Uses the options 'cscopeprg',
'cscopetag', 'cscopetagorder' and 'cscopeverbose'.


New ports						*ports-5.2*
---------

Amiga GUI port. (Nielsen)  Not tested much yet!

RISC OS version. (Thomas Leonard)  See |riscos|.
This version can run either with a GUI or in text mode, depending upon where
it is invoked.
Deleted the "os_archie" files, they were not working anyway.


Multi-byte support					*new-multi-byte*
------------------

MultiByte support for Win32 GUI. (Baek)
The 'fileencoding' option decides how the text in the file is encoded.
":ascii" works for multi-byte characters.  Multi-byte characters work on
Windows 95, even when using the US version. (Aaron)
Needs to be enabled in feature.h.
This has not been tested much yet!


New functions						*new-functions-5.2*
-------------

|browse()|	puts up a file requester when available. (Negri)
|escape()|	escapes characters in a string with a backslash.
|fnamemodify()|	modifies a file name.
|input()|	asks the user to enter a line. (Aaron)  There is a separate
		history for lines typed for the input() function.
|argc()|
|argv()|	can be used to access the argument list.
|winbufnr()|	buffer number of a window. (Aaron)
|winnr()|	window number. (Aaron)
|matchstr()|	Return matched string.
|setline()|	Set a line to a string value.


New options						*new-options-5.2*
-----------

'allowrevins'	Enable the CTRL-_ command in Insert and Command-line mode.
'browsedir'	Tells in which directory a browse dialog starts.
'confirm'	when set, :q :w and :e commands always act as if ":confirm"
		is used.  (Negri)
'cscopeprg'
'cscopetag'
'cscopetagorder'
'cscopeverbose'	Set the |cscope| behavior.
'filetype'	RISC-OS specific type of file.
'grepformat'
'grepprg'	For the |:grep| command.
'keymodel'	Tells to use shifted special keys to start a Visual or Select
		mode selection.
'listchars'	Set character to show in 'list' mode for end-of-line, tabs and
		trailing spaces. (partly by Smith) Also sets character to
		display if a line doesn't fit when 'nowrap' is set.
'matchpairs'	Allows matching '<' with '>', and other single character
		pairs.
'mousefocus'	Window focus follows mouse (partly by Terhaar).  Changing the
		focus with a keyboard command moves the pointer to that
		window.  Also move the pointer when changing the window layout
		(split window, change window height, etc.).
'mousemodel'	Change use of mouse buttons.
'selection'	When set to "inclusive" or "exclusive", the cursor can go one
		character past the end of the line in Visual or Select mode.
		When set to "old" the old behavior is used.  When
		"inclusive", the character under the cursor is included in the
		operation.  When using "exclusive", the new "ve" entry of
		'guicursor' is used.  The default is a vertical bar.
'selectmode'	Tells when to start Select mode instead of Visual mode.
'sessionoptions' Sets behavior of ":mksession". (Negri)
'showfulltag'	When completing a tag in Insert mode, show the tag search
		pattern (tidied up) as a choice as well (if there is one).
'swapfile'	Whether to use a swap file for a buffer.
'syntax'	When it is set, the syntax by that name is loaded.  Allows for
		setting a specific syntax from a modeline.
'ttymouse'	Allows using xterm mouse codes for terminals which name
		doesn't start with "xterm".
'wildignore'	List of patterns for files that should not be completed at
		all.
'wildmode'	Can be used to set the type of expansion for 'wildchar'.
		Replaces the CTRL-T command for command line completion.
		Don't beep when listing all matches.
'winaltkeys'	Win32 and Motif GUI.  When "yes", ALT keys are handled
		entirely by the window system.  When "no", ALT keys are never
		used by the window system.  When "menu" it depends on whether
		a key is a menu shortcut.
'winminheight'	Minimal height for each window.  Default is 1.  Set to 0 if
		you want zero-line windows.  Scrollbar is removed for
		zero-height windows. (Negri)



New Ex commands						*new-ex-commands-5.2*
---------------

|:badd|		Add file name to buffer list without side effects.  (Negri)
|:behave|	Quickly set MS-Windows or xterm behavior.
|:browse|	Use file selection dialog.
|:call|		Call a function, optionally with a range.
|:cnewer|
|:colder|	To access a stack of quickfix error lists.
|:comclear|	Clear all user-defined commands.
|:command|	Define a user command.
|:continue|	Go back to ":while".
|:confirm|	Ask confirmation if something unexpected happens.
|:cscope|	Execute cscope command.
|:cstag|	Use cscope to jump to a tag.
|:delcommand|	Delete a user-defined command.
|:delfunction|	Delete a user-defined function.
|:endfunction|	End of user-defined function.
|:function|	Define a user function.
|:grep|		Works similar to ":make". (Negri)
|:mksession|	Create a session file.
|:nohlsearch|	Stop 'hlsearch' highlighting for a moment.
|:Print|	This is Vi compatible.  Does the same as ":print".
|:promptfind|	Search dialog (Win32 GUI).
|:promptrepl|	Search/replace dialog (Win32 GUI).
|:return|	Return from a user-defined function.
|:simalt|	Win32 GUI: Simulate alt-key pressed.  (Negri)
|:smagic|	Like ":substitute", but always use 'magic'.
|:snomagic|	Like ":substitute", but always use 'nomagic'.
|:tcl|		Execute TCL command.
|:tcldo|	Execute TCL command for a range of lines.
|:tclfile|	Execute a TCL script file.
|:tearoff|	Tear-off a menu (Win32 GUI).
|:tmenu|
|:tunmenu|	Win32 GUI: menu tooltips.  (Negri)
|:star|	:*	Execute a register.


Changed							*changed-5.2*
-------

Renamed functions:
		buffer_exists()	   -> bufexists()
		buffer_name()      -> bufname()
		buffer_number()    -> bufnr()
		file_readable()    -> filereadable()
		highlight_exists() -> hlexists()
		highlightID()      -> hlID()
		last_buffer_nr()   -> bufnr("$")
The old ones are still there, for backwards compatibility.

The CTRL-_ command in Insert and Command-line mode is only available when the
new 'allowrevins' option is set.  Avoids that people who want to type SHIFT-_
accidentally enter reverse Insert mode, and don't know how to get out.

When a file name path in ":tselect" listing is too long, remove a part in the
middle and put "..." there.

Win32 GUI: Made font selector appear inside Vim window, not just any odd
place. (Negri)

":bn" skips help buffers, unless currently in a help buffer. (Negri)

When there is a status line and only one window, don't show '^' in the status
line of the current window.

":*" used to be used for "'<,'>", the Visual area.  But in Vi it's used as an
alternative for ":@".  When 'cpoptions' includes '*' this is Vi compatible.

When 'insertmode' is set, using CTRL-O to execute a mapping will work like
'insertmode' was not set.  This allows "normal" mappings to be used even when
'insertmode' is set.

When 'mouse' was set already (e.g., in the .vimrc file), don't automatically
set 'mouse' when the GUI starts.

Removed the 'N', 'I' and 'A' flags from the 'mouse' option.

Renamed "toggle option" to "boolean option".  Some people thought that ":set
xyz" would toggle 'xyz' on/off each time.

The internal variable "shell_error" contains the error code from the shell,
instead of just 0 or 1.

When inserting or replacing, typing CTRL-V CTRL-<CR> used to insert "<C-CR>".
That is not very useful.  Now the CTRL key is ignored and a <CR> is inserted.
Same for all other "normal" keys with modifiers.  Mapping these modified key
combinations is still possible.
In Insert mode, <C-CR> and <S-Space> can be inserted by using CTRL-K and then
the special character.

Moved "quotes" file to doc/quotes.txt, and "todo" file to doc/todo.txt.  They
are now installed like other documentation files.

winheight() function returns -1 for a non-existing window.  It used to be
zero, but that is a valid height now.

The default for 'selection' is "inclusive", which makes a difference when
using "$" or the mouse to move the cursor in Visual mode.

":q!" does not exit when there are changed buffers which are hidden.  Use
":qa!" to exit anyway.

Disabled the Perl/Python/Tcl interfaces by default.  Not many people use them
and they make the executable a lot bigger.  The internal scripting language is
now powerful enough for most tasks.

The strings from the 'titlestring' and 'iconstring' options are used
untranslated for the Window title and icon.  This allows for including a <CR>.
Previously a <CR> would be shown as "^M" (two characters).

When a mapping is started in Visual or Select mode which was started from
Insert mode (the mode shows "(insert) Visual"), don't return to Insert mode
until the mapping has ended.  Makes it possible to use a mapping in Visual
mode that also works when the Visual mode was started from Select mode.

Menus in $VIMRUNTIME/menu.vim no longer overrule existing menus.  This helps
when defining menus in the .vimrc file, or when sourcing mswin.vim.

Unix: Use /var/tmp for .swp files, if it exists.  Files there survive a
reboot (at least on Linux).


Added							*added-5.2*
-----

--with-motif-lib configure argument.  Allows for using a static Motif library.

Support for mapping numeric keypad +,-,*,/ keys. (Negri)
When not mapped, they produce the normal character.

Win32 GUI: When directory dropped on Gvim, cd there and edit new buffer.
(Negri)

Win32 GUI: Made CTRL-Break work as interrupt, so that CTRL-C can be
used for mappings.

In the output of ":map", highlight the "*" to make clear it's not part of the
rhs. (Roemer)

When showing the Visual area, the cursor is not switched off, so that it can
be located.  The Visual area is now highlighted with a grey background in the
GUI.  This makes the cursor visible when it's also reversed.

Win32: When started with single full pathname (e.g. via double-clicked file),
cd to that file's directory. (Negri)

Win32 GUI: Tear-off menus, with ":tearoff <menu-name>" command. (Negri)
't' option to 'guioptions': Add tearoff menu items for Win32 GUI and Motif.
It's included by default.
Win32 GUI: tearoff menu with submenus is indicated with a ">>". (Negri)

Added ^Kaa and ^KAA digraphs.
Added "euro" symbol to digraph.c. (Corry)

Support for Motif menu shortcut keys, using '&' like MS-Windows (Ollis).
Other GUIs ignore '&' in a menu name.

DJGPP: Faster screen updating (John Lange).

Clustering of syntax groups ":syntax cluster" (Bigham).
Including syntax files: ":syntax include" (Bigham).

Keep column when switching buffers, when 'nosol' is set (Radics).

Number function for Perl interface.

Support for Intellimouse in Athena GUI. (Jensen)

":sleep" also accepts an argument in milliseconds, when "m" is used.

Added 'p' flag in 'guioptions': Install callbacks for enter/leave window
events.  Makes cursor blinking work for Terhaar, breaks it for me.

"--help" and "--version" command-line arguments.

Non-text in ":list" output is highlighted with NonText.

Added text objects: "i(" and "i)" as synonym for "ib".  "i{" and "i}" as
synonym for "iB".  New: "i<" and "i>", to select <thing>.  All this also for
"a" objects.

'O' flag in 'shortmess': message for reading a file overwrites any previous
message. (Negri)

Win32 GUI: 'T' flag in 'guioptions': switch toolbar on/off.
Included a list with self-made toolbar bitmaps.  (Negri)

Added menu priority for sub-menus.  Implemented for Win32 and Motif GUI.
Display menu priority with ":menu" command.
Default and Syntax menus now include priority for items.  Allows inserting
menu items in between the default ones.

When the 'number' option is on, highlight line numbers with the LineNr group.

"Ignore" highlight group: Text highlighted with this is made blank.  It is
used to hide special characters in the help text.

Included Exuberant Ctags version 2.3, with C++ support, Java support and
recurse into directories. (Hiebert)

When a tags file is not sorted, and this is detected (in a simplistic way), an
error message is given.

":unlet" accepts a "!", to ignore non-existing variables, and accepts more
than one argument. (Roemer)
Completion of variable names for ":unlet". (Roemer)

When there is an error in a function which is called by another function, show
the call stack in the error message.

New file name modifiers:
":.": reduce file name to be relative to current dir.
":~": reduce file name to be relative to home dir.
":s?pat?sub?": substitute "pat" with "sub" once.
":gs?pat?sub?": substitute "pat" with "sub" globally.

New configure arguments: --enable-min-features and --enable-max-features.
Easy way to switch to minimum or maximum features.

New compile-time feature: modify_fname.  For file name modifiers, e.g,
"%:p:h".  Can be disabled to save some code (16 bit DOS).

When using whole-line completion in Insert mode, and 'cindent' is set, indent
the line properly.

MSDOS and Win32 console: 'guicursor' sets cursor thickness. (Negri)

Included new set of Farsi fonts. (Shiran)

Accelerator text now also works in Motif.  All menus can be defined with & for
mnemonic and TAB for accelerator text.  They are ignored on systems that don't
support them.
When removing or replacing a menu, compare the menu name only up to the <Tab>
before the mnemonic.

'i' and 'I' flags after ":substitute": ignore case or not.

"make install" complains if the runtime files are missing.

Unix: When finding an existing swap file that can't be opened, mention the
owner of the file in the ATTENTION message.

The 'i', 't' and 'k' options in 'complete' now also print the place where they
are looking for matches. (Acevedo)

"gJ" command: Join lines without inserting a space.

Setting 'keywordprg' to "man -s" is handled specifically.  The "-s" is removed
when no count given, the count is added otherwise.  Configure checks if "man
-s 2 read" works, and sets the default for 'keywordprg' accordingly.

If you do a ":bd" and there is only one window open, Vim tries to move to a
buffer of the same type (i.e. non-help to non-help, help to help), for
consistent behavior to :bnext/:bprev. (Negri)

Allow "<Nop>" to be used as the rhs of a mapping.  ":map xx <Nop>", maps "xx"
to nothing at all.

In a ":menu" command, "<Tab>" can be used instead of a real tab, in the menu
path.  This makes it more easy to type, no backslash needed.

POSIX compatible character classes for regexp patterns: [:alnum:], [:alpha:],
[:blank:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:],
[:space:], [:upper:] and [:xdigit:]. (Briscoe)

regexp character classes (for fast syntax highlight matching):
	digits:	    \d [0-9]		\D  not digit (Roemer)
	hex:	    \x [0-9a-fA-F]	\X  not hex
	octal:	    \o [0-7]		\O  not octal
	word:	    \w [a-zA-Z0-9_]	\W  not word
	head:	    \h [a-zA-Z_]	\H  not head
	alphabetic: \a [a-zA-Z]		\A  not alphabetic
	lowercase:  \l [a-z]		\L  not lowercase
	uppercase:  \u [A-Z]		\U  not uppercase

":set" now accepts "+=", |^=" and "-=": add or remove parts of a string
option, add or subtract a number from a number option.  A comma is
automagically inserted or deleted for options that are a comma separated list.

Filetype feature, for autocommands.  Uses a file type instead of a pattern to
match a file.  Currently only used for RISC OS.  (Leonard)

In a pattern for an autocommand, environment variables can be used.  They are
expanded when the autocommand is defined.

"BufFilePre" and "BufFilePost" autocommand evens: Before and after applying
the ":file" command to change the name of a buffer.
"VimLeavePre" autocommand event: before writing the .viminfo file.

For autocommands argument: <abuf> is buffer number, like <afile>.

Made syntax highlighting a bit faster when scrolling backwards, by keeping
more syncing context.

Win32 GUI: Made scrolling faster by avoiding a redraw when deleting or
inserting screen lines.

GUI: Made scrolling faster by not redrawing the scrollbar when the thumb moved
less than a pixel.

Included ":highlight" in bugreport.vim.

Created install.exe program, for simplistic installation on DOS and
MS-Windows.

New register: '_', the black hole.  When writing to it, nothing happens.  When
reading from it, it's always empty.  Can be used to avoid a delete or change
command to modify the registers, or reduce memory use for big changes.

CTRL-V xff enters character by hex number.  CTRL-V o123 enters character by
octal number. (Aaron)

Improved performance of syntax highlighting by skipping check for "keepend"
when there isn't any.

Moved the mode message ("-- INSERT --") to the last line of the screen.  When
'cmdheight' is more than one, messages will remain readable.

When listing matching files, they are also sorted on 'suffixes', such that
they are listed in the same order as CTRL-N retrieves them.

synIDattr() takes a third argument (optionally), which tells for which
terminal type to get the attributes for.  This makes it possible to run
2html.vim outside of gvim (using color names instead of #RRGGBB).

Memory profiling, only for debugging.  Prints at exit, and with "g^A" command.
(Kahn)

DOS: When using a file in the current drive, remove the drive name:
"A:\dir\file" -> "\dir\file".  This helps when moving a session file on a
floppy from "A:\dir" to "B:\dir".

Increased number of remembered jumps from 30 to 50 per window.

Command to temporarily disable 'hls' highlighting until the next search:
":nohlsearch".

"gp" and "gP" commands: like "p" and "P", but leave the cursor just after the
inserted text.  Used for the CTRL-V command in MS-Windows mode.


Fixed							*fixed-5.2*
-----

Win32 GUI: Could draw text twice in one place, for fake-bold text.  Removed
this, Windows will handle the bold text anyway. (Negri)

patch 5.1.1: Win32s GUI: pasting caused a crash (Negri)

patch 5.1.2: When entering another window, where characters before the cursor
have been deleted, could have a cursor beyond the end of the line.

patch 5.1.3: Win32s GUI: Didn't wait for external command to finish. (Negri)

patch 5.1.4: Makefile.w32 can now also be used to generate the OLE version
(Scott).

patch 5.1.5: Crashed when using syntax highlighting: cursor on a line that
doesn't fit in the window, and splitting that line in two.

patch 5.1.6: Visual highlighting bug: After ":set nowrap", go to end of line
(so that the window scrolls horizontally), ":set wrap".  Following Visual
selection was wrong.

patch 5.1.7: When 'tagbsearch' off, and 'ignorecase' off, still could do
binary searching.

patch 5.1.8: Win32 GUI: dragging the scrollbar didn't update the ruler.

patch 5.1.9: Using ":gui" in .vimrc, caused xterm cursor to disappear.

patch 5.1.10: A CTRL-N in Insert mode could cause a crash, when a buffer
without a name exists.

patch 5.1.11: "make test" didn't work in the shadow directory.  Also adjusted
"make shadow" for the links in the ctags directory.

patch 5.1.12: "buf 123foo" used "123" as a count, instead as the start of a
buffer name.

patch 5.1.13: When completing file names on the command-line, reallocating the
command-line may go wrong.

patch 5.1.14: ":[nvci]unmenu" removed menu for all modes, when full menu patch
specified.

Graceful handling of NULLs in drag-dropped file list.  Handle passing NULL to
Fullname_save(). (Negri)

Win32: ":!start" to invoke a program without opening a console, swapping
screens, or waiting for completion in either console or gui version, e.g. you
can type ":!start winfile".  ALSO fixes "can't delete swapfile after spawning
a shell" bug. (enhancement of Aaron patch) (Negri)

Win32 GUI: Fix CTRL-X default keymapping to be more Windows-like. (Negri)

Shorten filenames on startup.  If in /foo/bar, entering "vim ../bar/bang.c"
displays "bang.c" in status bar, not "/foo/bar/bang.c"  (Negri)

Win32 GUI: No copy to Windows clipboard when it's not desired.

Win32s: Fix pasting from clipboard - made an assumption not valid under
Win32s. (Negri)

Win32 GUI: Speed up calls to gui_mch_draw_string() and cursor drawing
functions. (Negri)

Win32 GUI: Middle mouse button emulation now works in GUI! (Negri)

Could skip messages when combining commands in one line, e.g.:
":echo "hello" | write".

Perl interpreter was disabled before executing VimLeave autocommands.  Could
not use ":perl" in them.  (Aaron)

Included patch for the Intellimouse (Aaron/Robinson).

Could not set 'ls' to one, when last window has only one line.  (Mitterand)

Fixed a memory leak when removing menus.

After ":only" the ruler could overwrite a message.

Dos32: removed changing of __system_flags.  It appears to work better when
it's left at the default value.

p_aleph was an int instead of along, caused trouble on systems where
sizeof(int) != sizeof(long). (Schmidt)

Fixed enum problems for Ultrix. (Seibert)

Small redraw problem: "dd" on last line in file cleared wrong line.

Didn't interpret "cmd | endif" when "cmd" starts with a range.  E.g. "if 0 |
.d | endif".

Command "+|" on the last line of the file caused ml_get errors.

Memory underrun in eval_vars(). (Aaron)

Don't rename files in a difficult way, except on Windows 95 (was also done on
Windows NT).

Win32 GUI: An external command that produces an error code put the error
message in a dialog box.  had to close the window and close the dialog.  Now
the error code is displayed in the console. (Negri)

"comctl32.lib" was missing from the GUI libraries in Makefile.w32. (Battle)

In Insert mode, when entering a window in Insert mode, allow the cursor to be
one char beyond the text.

Renamed machine dependent rename() to mch_rename().  Define mch_rename() to
rename() when it works properly.

Rename vim_chdir() to mch_chdir(), because it's machine dependent.

When using an arglist, and editing file 5 of 4, ":q" could cause "-1 more
files to edit" error.

In if_python.c, VimCommand() caused an assertion when a do_cmdline() failed.
Moved the Python_Release_Vim() to before the VimErrorCheck().  (Harkins)

Give an error message for an unknown argument after "--".  E.g. for "vim
--xyz".

The FileChangedShell autocommand didn't set <afile> to the name of the changed
file.

When doing ":e file", causing the attention message, there sometimes was no
hit-enter prompt.  Caused by empty line or "endif" at end of sourced file.

A large number of patches for the VMS version. (Hunsaker)

When CTRL-L completion (find longest match) results in a shorter string, no
completion is done (happens with ":help").

Crash in Win32 GUI version, when using an Ex "@" command, because
LinePointers[] was used while not initialized.

Win32 GUI: allow mapping of Alt-Space.

Output from "vim -h" was sent to stderr.  Sending it to stdout is better, so
one can use "vim -h | more".

In command-line mode, ":vi[!]" should reload the file, just like ":e[!]".
In Ex mode, ":vi" stops Ex mode, but doesn't reload the file.  This is Vi
compatible.

When using a ":set ls=1" in the .gvimrc file, would get a status line for a
single window.  (Robinson)

Didn't give an error message for ":set ai,xx". (Roemer)
Didn't give an error message for ":set ai?xx", ":set ai&xx", ":set ai!xx".

Non-Unix systems: That a file exists but is unreadable is recognized as "new
file".  Now check for existence when file can't be opened (like Unix).

Unix: osdef.sh didn't handle declarations where the function name is at the
first column of the line.

DJGPP: Shortening of file names didn't work properly, because get_cwd()
returned a path with backslashes. (Negri)

When using a 'comments' part where a space is required after the middle part,
always insert a space when starting a new line.  Helps for C comments, below a
line with "/****".

Replacing path of home directory with "~/" could be wrong for file names
with embedded spaces or commas.

A few fixes for the Sniff interface. (Leherbauer)

When asking to hit 'y' or 'n' (e.g. for ":3,1d"), using the mouse caused
trouble.  Same for ":s/x/y/c" prompt.

With 'nowrap' and 'list', a Tab halfway on the screen was displayed as blanks,
instead of the characters specified with 'listchars'.  Also for other
characters that take more than one screen character.

When setting 'guifont' to an unknown font name, the previous font was lost and
a default font would be used. (Steed)

DOS: Filenames in the root directory didn't get shortened properly. (Negri)

DJGPP: making a full path name out of a file name didn't work properly when
there is no _fullpath() function. (Negri)

Win32 console: ":sh" caused a crash. (Negri)

Win32 console: Setting 'lines' and/or 'columns' in the _vimrc failed miserably
(could hang Windows 95). (Negri)

Win32: The change-drive function was not correct, went to the wrong drive.
(Tsindlekht)

GUI: When editing a command line in Ex mode, Tabs were sometimes not
backspaced properly, and unprintable characters were displayed directly.
non-GUI can still be wrong, because a system function is called for this.

":set" didn't stop after an error.  For example ":set no ai" gave an error for
"no", but still set "ai".  Now ":set" stops after the first error.

When running configure for ctags, $LDFLAGS wasn't passed to it, causing
trouble for IRIX.

"@%" and "@#" when file name not set gave an error message.  Now they just
return an empty string. (Steed)

CTRL-X and CTRL-A didn't work correctly with negative hex and octal numbers.
(Steed)

":echo" always started with a blank.

Updating GUI cursor shape didn't always work (e.g., when blinking is off).

In silent Ex mode ("ex -s" or "ex <file") ":s///p" didn't print a line.  Also
a few other commands that explicitly print a text line didn't work.  Made this
Vi compatible.

Win32 version of _chdrive() didn't return correct value. (Tsindlekht)

When using 't' in 'complete' option, no longer give an error message for a
missing tags file.

Unix: tgoto() can return NULL, which was not handled correctly in configure.

When doing ":help" from a buffer where 'binary' is set, also edited the help
file in binary mode.  Caused extra ^Ms for DOS systems.

Cursor position in a file was reset to 1 when closing a window.

":!ls" in Ex mode switched off echo.

When doing a double click in window A, while currently in window B, first
click would reset double click time, had to click three times to select a
word.

When using <F11> in mappings, ":mkexrc" produced an exrc file that can't be
used in Vi compatible mode.  Added setting of 'cpo' to avoid this.  Also, add
a CTRL-V in front of a '<', to avoid a normal string to be interpreted as a
special key name.

Gave confusing error message for ":set guifont=-*-lucida-*": first "font is
not fixed width", then "Unknown font".

Some options were still completely left out, instead of included as hidden
options.

While running the X11 GUI, ignore SIGHUP signals.  Avoids a crash after
executing an external command (in rare cases).

In os_unixx.h, signal() was defined to sigset(), while it already was.

Memory leak when executing autocommands (was reported as a memory leak in
syntax highlighting).

Didn't print source of error sometimes, because pointers were the same,
although names were different.

Avoid a number of UMR errors from Purify (third argument to open()).

A swap file could still be created just after setting 'updatecount' to zero,
when there is an empty buffer and doing ":e file". (Kutschera)

Test 35 failed on 64 bit machines. (Schild)

With "p" and "P" commands, redrawing was slow.

Awk script for html documentation didn't work correctly with AIX awk.
Replaced "[ ,.);\]	]" with "[] ,.);	]". (Briscoe)
The makehtml.awk script had a small problem, causing extra lines to be
inserted. (Briscoe)

"gqgq" could not be repeated.  Repeating for "gugu" and "gUgU" worked in a
wrong way.  Also made "gqq" work to be consistent with "guu".

C indent was wrong after "case ':':".

":au BufReadPre *.c put": Line from put text was deleted, because the buffer
was still assumed to be empty.

Text pasted with the Edit/Paste menu was subject to 'textwidth' and
'autoindent'.  That was inconsistent with using the mouse to paste.  Now "*p
is used.

When using CTRL-W CTRL-] on a word that's not a tag, and then CTRL-] on a tag,
window was split.

":ts" got stuck on a tags line that has two extra fields.

In Insert mode, with 'showmode' on, <C-O><C-G> message was directly
overwritten by mode message, if preceded with search command warning message.

When putting the result of an expression with "=<expr>p, newlines were
inserted like ^@ (NUL in the file).  Now the string is split up in lines at
the newline.

putenv() was declared with "const char *" in pty.c, but with "char *" in
osdef2.h.in.  Made the last one also "const char *".

":help {word}", where +{word} is a feature, jumped to the feature list instead
of where the command was explained.  E.g., ":help browse", ":help autocmd".

Using the "\<xx>" form in an expression only got one byte, even when using a
special character that uses several bytes (e.g., "\<F9>").
Changed "\<BS>" to produce CTRL-H instead of the special key code for the
backspace key.  "\<Del>" produces 0x7f.

":mkvimrc" didn't write a command to set 'compatible' or 'nocompatible'.

The shell syntax didn't contain a "syn sync maxlines" setting.  In a long file
without recognizable items, syncing took so long it looked like Vim hangs.
Added a maxlines setting, and made syncing interruptable.

The "gs" command didn't flush output before waiting.

Memory leaks for:
    ":if 0 | let a = b . c | endif"
    "let a = b[c]"
    ":so {file}" where {file} contains a ":while"

GUI: allocated fonts were never released. (Leonard)

Makefile.bor:
- Changed $(DEFINES) into a list of "-D" options, so that it can also be used
  for the resource compiler. (not tested!)
- "bcc.cfg" was used for all configurations.  When building for another
  configuration, the settings for the previous one would be used.  Moved
  "bcc.cfg" to the object directory. (Geddes)
- Included targets for vimrun, install, ctags and xxd.  Changed the default to
  use the Borland DLL Runtime Library, makes Vim.exe a log smaller. (Aaron)

"2*" search for the word under the cursor with "2" prepended. (Leonard)

When deleting into a specific register, would still overwrite the non-Win32
GUI selection.  Now ""x"*P works.

When deleting into the "" register, would write to the last used register.
Now ""x always writes to the unnamed register.

GUI Athena: A submenu with a '.' in it didn't work.  E.g.,
":amenu Syntax.XY\.Z.foo lll".

When first doing ":tag foo" and then ":tnext" and/or ":tselect" the order of
matching tags could change, because the current file is different.  Now the
existing matches are kept in the same order, newly found matches are added
after them, not matter what the current file is.

":ta" didn't find the second entry in a tags file, if the second entry was
longer than the first one.

When using ":set si tw=7" inserting "foo {^P}" made the "}" inserted at the
wrong position.  can_si was still TRUE when the cursor is not in the indent of
the line.

Running an external command in Win32 version had the problem that Vim exits
when the X on the console is hit (and confirmed).  Now use the "vimrun"
command to start the external command indirectly. (Negri)

Win32 GUI: When running an external filter, do it in a minimized DOS box.
(Negri)

":let" listed variables without translation into printable characters.

Win32 console: When resizing the window, switching back to the old size
(when exiting or executing an external command) sometimes failed. (Negri)
This appears to also fix a "non fixable" problem:
Win32 console in NT 4.0: When running Vim in a cmd window with a scrollbar,
the scrollbar disappeared and was not restored when Vim exits.  This does work
under NT 3.51, it appears not to be a Vim problem.

When executing BufDelete and BufUnload autocommands for a buffer without a
name, the name of the current buffer was used for <afile>.

When jumping to a tag it reported "tag 1 of >2", while in fact there could be
only two matches.  Changed to "tag 1 of 2 or more".

":tjump tag" did a linear search in the tags file, which can be slow.

Configure didn't find "LibXm.so.2.0", a Xm library with a version number.

Win32 GUI: When using a shifted key with ALT, the shift modifier would remain
set, even when it was already used by changing the used key.  E.g., "<M-S-9>"
resulted in "<M-S-(>", but it should be "<M-(>". (Negri)

A call to ga_init() was often followed by setting growsize and itemsize.
Created ga_init2() for this, which looks better. (Aaron)

Function filereadable() could call fopen() with an empty string, which might
be illegal.

X Windows GUI: When executing an external command that outputs text, could
write one character beyond the end of a buffer, which caused a crash. (Kohan)

When using "*" or "#" on a string that includes '/' or '?' (when these are
included in 'isk'), they were not escaped. (Parmelan)

When adding a ToolBar menu in the Motif GUI, the submenu_id field was not
cleared, causing random problems.

When adding a menu, the check if this menu (or submenu) name already exists
didn't compare with the simplified version (no mnemonic or accelerator) of the
new menu.  Could get two menus with the same name, e.g., "File" and "&File".

Breaking a line because of 'textwidth' at the last line in the window caused a
redraw of the whole window instead of a scroll.  Speeds up normal typing with
'textwidth' a lot for slow terminals.

An invalid line number produced an "invalid range" error, even when it wasn't
to be executed (inside "if 0").

When the unnamed, first buffer is re-used, the "BufDelete" autocommand was
not called.  It would stick in a buffer list menu.

When doing "%" on the NUL after the line, a "{" or "}" in the last character
of the line was not found.

The Insert mode menu was not used for the "s" command, the Operator-pending
menu was used instead.

With 'compatible' set, some syntax highlighting was not correct, because of
using "[\t]" for a search pattern.  Now use the regexps for syntax
highlighting like the 'cpoptions' option is empty (as was documented already).

When using "map <M-Space> ms" or "map <Space> sss" the output of ":map" didn't
show any lhs for the mapping (if 'isprint' includes 160).  Now always use
<Space> and <M-Space>, even when they are printable.

Adjusted the Syntax menu, so that the lowest entry fits on a small screen (for
Athena, where menus don't wrap).

When using CTRL-E or CTRL-Y in Insert mode for characters like 'o', 'x' and
digits, repeating the insert didn't work.

The file "tools/ccfilter.README.txt" could not be unpacked when using short
file names, because of the two dots.  Renamed it to
"tools/ccfilter_README.txt".

For a dark 'background', using Blue for Directory and SpecialKey highlight
groups is not very readable.  Use Cyan instead.

In the function uc_scan_attr() in ex_docmd.c there was a goto that jumped into
a block with a local variable.  That's illegal for some compilers.

Win32 GUI: There was a row of pixels at the bottom of the window which was not
drawn. (Aaron)

Under DOS, editing "filename/" created a swap file of "filename/.swp".  Should
be "filename/_swp".

Win32 GUI: pointer was hidden when executing an external command.

When 'so' is 999, "J" near the end of the file didn't redisplay correctly.

":0a" inserted after the first line, instead of before the first line.

Unix: Wildcard expansion didn't handle single quotes and {} patterns.  Now
":file 'window.c'" removes the quotes and ":e 'main*.c'" works (literal '*').
":file {o}{n}{e}" now results in file name "one".

Memory leak when setting a string option back to its default value.

==============================================================================
VERSION 5.3						*version-5.3*

Version 5.3 was a bug-fix version of 5.2.  There are not many changes.
Improvements made between version 5.2 and 5.3:

Changed							*changed-5.3*
-------

Renamed "IDE" menu to "Tools" menu.


Added							*added-5.3*
-----

Win32 GUI: Give a warning when Vim is activated, and one of the files changed
since editing started. (Negri)


Fixed							*fixed-5.3*
-----

5.2.1: Win32 GUI: space for external command was not properly allocated, could
cause a crash. (Aaron)  This was the reason to bring out 5.3 quickly after
5.2.

5.2.2: Some commands didn't complain when used without an argument, although
they need one: ":badd", ":browse", ":call", ":confirm", ":behave",
":delfunction", ":delcommand" and ":tearoff".
":endfunction" outside of a function gave wrong error message: "Command not
implemented".  Should be ":endfunction not inside a function".

5.2.3: Win32 GUI: When gvim was installed in "Program files", or another path
with a space in it, executing external commands with vimrun didn't work.

5.2.4: Pasting with the mouse in Insert mode left the cursor on the last
pasted character, instead of behind it.

5.2.5: In Insert mode, cursor after the end of the line, a shift-cursor-left
didn't include the last character in the selection.

5.2.6: When deleting text from Insert mode (with "<C-O>D" or the mouse), which
includes the last character in the line, the cursor could be left on the last
character in the line, instead of just after it.

5.2.7: Win32 GUI: scrollbar was one pixel too big.

5.2.8: Completion of "PopUp" menu showed the derivates "PopUpc", "PopUPi",
etc.  ":menu" also showed these.

5.2.9: When using two input() functions on a row, the prompt would not be
drawn in column 0.

5.2.10: A loop with input() could not be broken with CTRL-C.

5.2.11: ":call asdf" and ":call asdf(" didn't give an error message.

5.2.12: Recursively using ":normal" crashes Vim after a while.  E.g.:
":map gq :normal gq<CR>"

5.2.13: Syntax highlighting used 'iskeyword' from wrong buffer.  When using
":help", then "/\k*" in another window with 'hlsearch' set.

5.2.14: When using ":source" from a function, global variables would not be
available unless "g:" was used.

5.2.15: XPM files can have the extension ".pm", which is the same as for Perl
modules.  Added "syntax/pmfile.vim" to handle this.

5.2.16: On Win32 and Amiga, "echo expand("%:p:h")" removed one dirname in an
empty buffer.  mch_Fullname() didn't append a slash at the end of a directory
name.

Should include the character under the cursor in the Visual area when using
'selection' "exclusive".  This wasn't done for "%", "e", "E", "t" and "f".

""p would always put register 0, instead of the unnamed (last used) register.
Reverse the change that ""x doesn't write in the unnamed (last used) register.
It would always write in register 0, which isn't very useful.  Use "-x for the
paste mappings in Visual mode.

When there is one long line on the screen, and 'showcmd' is off, "0$" didn't
redraw the screen.

Win32 GUI: When using 'mousehide', the pointer would flicker when the cursor
shape is changed. (Negri)

When cancelling Visual mode, and the cursor moves to the start, the wanted
column wasn't set, "k" or "j" moved to the wrong column.

When using ":browse" or ":confirm", was checking for a comment and separating
bar, which can break some commands.

Included fixes for Macintosh. (Kielhorn)

==============================================================================
VERSION 5.4						*version-5.4*

Version 5.4 adds new features, useful changes and a lot of bug fixes.


Runtime directory introduced				*new-runtime-dir*
----------------------------

The distributed runtime files are now in $VIMRUNTIME, the user files in $VIM.
You normally don't set $VIMRUNTIME but let Vim find it, by using
$VIM/vim{version}, or use $VIM when that doesn't exist.  This allows for
separating the user files from the distributed files and makes it more easy to
upgrade to another version.  It also makes it possible to keep two versions of
Vim around, each with their own runtime files.

In the Unix distribution the runtime files have been moved to the "runtime"
directory.  This makes it possible to copy all the runtime files at once,
without the need to know what needs to be copied.

The archives for DOS, Windows, Amiga and OS/2 now have an extra top-level
"vim" directory.  This is to make clear that user-modified files should be put
here.  The directory that contains the executables doesn't have '-' or '.'
characters.  This avoids strange extensions.

The $VIM and $VIMRUNTIME variables are set when they are first used.  This
allows them to be used by Perl, for example.

The runtime files are also found in a directory called "$VIM/runtime".  This
helps when running Vim after just unpacking the runtime archive.  When using
an executable in the "src" directory, Vim checks if "vim54" or "runtime" can
be added after removing it.  This make the runtime files be found just after
compiling.

A default for $VIMRUNTIME can be given in the Unix Makefile.  This is useful
if $VIM doesn't point to above the runtime directory but to e.g., "/etc/".


Filetype introduced					*new-filetype-5.4*
-------------------

Syntax files are now loaded with the new FileType autocommand.  Old
"mysyntaxfile" files will no longer work. |filetypes|

The scripts for loading syntax highlighting have been changed to use the
new Syntax autocommand event.

This combination of Filetype and Syntax events allows tuning the syntax
highlighting a bit more, also when selected from the Syntax menu.  The
FileType autocommand can also be used to set options and mappings specifically
for that type of file.

The "$VIMRUNTIME/filetype.vim" file is not loaded automatically.  The
":filetype on" command has been added for this.  ":syntax on" also loads it.

The 'filetype' option has been added.  It is used to trigger the FileType
autocommand event, like the 'syntax' option does for the Syntax event.

":set syntax=OFF" and ":set syntax=ON" can be used (in a modeline) to switch
syntax highlighting on/off for the current file.

The Syntax menu commands have been moved to $VIMRUNTIME/menu.vim.  The Syntax
menu is included both when ":filetype on" and when ":syntax manual" is used.

Renamed the old 'filetype' option to 'osfiletype'.  It was only used for
RISCOS.  'filetype' is now used for the common file type.

Added the ":syntax manual" command.  Allows manual selection of the syntax to
be used, e.g., from a modeline.


Vim script line continuation			*new-line-continuation*
----------------------------

When an Ex line starts with a backslash, it is concatenated to the previous
line.  This avoids the need for long lines. |line-continuation| (Roemer)
Example: >
	if   has("dialog_con") ||
	   \ has("dialog_gui")
	    :let result = confirm("Enter your choice",
				\ "&Yes\n&No\n&Maybe",
				\ 2)
	endif


Improved session files				*improved-sessions*
----------------------

New words for 'sessionoptions':
- "help"	Restore the help window.
- "blank"	Restore empty windows.
- "winpos"	Restore the Vim window position.  Uses the new ":winpos"
		command
- "buffers"	Restore hidden and unloaded buffers.  Without it only the
		buffers in windows are restored.
- "slash"	Replace backward by forward slashes in file names.
- "globals"	Store global variables.
- "unix"	Use unix file format (<NL> instead of <CR><NL>)

The ":mksession" and 'sessionoptions' are now in the +mksession feature.

The top line of the window is also restored when using a session file.

":mksession" and ":mkvimrc" don't store 'fileformat', it should be detected
when loading a file.

(Most of this was done by Vince Negri and Robert Webb)


Autocommands improved				*improved-autocmds-5.4*
---------------------

New events:
|FileType|	When the file type has been detected.
|FocusGained|	When Vim got input focus. (Negri)
|FocusLost|	When Vim lost input focus. (Negri)
|BufCreate|	Called just after a new buffer has been created or has been
		renamed. (Madsen)
|CursorHold|	Triggered when no key has been typed for 'updatetime'.  Can be
		used to do something with the word under the cursor. (Negri)
		Implemented CursorHold autocommand event for Unix. (Zellner)
		Also for Amiga and MS-DOS.
|GUIEnter|	Can be used to do something with the GUI window after it has
		been created (e.g., a ":winpos 100 50").
|BufHidden|	When a buffer becomes hidden.  Used to delete the
		option-window when it becomes hidden.

Also trigger |BufDelete| just before a buffer is going to be renamed. (Madsen)

The "<amatch>" pattern can be used like "<afile>" for autocommands, except
that it is the matching value for the FileType and Syntax events.

When ":let @/ = <string>" is used in an autocommand, this last search pattern
will be used after the autocommand finishes.

Made loading autocommands a bit faster.  Avoid doing strlen() on each exiting
pattern for each new pattern by remembering the length.


Encryption						*new-encryption*
----------

Files can be encrypted when writing and decrypted when reading.  Added the
'key' option, "-x" command line argument and ":X" command. |encryption| (based
on patch from Mohsin Ahmed)

When reading a file, there is an automatic detection whether it has been
crypted.  Vim will then prompt for the key.

Note that the encryption method is not compatible with Vi.  The encryption is
not unbreakable.  This allows it to be exported from the US.


GTK GUI port						*new-GTK-GUI*
------------

New GUI port for GTK+.  Includes a toolbar, menu tearoffs, etc. |gui-gtk|
Added the |:helpfind| command. (Kahn and Dalecki)


Menu changes						*menu-changes-5.4*
------------

Menus can now also be used in the console.  It is enabled by the new
'wildmenu' option.  This shows matches for command-line completion like a
menu.  This works as a minimal file browser.

The new |:emenu| command can be used to execute a menu item.

Uses the last status line to list items, or inserts a line just above the
command line.  (Negri)

The 'wildcharx' option can be used to trigger 'wildmenu' completion from a
mapping.

When compiled without menus, this can be detected with has("menu").  Also show
this in the ":version" output.  Allow compiling GUI versions without menu
support.  Only include toolbar support when there is menu support.

Moved the "Window" menu all the way to the right (priority 70).  Looks more
familiar for people working with MS-Windows, shouldn't matter for others.

Included "Buffers" menu.  Works with existing autocommands and functions.  It
can be disabled by setting the "no_buffers_menu" variable.  (Aaron and Madsen)

Win32 supports separators in a menu: "-.*-". (Geddes)
Menu separators for Motif now work too.

Made Popup menu for Motif GUI work. (Madsen)

'M' flag in 'guioptions': Don't source the system menu.

All the menu code has been moved from gui.c to menu.c.


Viminfo improved					*improved-viminfo*
----------------

New flags for 'viminfo':
'!'	Store global variables in the viminfo file if they are in uppercase
	letters. (Negri)
'h'	Do ":nohlsearch" when loading a viminfo file.

Store search patterns in the viminfo file with their offset, magic, etc.  Also
store the flag whether 'hlsearch' highlighting is on or off (which is not used
if the 'h' flag is in 'viminfo').

Give an error message when setting 'viminfo' without commas.


Various new commands					*new-commands-5.4*
--------------------

Operator |g?|: rot13 encoding. (Negri)

|zH| and |zL| commands: Horizontal scrolling by half a page.
|gm| move cursor to middle of screen line. (Ideas by Campbell)

Operations on Visual blocks: |v_b_I|, |v_b_A|, |v_b_c|, |v_b_C|, |v_b_r|,
|v_b_<| and |v_b_>|. (Kelly)

New command: CTRL-\ CTRL-N, which does nothing in Normal mode, and goes to
Normal mode when in Insert or Command-line mode.  Can be used by VisVim or
other OLE programs to make sure Vim is in Normal mode, without causing a beep.
|CTRL-\_CTRL-N|

":cscope kill" command to use the connection filename. |:cscope| (Kahn)

|:startinsert| command: Start Insert mode next.

|:history| command, to show all four types of histories. (Roemer)

|[m|, |[M|, |]m| and |]M| commands, for jumping backward/forward to start/end
of method in a (Java) class.

":@*" executes the * register. |:@| (Acevedo)

|go| and |:goto| commands: Jump to byte offset in the file.

|gR| and |gr| command: Virtual Replace mode.  Replace characters without
changing the layout. (Webb)

":cd -" changes to the directory from before the previous ":cd" command.
|:cd-| (Webb)

Tag preview commands |:ptag|.  Shows the result of a ":tag" in a dedicated
window.  Can be used to see the context of the tag (e.g., function arguments).
(Negri)
|:pclose| command, and CTRL-W CTRL-Z: Close preview window. (Moore)
'previewheight' option, height for the preview window.
Also |:ppop|, |:ptnext|, |:ptprevious|, |:ptNext|, |:ptrewind|, |:ptlast|.

|:find| and |:sfind| commands: Find a file in 'path', (split window) and edit
it.

The |:options| command opens an option window that shows the current option
values.  Or use ":browse set" to open it.  Options are grouped by function.
Offers short help on each option.  Hit <CR> to jump to more help.  Edit the
option value and hit <CR> on a "set" line to set a new value.


Various new options					*new-options-5.4*
-------------------

Scroll-binding: 'scrollbind' and 'scrollopt' options.  Added |:syncbind|
command.  Makes windows scroll the same amount (horizontally and/or
vertically). (Ralston)

'conskey' option for MS-DOS.  Use direct console I/O.  This should work with
telnet (untested!).

'statusline' option: Configurable contents of the status line.  Also allows
showing the byte offset in the file.  Highlighting with %1* to %9*, using the
new highlight groups User1 to User9.  (Madsen)

'rulerformat' option: Configurable contents of the ruler, like 'statusline'.
(Madsen)

'write' option: When off, writing files is not allowed.  Avoids overwriting a
file even with ":w!".  The |-m| command line option resets 'write'.

'clipboard' option: How the clipboard is used.  Value "unnamed": Use unnamed
register like "*. (Cortopassi)  Value "autoselect": Like what 'a' in
'guioptions' does but works in the terminal.

'guifontset' option: Specify fonts for the +fontset feature, for the X11 GUI
versions.  Allows using normal fonts when vim is compiled with this feature.
(Nam)

'guiheadroom' option: How much room to allow above/below the GUI window.
Used for Motif, Athena and GTK.

Implemented 'tagstack' option: When off, pushing tags onto the stack is
disabled (Vi compatible).  Useful for mappings.

'shellslash' option.  Only for systems that use a backslash as a file
separator.  This option will use a forward slash in file names when expanding
it.  Useful when 'shell' is sh or csh.

'pastetoggle' option: Key sequence that toggles 'paste'.  Works around the
problem that mappings don't work in Insert mode when 'paste' is set.

'display' option: When set to "lastline", the last line fills the window,
instead of being replaced with "@" lines.  Only the last three characters are
replaced with "@@@", to indicate that the line has not finished yet.

'switchbuf' option: Allows re-using existing windows on a buffer that is being
jumped to, or split the window to open a new buffer. (Roemer)

'titleold' option.  Replaces the fixed string "Thanks for flying Vim", which
is used to set the title when exiting. (Schild)


Vim scripts						*new-script-5.4*
-----------

The |exists()| function can also check for existence of a function. (Roemer)
An internal function is now found with a binary search, should be a bit
faster. (Roemer)

New functions:
- |getwinposx()| and |getwinposy()|: get Vim window position. (Webb)
- |histnr()|, |histadd()|, |histget()| and |histdel()|: Make history
  available. (Roemer)
- |maparg()|: Returns rhs of a mapping.  Based on a patch from Vikas.
- |mapcheck()|: Check if a map name matches with an existing one.
- |visualmode()|: Return type of last Visual mode. (Webb)
- |libcall()|: Call a function in a library.  Currently only for Win32. (Negri)
- |bufwinnr()|: find window that contains the specified buffer. (Roemer)
- |bufloaded()|: Whether a buffer exists and is loaded.
- |localtime()| and |getftime()|: wall clock time and last modification time
  of a file (Webb)
- |glob()|: expand file name wildcards only.
- |system()|: get the raw output of an external command. (based on a patch
  from Aaron).
- |strtrans()|: Translate String into printable characters.  Used for
  2html.vim script.
- |append()|: easy way to append a line of text in a buffer.

Changed functions:
- Optional argument to |strftime()| to give the time in seconds. (Webb)
- |expand()| now also returns names for files that don't exist.

Allow numbers in the name of a user command. (Webb)

Use "v:" for internal Vim variables: "v:errmsg", "v:shell_error", etc.  The
ones from version 5.3 can be used without "v:" too, for backwards
compatibility.

New variables:
"v:warningmsg" and "v:statusmsg" internal variables.  Contain the last given
warning and status message. |v:warningmsg| |v:statusmsg| (Madsen)
"v:count1" variable: like "v:count", but defaults to one when no count is
used. |v:count1|

When compiling without expression evaluation, "if 1" can be used around the
not supported commands to avoid it being executed.  Works like in Vim 4.x.
Some of the runtime scripts gave errors when used with a Vim that was compiled
with minimal features.  Now "if 1" is used around code that is not always
supported.

When evaluating an expression with && and ||, skip the parts that will not
influence the outcome.  This makes it faster and avoids error messages. (Webb)
Also optimized the skipping of expressions inside an "if 0".


Avoid hit-enter prompt					*avoid-hit-enter*
-----------------------

Added 'T' flag to 'shortmess': Truncate all messages that would cause the
hit-enter prompt (unless that would happen anyway).
The 'O' flag in 'shortmess' now also applies to quickfix messages, e.g., from
the ":cn" command.

The default for 'shortmess' is now "filnxtToO", to make most messages fit on
the command line, and not cause the hit-enter prompt.

Previous messages can be viewed with the new |:messages| command.

Some messages are shown fully, even when 'shortmess' tells to shorten
messages, because the user is expected to want to see them in full: CTRL-G and
some quickfix commands.


Improved quickfix					*improved-quickfix*
-----------------

Parse change-directory lines for gmake: "make[1]: Entering directory 'name'".
Uses "%D" and "%X" in 'errorformat'.
Also parse "Making {target} in {dir}" messages from make.  Helps when not
using GNU make. (Schandl)

Use 'isfname' for "%f" in 'errorformat'.

Parsing of multi-line messages. |errorformat-multi-line|

Allow a range for the |:clist| command. (Roemer)

Support for "global" file names, for error formats that output the file name
once for several errors. (Roemer)

|:cnfile| jumps to first error in next file.

"$*" in 'makeprg' is replaced by arguments to ":make". (Roemer)


Regular expressions					*regexp-changes-5.4*
-------------------

In a regexp, a '$' before "\)" is also considered to be an end-of-line. |/$|
In patterns "^" after "\|" or "\(" is a start-of-line. |/^| (Robinson)

In a regexp, in front of "\)" and "\|" both "$" and "\$" were considered
end-of-line.  Now use "$" as end-of-line and "\$" for a literal dollar.  Same
for '^' after "\(" and "\|". |/\$| |/\^|

Some search patterns can be extremely slow, even though they are not really
illegal.  For example: "\([^a-z]\+\)\+Q".  Allow interrupting any regexp
search with CTRL-C.

Register "/: last search string (read-only). (Kohan)  Changed to use last used
search pattern (like what 'hlsearch' uses).  Can set the search pattern with
":let @/ = {expr}".

Added character classes to search patterns, to avoid the need for removing the
'l' flag from 'cpoptions': |[:tab:]|, |[:return:]|, |[:backspace:]| and
|[:escape:]|.

By adding a '?' after a comparative operator in an expression, the comparison
is done by ignoring case. |expr-==?|


Other improvements made between version 5.3 and 5.4
---------------------------------------------------

Changed							*changed-5.4*
-------

Unix: Use $TMPDIR for temporary files, if it is set and exists.

Removed "Empty buffer" message.  It isn't useful and can cause a hit-enter
prompt. (Negri)

"ex -" now reads commands from stdin and works in silent mode.  This is to be
compatible with the original "ex" command that is used for scripts.

Default range for ":tcldo" is the whole file.

Cancelling Visual mode with ESC moved the cursor.  There appears to be no
reason for this.  Now leave the cursor where it is.

The ":grep" and ":make" commands see " as part of the arguments, instead of
the start of a comment.

In expressions the "=~" and "!~" operators no longer are affected by
'ignorecase'.

Renamed vimrc_example to vimrc_example.vim and gvimrc_example to
gvimrc_example.vim.  Makes them being recognized as vim scripts.

"gd" no longer starts searching at the end of the previous function, but at
the first blank line above the start of the current function.  Avoids that
using "gd" in the first function finds global a variable.

Default for 'complete' changed from ".,b" to ".,w,b,u,t,i".  Many more matches
will be found, at the cost of time (the search can be interrupted).

It is no longer possible to set 'shell*' options from a modeline.  Previously
only a warning message was given.  This reduces security risks.

The ordering of the index of documentation files was changed to make it more
easy to find a subject.

On MS-DOS and win32, when $VIM was not set, $HOME was used.  This caused
trouble if $HOME was set to e.g., "C:\" for some other tool, the runtime files
would not be found.  Now use $HOME only for _vimrc, _gvimrc, etc., not to find
the runtime file.

When 'tags' is "./{fname}" and there is no file name for the current buffer,
just use it.  Previously it was skipped, causing "vim -t {tag}" not to find
many tags.

When trying to select text in the 'scrolloff' area by mouse dragging, the
resulting scrolling made this difficult.  Now 'scrolloff' is temporarily set
to 0 or 1 to avoid this.  But still allow scrolling in the top line to extend
to above the displayed text.

Default for 'comments' now includes "sl:/*,mb: *,ex:*/", to make javadoc
comments work.  Also helps for C comments that start with "/*******".

CTRL-X CTRL-] Insert mode tag expansion tried to expand to all tags when used
after a non-ID character, which can take a very long time.  Now limit this to
200 matches.  Also used for command-line tag completion.

The OS/2 distribution has been split in two files.  It was too big to fit on a
floppy.  The same runtime archive as for the PC is now used.

In the documentation, items like <a-z> have been replaced with {a-z} for
non-optional arguments.  This avoids confusion with key names: <C-Z> is a
CTRL-Z, not a character between C and Z, that is {C-Z}.


Added							*added-5.4*
-----

Color support for the iris-ansi builtin termcap entry. (Tubman)

Included VisVim version 1.3a. (Erhardt)

Win32 port for SNiFF+ interface. (Leherbauer)
Documentation file for sniff interface: if_sniff.txt. (Leherbauer)

Included the "SendToVim" and "OpenWithVim" programs in the OleVim directory.
To be used with the OLE version of gvim under MS-Windows. (Schaller)

Included Exuberant Ctags version 3.2.4 with Eiffel support. (Hiebert)

When a file that is being edited is deleted, give a warning (like when the
time stamp changed).

Included newer versions of the HTML-generating Awk and Perl scripts. (Colombo)

Linux console mouse support through "gpm". (Tsindlekht)

Security fix: Disallow changing 'secure' and 'exrc' from a modeline.  When
'secure' is set, give a warning for changing options that contain a program
name.

Made the Perl interface work with Perl 5.005 and threads. (Verdoolaege)

When giving an error message for an ambiguous mapping, include the offending
mapping. (Roemer)

Command line editing:
- Command line completion of mappings. (Roemer)
- Command line completion for ":function", ":delfunction", ":let", ":call",
  ":if", etc. (Roemer)
- When using CTRL-D completion for user commands that have
  "-complete=tag_listfiles" also list the file names.  (Madsen)
- Complete the arguments of the ":command" command. (Webb)
- CTRL-R . in command line inserts last inserted text.  CTRL-F, CTRL-P, CTRL-W
  and CTRL-A after CTRL-R are used to insert an object from under the cursor.
  (Madsen)

Made the text in uganda.txt about copying Vim a bit more clear.

Updated the Vim tutor.  Added the "vimtutor" command, which copies the tutor
and starts Vim on it.  "make install" now also copies the tutor.

In the output of ":clist" the current entry is highlighted, with the 'i'
highlighting (same as used for 'incsearch').

For the ":clist" command, you can scroll backwards with "b" (one screenful),
"u" (half a screenful) and "k" (one line).

Multi-byte support:
- X-input method for multi-byte characters.  And various fixes for multi-byte
  support. (Nam)
- Hangul input method feature: |hangul|. (Nam)
- Cleaned up configuration of multi-byte support, XIM, fontset and Hangul
  input.  Each is now configurable separately.
- Changed check for GTK_KEYBOARD to HANGUL_KEYBOARD_TYPE. (Nam)
- Added doc/hangulin.txt: Documentation for the Hangul input code. (Nam)
- XIM support for GTK+. (Nam)
- First attempt to include support for SJIS encoding. (Nagano)
- When a double-byte character doesn't fit at the end of the line, put a "~"
  there and print it on the next line.
- Optimize output of multi-byte text. (Park)
- Win32 IME: preedit style is like over-the-spot. (Nagano)
- Win32 IME: IME mode change now done with ImmSetOpenStatus. (Nagano)
- GUI Athena: file selection dialog can display multi-byte characters.
  (Nagano)
- Selection reply for XA_TEXT as XA_STRING. (Nagano)

"runtime/macros/diffwin.vim".  Mappings to make a diff window. (Campbell)

Added ".obj" to the 'suffixes' option.

Reduced size of syntax/synload.vim by using the ":SynAu" user command.
Automated numbering of Syntax menu entries in menu.vim.
In the Syntax menu, insert separators between syntax names that start with
a different letter. (Geddes)

Xterm:
- Clipboard support when using the mouse in an xterm. (Madsen)
- When using the xterm mouse, track dragging of the mouse.  Use xterm escape
  sequences when possible.  It is more precise than other methods, but
  requires a fairly recent xterm version.  It is enabled with "xterm2" in
  'ttymouse'.  (Madsen)
- Check xterm patch level, to set the value of 'ttymouse'.  Has only been
  added to xterm recently (patch level > 95).  Uses the new 't_RV' termcap
  option.  Set 'ttymouse' to "xterm2" when a correct response is recognized.
  Will make xterm mouse dragging work better.
- Support for shifted function keys on xterm.  Changed codes for shifted
  cursor keys to what the xterm actually produces.  Added codes for shifted
  <End> and <Home>.
- Added 't_WP' to set the window position in pixels and 't_WS' to set the
  window size in characters.  Xterm can now move (used for ":winpos") and
  resize (use for ":set lines=" and ":set columns=").

X11:
- When in Visual mode but not owning the selection, display the Visual area
  with the VisualNOS group to show this. (Madsen)
- Support for requesting the type of clipboard support.  Used for AIX and
  dtterm. (Wittig)
- Support compound_text selection (even when compiled without multi-byte).

Swap file:
- New variation for naming swap files: Replace path separators into %, place
  all swap files in one directory.  Used when a name in 'dir' ends in two path
  separators. (Madsen)
- When a swap file is found, show whether it contains modifications or not in
  the informative message. (Madsen)
- When dialogs are supported, use a dialog to ask the user what to do when a
  swapfile already exists.

"popup_setpos" in 'mousemodel' option.  Allows for moving the cursor when
using the right mouse button.

When a buffer is deleted, the selection for which buffer to display instead
now uses the most recent entry from the jump list. (Madsen)

When using CTRL-O/CTRL-I, skip deleted buffers.

A percentage is shown in the ruler, when there is room.

Used autoconf 1.13 to generate configure.

Included get_lisp_indent() from Dirk van Deun.  Does better Lisp indenting
when 'p' flag in 'cpoptions' is not included.

Made the 2html.vim script quite a bit faster.  (based on ideas from Geddes)

Unix:
- Included the name of the user that compiled Vim and the system name it was
  compiled on in the version message.
- "make install" now also installs the "tools" directory.  Makes them
  available for everybody.
- "make check" now does the same as "make test".  "make test" checks for
  Visual block mode shift, insert, replace and change.
- Speed up comparing a file name with existing buffers by storing the
  device/inode number with the buffer.
- Added configure arguments "--disable-gtk", "--disable-motif" and
  "--disable-athena", to be able to disable a specific GUI (when it doesn't
  work).
- Renamed the configure arguments for disabling the check for specific GUIs.
  Should be clearer now. (Kahn)
- On a Digital Unix system ("OSF1") check for the curses library before
  termlib and termcap. (Schild)
- "make uninstall_runtime" will only delete the version-specific files.  Can
  be used to delete the runtime files of a previous version.

Macintosh: (St-Amant)
- Dragging the scrollbar, like it's done for the Win32 GUI.  Moved common code
  from gui_w32.c to gui.c
- Added dialogs and file browsing.
- Resource fork preserved, warning when it will be lost.
- Copy original file attributes to newly written file.
- Set title/notitle bug solved.
- Filename completion improved.
- Grow box limit resize to a char by char size.
- Use of rgb.txt for more colors (but give back bad color).
- Apple menu works (beside the about...).
- Internal border now vim compliant.
- Removing a menu doesn't crash anymore.
- Weak-linking of Python 1.5.1 (only on PPC).  Python is supported when the
  library is available.
- If an error is encountered when sourcing the users .vimrc, the alert box now
  shows right away with the OK button defaulted.  There's no more "Delete"-key
  sign at the start of each line
- Better management of environment variables.  Now $VIM is calculated only
  once, not regenerated every time it is used.
- No more CPU hog when in background.
- In a sourced Vim script the Mac file format can be recognized, just like DOS
  file format is.

When both "unix" and "mac" are present in 'fileformats', prefer "mac" format
when there are more CR than NL characters.
When using "mac" fileformat, use CR instead of a NL, because NL is used for
NUL.  Will preserve all characters in a file. (Madsen)

The DOS install.exe now contains checks for an existing installation.  It
avoids setting $VIM and $PATH again.
The install program for Dos/Windows can now install Vim in the popup menu, by
adding two registry keys.

Port to EGCS/mingw32.  New Makefile.ming. (Aaron)

DOS 16 bit: Don't include cursor shape stuff.  Save some bytes.

TCL support to Makefile.w32. (Duperval)

OS/2: Use argv[0] to find runtime files.

When using "gf" to go to a buffer that has already been used, jump to the
line where the cursor last was.

Colored the output of ":tselect" a bit more.  Different highlighting between
tag name and file name.  Highlight field name ("struct:") separately from
argument.

Backtick expansion for non-Unix systems.  Based on a patch from Aaron.
Allows the use of things like ":n `grep -l test *.c`" and
"echo expand('`ls m*`')".

Check for the 'complete' option when it is set. (Acevedo)
'd' flag in 'complete' searches for defined names or macros.
While searching for Insert mode completions in include files and tags files,
check for typeahead, so that you can use matches early. (Webb)
The '.' flag in 'complete' now scans the current buffer completely, ignoring
'nowrapscan'.  (Webb)

Added '~' flag to 'whichwrap'. (Acevedo)

When ending the Visual mode (e.g., with ESC) don't grab ownership of the
selection.

In a color terminal, "fg" and "bg" can be used as color names.  They stand for
the "Normal" colors.

A few cscope cleanups. (Kahn)

Included changed vimspell.sh from Schemenauer.

Concatenation of strings in an expression with "." is a bit faster. (Roemer)

The ":redir" command can now redirect to a register: ":redir @r". (Roemer)

Made the output of ":marks" and ":jumps" look similar.  When the mark is in
the current file, show the text at the mark.  Also for ":tags".

When configure finds ftello() and fseeko(), they are used in tag.c (for when
you have extremely big tags files).

Configure check for "-FOlimit,2000" argument for the compiler. (Borsenkow)

GUI:
- When using ":gui" in a non-GUI Vim, give a clear error message.
- "gvim -v" doesn't start the GUI (if console support is present).
- When in Ex mode, use non-Visual selection for the whole screen.
- When starting with "gvim -f" and using ":gui" in the .gvimrc file, Vim
  forked anyway.  Now the "-f" flag is remembered for ":gui".  Added "gui -b"
  to run gvim in the background anyway.

Motif GUI:
- Check for "-lXp" library in configure (but it doesn't work yet...).
- Let configure check for Lesstif in "/usr/local/Lesstif/Motif*".  Changed the
  order to let a local Motif version override a system standard version.

Win32 GUI:
- When using "-register" or "-unregister" in the non-OLE version, give an
  error message.
- Use GTK toolbar icons.  Make window border look better.  Use sizing handles
  on the lower left&right corners of the window. (Negri)
- When starting an external command with ":!start" and the command can not be
  executed, give an error message. (Webb)
- Use sizing handles for the grey rectangles below the scrollbars.  Can draw
  toolbar in flat mode now, looks better. (Negri)
- Preparations for MS-Windows 3.1 addition.  Mostly changing WIN32 to MSWIN
  and USE_GUI_WIN32 to USE_GUI_MSWIN. (Negri)

Avoid allocating the same string four times in buflist_findpat(). (Williams)

Set title and icon text with termcap options 't_ts', 't_fs', 't_IS' and
't_IE'.  Allows doing this on any terminal that supports setting the title
and/or icon text. (Schild)

New 'x' flag in 'comments': Automatically insert the end part when its last
character is typed.  Helps to close a /* */ comment in C. (Webb)

When expand() has a second argument which is non-zero, don't use 'suffixes'
and 'wildignore', return all matches.

'O' flag in 'cpoptions: When not included, Vim will not overwrite a file, if
it didn't exist when editing started but it does exist when the buffer is
written to the file.  The file must have been created outside of Vim, possibly
without the user knowing it.  When this is detected after a shell command,
give a warning message.

When editing a new file, CTRL-G will show [New file].  When there were errors
while reading the file, CTRL-G will show [Read errors].

":wall" can now use a dialog and file-browsing when needed.

Grouped functionality into new features, mainly to reduce the size of the
minimal version:
+linebreak:	'showbreak', 'breakat' and 'linebreak'
+visualextra:	"I"nsert and "A"ppend in Visual block mode, "c"hange all lines
		in a block, ">" and "<": Shifting a block, "r": Replacing a
		Visual area with one character.
+comments:	'comments'
+cmdline_info:	'ruler' and 'showcmd'.  Replaces +showcmd.
"+title"	Don't add code to set title or icon for MSDOS, this was not
		possible anyway.
+cmdline_compl	Disable commandline completion at compile time, except for
		files, directories and help items.

Moved features from a list of function calls into an array.  Should save a bit
of space.

While entering the body of a function, adjust indent according to "if" and
"while" commands.

VMS: Adjusted os_vms.mms a bit according to suggestions from Arpadffy.

The flags in the 'comments' option can now include an offset.  This makes it
possible to align "/*****", "/*   xxx" and "/*" comments with the same
'comments' setting.  The default value for 'comments' uses this.
Added 'O' flag: Don't use this part for the "O" command.  Useful for "set
com=sO:*\ -,mO:*\ \ ,exO:*/"

FileType autocommands recognize ".bak", ".orig" and "~" extensions and remove
them to find the relevant extension.

The tutorial for writing a Vim script file has been extended.

Some more highlighting in help files, for items that are not typed literally.

Can use "CTRL-W CTRL-G" like "CTRL-W g".

"make test" for OS/2.

Adjusted configure to automatically use the GUI for BeOS.


Fixed							*fixed-5.4*
-----

5.3.1: When using an autocommand for BufWritePre that changes the name of the
buffer, freed memory would be used. (Geddes)

Mac: Compiler didn't understand start of skip_class_name().

Win32 GUI:
- When cancelling the font requester, don't give an error message.
- When a tearoff-menu is open and its menu is deleted, Vim could crash.
  (Negri)
- There was a problem on Windows 95 with (un)maximizing the window.
  (Williams)
- when 'mousehide' is set, the mouse would stay hidden when a menu is dropped
  with the keyboard. (Ralston)
- The tempname() function already created the file.  Caused problems when
  using ":w".  Now the file is deleted.
- Cursor disappeared when ending up in the top-left character on the screen
  after scrolling. (Webb)
- When adding a submenu for a torn-off menu, it was not updated.
- Menu tooltip was using the toolbar tooltip. (Negri)
- Setting 'notitle' didn't remove the title. (Steed)
- Using ":!start cmd" scrolled the screen one line up, and didn't wait for
  return when the command wasn't found.

Cscope interface: Sorting of matches was wrong.  Starting the interface could
fail. (Kahn)

Motif GUI: Could not compile with Motif 1.1, because some tear-off
functionality was not in #ifdefs.

Configure could sometimes not compile or link the test program for sizeof(int)
properly.  This caused alignment problems for the undo structure allocations.
Added a safety check that SIZEOF_INT is not zero.

Added configure check to test if strings.h can be included after string.h.
Some systems can't handle it.
Some systems need both string.h and strings.h included.  Adjusted vim.h for
that.  Removed including string.h from os_unixx.h, since it's already in
vim.h. (Savage)
AIX: defining _NO_PROTO in os_unix.h causes a conflict between string.h and
strings.h, but after the configure check said it was OK.  Also define
_NO_PROTO for AIX in the configure check. (Winn)

When closing a window with CTRL-W c, the value of 'hidden' was not taken into
account, the buffer was always unloaded. (Negri)

Unix Makefile: "make install" always tried to rename an older executable and
remove it.  This caused an error message when it didn't exit.  Added a check
for the existence of an old executable.
The command line for "make install" could get too long, because of the many
syntax files.  Now first do a "cd" to reduce the length.

On RISCOS and MSDOS, reading a file could fail, because the short filename was
used, which can be wrong after a ":!cd".

In the DOS versions, the wrong install.exe was included (required Windows).
Now the install.exe version is included that is the same as the Vim version.
This also supports long file names where possible.

When recording, and stopping while in Insert mode with CTRL-O q, the CTRL-O
would also be recorded.

32bit DOS version: "vim \file", while in a subdirectory, resulted in "new
file" for "file" in the local directory, while "\file" did exist.  When
"file" in the current directory existed, this didn't happen.

MSDOS: Mouse could not go beyond 80 columns in 132 columns mode. (Young)

"make test" failed in the RedHat RPM, because compatible is off by default.

In Insert mode <C-O><C-W><C-W> changes to other window, but the status bars
were not updated until another character was typed.

MSDOS: environment options in lowercase didn't work, although they did in the
Win32 versions. (Negri)

After ":nohlsearch", a tag command switched highlighting back on.

When using "append" command as the last line in an autocommand, Vim would
crash.

RISCOS: The scroll bumpers (?) were not working properly. (Leonard)

"zl" and "zh" could move the cursor, but this didn't set the column in which
e.g., "k" would move the cursor.

When doing ":set all&" the value of 'scroll' was not set correctly.  This
caused an error message when later setting any other number option.

When 'hlsearch' highlighting has been disabled with ":nohlsearch",
incremental searching would switch it back on too early.

When listing tags for ":tselect", and using a non-search command, and the last
character was equal to the first (e.g., "99"), the last char would not be
shown.

When searching for tags with ":tag" Vim would assume that all matches had been
found when there were still more (e.g. from another tags file).

Win32: Didn't recognize "c:\" (e.g., in tags file) as absolute path when
upper/lowercase was different.

Some xterms (Debian) send <Esc>OH for HOME and <Esc>OF for END.  Added these
to the builtin-xterm.

In ex mode, any CR was seen as the end of the line.  Only a NL should be
handled that way.  broke ":s/foo/some^Mtext/".

In menu.vim, a vmenu was used to override an amenu.  That didn't work, because
the system menu file doesn't overwrite existing menus.  Added explicit vunmenu
to solve this.

Configure check for terminal library could find a library that doesn't work at
runtime (Solaris: shared library not found).  Added a check that a program
with tgoto() can run correctly.

Unix: "echo -n" in the Makefile doesn't work on all systems, causing errors
compiling pathdef.c.  Replaced it with "tr".

Perl: DO_JOIN was redefined by Perl.  Undefined it in the perl files.

Various XIM and multi-byte fixes:
- Fix user cannot see his language while he is typing his language with
  off-the-spot method. (Nagano)
- Fix preedit position using text/edit area (using gui.wid). (Nagano)
- remove 'fix dead key' codes.  It was needed since XNFocusWindow was
  "x11_window", XNFocusWindow is now gui.wid. (Nagano)
- Remove some compile warnings and fix typos. (Namsh)
- For status area, check the gtk+ version while Vim runs.  I believe it is
  better than compile time check. (Namsh)
- Remove one FIXME for gtk+-xim. (Namsh)
- XIM: Dead keys didn't work for Czech. (Vyskovsky)
- Multibyte: If user input only 3byte such as mb1_mb2_eng or eng_mb1_mb2 VIM
  could convert it to special character. (Nam)
- Athena/Motif with XIM: fix preedit area. (Nam)
- XIM: Composed strings were sometimes ignored.  Vim crashed when compose
  string was longer than 256 bytes.  IM's geometry control is fixed. (Nam,
  Nagano)
- Win32 multi-byte: hollowed cursor width on a double byte char was wrong.
  (Nagano)
- When there is no GUI, selecting XIM caused compilation problems.
  Automatically disable XIM when there is no GUI in configure.
- Motif and Athena: When compiled with XIM, but the input method was not
  enabled, there would still be a status line.  Now the status line is gone if
  the input method doesn't work. (Nam)

Win32: tooltip was not removed when selecting a parent menu (it was when
selecting a menu entry). (Negri)

Unix with X: Some systems crash on exit, because of the XtCloseDisplay() call.
Removed it, it should not be necessary when exiting.

Win32: Crash on keypress when compiled with Borland C++. (Aaron)

When checking for Motif library files, prefer the same location as the include
files (with "include" replaced with "lib") above another entry.

Athena GUI: Changed "XtOffset()" in gui_at_fs.c to "XtOffsetOf()", like it's
used in gui_x11.c.

Win32: When testing for a timestamp of a file on floppy, would get a dialog
box when the floppy has been removed.  Now return with an error.  (Negri)

Win32 OLE: When forced to come to the foreground, a minimized window was still
minimized, now it's restored. (Zivkov)

There was no check for a positive 'shiftwidth'.  A negative value could cause
a hangup, a zero value a crash.

Athena GUI: horizontal scrollbar wasn't updated correctly when clicking right
or left of the thumb.

When making a Visual-block selection in one window, and trying to scroll
another, could cause errors for accessing non-existent line numbers.

When 'matchpairs' contains "`:'", jumping from the ` to the ' didn't work
properly.

Changed '\"' to '"' to make it compatible with old C compilers.

The command line expansion for mappings caused a script with a TAB between lhs
and rhs of a map command to fail.  Assume the TAB is to separate lhs and rhs
when there are no mappings to expand.

When editing a file with very long lines with 'scrolloff' set, "j" would
sometimes end up in a line which wasn't displayed.

When editing a read-only file, it was completely read into memory, even when
it would not fit.  Now create a swap file for a read-only file when running
out of memory while reading the file.

When using ":set cino={s,e-s", a line after "} else {" was not indented
properly.  Also added a check for this in test3.in.

The Hebrew mapping for the command line was remembered for the next command
line.  That isn't very useful, a command is not Hebrew. (Kol)

When completing file names with embedded spaces, like "Program\ files", this
didn't work.  Also for user commands.  Moved backslash_halve() down to
mch_expandpath().

When using "set mouse=a" in Ex mode, mouse events were handled like typed
text.  Then typing "quit" screwed up the mouse behavior of the xterm.

When repeating an insert with "." that contains a CTRL-Y, a number 5 was
inserted as "053".

Yanking a Visual area, with the cursor past the line, didn't move the cursor
back onto the line.  Same for "~", "u", "U" and "g?"

Win32: Default for 'grepprg' could be "findstr /n" even though there is no
findstr.exe (Windows 95).  Check if it exists, and fall back to "grep -n" if
it doesn't.

Because gui_mouse_moved() inserted a leftmouse click in the input buffer,
remapping a leftmouse click caused strange effects.  Now Insert another code
in the input buffer.  Also insert a leftmouse release, to avoid the problem
with ":map <LeftMouse> l" that the next release is seen as the release for the
focus click.

With 'wrap' on, when using a line that doesn't fit on the screen, if the start
of the Visual area is before the start of the screen, there was no
highlighting.  Also, 'showbreak' doesn't work properly.

DOS, Win32: A pattern "[0-9]\+" didn't work in autocommands.

When creating a swap file for a buffer which isn't the current buffer, could
get a mixup of short file name, resulting in a long file name when a short
file name was required.  makeswapname() was calling modname() instead of
buf_modname().

When a function caused an error, and the error message was very long because
of recursiveness, this would cause a crash.

'suffixes' were always compared with matching case.  For MS-DOS, Win32 and
OS/2 case is now ignored.

The use of CHARBITS in regexp.c didn't work on some Linux.  Don't use it.

When generating a script file, 'cpo' was made empty.  This caused backslashes
to disappear from mappings.  Set it to "B" to avoid that.

Lots of typos in the documentation. (Campbell)

When editing an existing (hidden) buffer, jump to the last used cursor
position. (Madsen)

On a Sun the xterm screen was not restored properly when suspending. (Madsen)

When $VIMINIT is processed, 'nocompatible' was only set after processing it.

Unix: Polling for a character wasn't done for GPM, Sniff and Xterm clipboard
all together.  Cleaned up the code for using select() too.

When executing external commands from the GUI, some typeahead was lost.  Added
some code to regain as much typeahead as possible.

When the window height is 5 lines or fewer, <PageDown> didn't use a one-line
overlap, while <PageUp> does.  Made sure that <PageUp> uses the same overlap
as <PageDown>, so that using them both always displays the same lines.

Removed a few unused functions and variables (found with lint).

Dictionary completion didn't use 'infercase'. (Raul)

Configure tests failed when the Perl library was not in LD_LIBRARY_PATH.
Don't use the Perl library for configure tests, add it to the linker line only
when linking Vim.

When using ncurses/terminfo, could get a 't_Sf' and 't_Sb' termcap entry that
has "%d" instead of "%p1%d".  The light background colors didn't work then.

GTK GUI with ncurses: Crashed when starting up in tputs().  Don't use tputs()
when the GUI is active.

Could use the ":let" command to set the "count", "shell_error" and "version"
variables, but that didn't work.  Give an error message when trying to set
them.

On FreeBSD 3.0, tclsh is called tclsh8.0.  Adjusted configure.in to find it.

When Vim is linked with -lncurses, but python uses -ltermcap, this causes
trouble: "OOPS".  Configure now removes the -ltermcap.

:@" and :*" didn't work properly, because the " was recognized as the start of
a comment.

Win32s GUI: Minimizing the console where a filter command runs in caused
trouble for detecting that the filter command has finished. (Negri)

After executing a filter command from an xterm, the mouse would be disabled.
It would work again after changing the mode.

Mac GUI: Crashed in newenv(). (St-Amant)

The menus and mappings in mswin.vim didn't handle text ending in a NL
correctly. (Acevedo)

The ":k" command didn't check if it had a valid argument or extra characters.
Now give a meaningful error message. (Webb)

On SGI, the signal function doesn't always have three arguments.  Check for
struct sigcontext to find out.  Might still be wrong...

Could crash when using 'hlsearch' and search pattern is "^".

When search patterns were saved and restored, status of no_hlsearch was not
also saved and restored (from ":nohlsearch" command).

When using setline() to make a line shorter, the cursor position was not
adjusted.

MS-DOS and Win95: When trying to edit a file and accidentally adding a slash
or backslash at the end, the file was deleted.  Probably when trying to create
the swap file.  Explicitly check for a trailing slash or backslash before
trying to read a file.

X11 GUI: When starting the GUI failed and received a deadly signal while
setting the title, would lock up when trying to exit, because the title is
reset again.  Avoid using mch_settitle() recursively.

X11 GUI: When starting the GUI fails, and then trying it again, would crash,
because argv[] has been freed and x11_display was reset to NULL.

Win32: When $HOME was set, would put "~user" in the swap file, which would
never compare with a file name, and never cause the attention message.  Put
the full path in the swap file instead.

Win32 console: There were funny characters at the end of the "vim -r" swap
files message (direct output of CR CR LF).

DOS 32 bit: "vim -r" put the text at the top of the window.

GUI: With 'mousefocus' set, got mouse codes as text with "!sleep 100" or "Q".

Motif and Win32 GUI: When changing 'guifont' to a font of the same size the
screen wasn't redrawn.

Unix: When using ":make", jumping to a file b.c, which is already open as a
symbolic link a.c, opened a new buffer instead of using the existing one.

Inserting text in the current buffer while sourcing the .vimrc file would
cause a crash or hang.  The memfile for the current buffer was never
allocated.  Now it's allocated as soon as something is written in the buffer.

DOS 32 bit: "lightblue" background worked for text, but not drawn parts were
black.

DOS: Colors of console were not restored upon exiting.

When recording, with 'cmdheight' set to 2 and typing Esc> in Insert mode
caused the "recording" message to be doubled.

Spurious "file changed" messages could happen on Windows.  Now tolerate a one
second difference, like for Linux.

GUI: When returning from Ex mode, scrollbars were not updated.

Win32: Copying text to the clipboard containing a <CR>, pasting it would
replace it with a <NL> and drop the next character.

Entering a double byte character didn't work if the second byte is in [xXoO].
(Eric Lee)

vim_realloc was both defined and had a prototype in proto/misc2.pro.  Caused
conflicts on Solaris.

A pattern in an autocommand was treated differently on DOS et al. than on
Unix.  Now it's the same, also when using backslashes.

When using <Tab> twice for command line completion, without a match, the <Tab>
would be inserted. (Negri)

Bug in MS-Visual C++ 6.0 when compiling ex_docmd.c with optimization. (Negri)

Testing the result of mktemp() for failure was wrong.  Could cause a crash.
(Peters)

GUI: When checking for a ".gvimrc" file in the current directory, didn't check
for a "_gvimrc" file too.

Motif GUI: When using the popup menu and then adding an item to the menu bar,
the menu bar would get very high.

Mouse clicks and special keys (e.g. cursor keys) quit the more prompt and
dialogs.  Now they are ignored.

When at the more-prompt, xterm selection didn't work.  Now use the 'r' flag in
'mouse' also for the more-prompt.

When selecting a Visual area of more than 1023 lines, with 'guioptions' set to
"a", could mess up the display because of a message in free_yank().  Removed
that message, except for the Amiga.

Moved auto-selection from ui_write() to the screen update functions.  Avoids
unexpected behavior from a low-level function.  Also makes the different
feedback of owning the selection possible.

Vi incompatibility: Using "i<CR>" in an indent, with 'ai' set, used the
original indent instead of truncating it at the cursor. (Webb)

":echo x" didn't stop at "q" for the more prompt.

Various fixes for Macintosh. (St-Amant)

When using 'selectmode' set to "exclusive", selecting a word and then using
CTRL-] included the character under the cursor.

Using ":let a:name" in a function caused a crash. (Webb)

When using ":append", an empty line didn't scroll up.

DOS etc.: A file name starting with '!' didn't work.  Added '!' to default for
'isfname'.

BeOS: Compilation problem with prototype of skip_class_name(). (Price)

When deleting more than one line, e.g., with "de", could still use "U"
command, which didn't work properly then.

Amiga: Could not compile ex_docmd.c, it was getting too big.  Moved some
functions to ex_cmds.c.

The expand() function would add a trailing slash for directories.

Didn't give an error message when trying to assign a value to an argument of a
function.  (Webb)

Moved including sys/ptem.h to after termios.h.  Needed for Sinix.

OLE interface: Don't delete the object in CVimCF::Release() when the reference
count becomes zero. (Cordell)
VisVim could still crash on exit. (Erhardt)

"case a: case b:" (two case statements in one line) aligned with the second
case.  Now it uses one 'sw' for indent. (Webb)

Font initialisation wasn't right for Athena/Motif GUI.  Moved the call to
highlight_gui_started() gui_mch_init() to gui_mch_open(). (Nam)

In Replace mode, backspacing over a TAB before where the replace mode started
while 'sts' is different from 'ts', would delete the TAB.

Win32 console: When executing external commands and switching between the two
console screens, Vim would copy the text between the buffers.  That caused the
screen to be messed up for backtick expansion.

":winpos -1" then ":winpos" gave wrong error message.

Windows commander creates files called c:\tmp\$wc\abc.txt.  Don't remove the
backslash before the $.  Environment variables were not expanded anyway,
because of the backslash before the dollar.

Using "-=" with ":set" could remove half a part when it contains a "\,".
E.g., ":set path+=a\\,b" and then "set path-=b"  removed ",b".

When Visually selecting lines, with 'selection' set to "inclusive", including
the last char of the line, "<<" moved an extra line.  Also for other operators
that always work on lines.

link.sh changed "-lnsl_s" to "_s" when looking for "nsl" to be removed.
Now it only remove whole words.

When jumped to a mark or using "fz", and there is an error, the current column
was lost.  E.g. when using "$fzj".

The "g CTRL-G" command could not be interrupted, even though it can take a
long time.

Some terminals do have <F4> and <xF4>.  <xF4> was always interpreted as <F4>.
Now map <xF4> to <F4>, so that the user can override this.

When compiling os_win32.c with MIN_FEAT the apply_autocmds() should not be
used. (Aaron)

This autocommand looped forever: ":au FileChangedShell * nested e <afile>"
Now FileChangeShell never nests. (Roemer)

When evaluating an ":elseif" that was not going to matter anyway, ignore
errors. (Roemer)

GUI Lesstif: Tearoff bar was the last item, instead of the first.

GUI Motif: Colors of tear-off widgets was wrong when 't' flag added to
'guioptions' afterwards.  When 't' flag in 'guioptions' is excluded, would
still get a tearoff item in a new menu.

An inode number can be "long long".  Use ino_t instead of long.  Added
configure check for ino_t.

Binary search for tags was using a file offset "long" instead of "off_t".

Insert mode completion of tags was not using 'ignorecase' properly.

In Insert mode, the <xFn> keys were not properly mapped to <Fn> for the
default mappings.  Also caused errors for ":mkvimrc" and ":mksession".

When jumping to another window while in Insert mode, would get the "warning:
changing readonly file" even when not making a change.

A '(' or '{' inside a trailing "//" comment would disturb C-indenting.
When using two labels below each other, the second one was not indented
properly.  Comments could mess up C-indenting in many places.  (Roemer)

Could delete or redefine a function while it was being used.  Could cause a
crash.
In a function it's logical to prepend "g:" to a system variable, but this
didn't work. (Roemer)

Hangul input: Buffer would overflow when user inputs invalid key sequence.
(Nam)

When BufLoad or BufEnter autocommands change the topline of the buffer in the
window, it was overruled and the cursor put halfway the window.  Now only put
the cursor halfway if the autocommands didn't change the topline.

Calling exists("&option") always returned 1. (Roemer)

Win32: Didn't take actually available memory into account. (Williams)

White space after an automatically inserted comment leader was not removed
when 'ai' is not set and <CR> hit just after inserting it. (Webb)

A few menus had duplicated accelerators. (Roemer)

Spelling errors in documentation, quite a few "the the". (Roemer)

Missing prototypes for Macintosh. (Kielhorn)

Win32: When using 'shellquote' or 'shellxquote', the "!start cmd" wasn't
executed in a disconnected process.

When resizing the window, causing a line before the cursor to wrap or unwrap,
the cursor was displayed in the wrong position.

There was quite a bit of dead code when compiling with minimal features.

When doing a ":%s///" command that makes lines shorter, such that lines above
the final cursor position no longer wrap, the cursor position was not updated.

get_id_list() could allocate an array one too small, when a "contains=" item
has a wildcard that matches a group name that is added just after it.  E.g.:
"contains=a.*b,axb".  Give an error message for it.

When yanking a Visual area and using the middle mouse button -> crash.  When
clipboard doesn't work, now make "* always use "".

Win32: Using ":buf a\ b\file" didn't work, it was interpreted as "ab\file".

Using ":ts ident", then hit <CR>, with 'cmdheight' set to 2: command line was
not cleared, the tselect prompt was on the last but one line.

mksession didn't restore the cursor column properly when it was after a tab.
Could not get all windows back when using a smaller terminal screen.  Didn't
restore all windows when "winsize" was not in 'sessionoptions'. (Webb)

Command line completion for ":buffer" depended on 'ignorecase' for Unix, but
not for DOS et al..  Now don't use 'ignorecase', but let it depend on whether
file names are case sensitive or not (like when expanding file names).

Win32 GUI: (Negri)
- Redrawing the background caused flicker when resizing the window.  Removed
  _OnEraseBG().  Removed CS_HREDRAW and CS_VREDRAW flags from the
  sndclass.style.
- Some parts of the window were drawn in grey, instead of using the color from
  the user color scheme.
- Dropping a file on gvim didn't activate the window.
- When there is no menu ('guioptions' excludes 'm'), never use the ALT key for
  it.

GUI: When resizing the window, would make the window height a bit smaller.
Now round off to the nearest char cell size. (Negri)

In Vi the ")" and "(" commands don't stop at a single space after a dot.
Added 'J' flag in 'cpoptions' to make this behave Vi compatible. (Roemer)

When saving a session without any buffers loaded, there would be a ":normal"
command without arguments in it. (Webb)

Memory leaks fixed: (Madsen)
- eval.c: forgot to release func structure when func deleted
- ex_docmd.c: forgot to release string after "<sfile>"
- misc1.c: leak when completion pattern had no matches.
- os_unix.c: forgot to release regexp after file completions

Could crash when using a buffer without a name. (Madsen)
Could crash when doing file name completion, because of backslash_halve().
(Madsen)

":@a" would do mappings on register a, which is not Vi compatible. (Roemer)

":g/foo.*()/s/foobar/_&/gc" worked fine, but then "n" searched for "foobar"
and displayed "/foo.*()". (Roemer)

OS/2: get_cmd_output() was not included.  Didn't check for $VIM/.vimrc file.

Command line completion of options didn't work after "+=" and "-=".

Unix configure: Test for memmove()/bcopy()/memcpy() tried redefining these
functions, which could fail if they are defined already.  Use mch_memmove() to
redefine.

Unix: ":let a = expand("`xterm`&")" started an xterm asynchronously, but
":let a = expand("`xterm&`")" generated an error message, because the
redirection was put after the '&'.

Win32 GUI: Dialog buttons could not be selected properly with cursor keys,
when the default is not the first button. (Webb)

The "File has changed since editing started" (when regaining focus) could not
always be seen. (Webb)

When starting with "ex filename", the file message was overwritten with
the "entering Ex mode" message.

Output of ":tselect" listed name of file directly from the tags file.  Now it
is corrected for the position of the tags file.

When 'backspace' is 0, could backspace over autoindent.  Now it is no longer
allowed (Vi compatible).

In Replace mode, when 'noexpandtab' and 'smarttab' were set, and inserting
Tabs, backspacing didn't work correctly for Tabs inserted at the start of the
line (unless 'sts' was set too).  Also, when replacing the first non-blank
after which is a space, rounding the indent was done on the first non-blank
instead of on the character under the cursor.

When 'sw' at 4, 'ts' at 8 and 'smarttab' set: When a tab was appended after
four spaces (they are replaced with a tab) couldn't backspace over the tab.

In Insert mode, with 'bs' set to 0, couldn't backspace to before autoindent,
even when it was removed with CTRL-D.

When repeating an insert command where a <BS>, <Left> or other key causes an
error, would flush buffers and remain in Insert mode.  No longer flush
buffers, only beep and continue with the insert command.

Dos and Win32 console: Setting t_me didn't work to get another color.  Made
this works backwards compatible.

For Turkish (LANG = "tr") uppercase 'i' is not an 'I'.  Use ASCII uppercase
translation in vim_strup() to avoid language problems. (Komur)

Unix: Use usleep() or nanosleep() for mch_delay() when available.  Hopefully
this avoids a hangup in select(0, ..) for Solaris 2.6.

Vim would crash when using a script file with 'let &sp = "| tee"', starting
vim with "vim -u test", then doing ":set sp=".  The P_WAS_SET flag wasn't set
for a string option, could cause problems with any string option.

When using "cmd | vim -", stdin is not a terminal.  This gave problems with
GPM (Linux console mouse) and when executing external commands.  Now close
stdin and re-open it as a copy of stderr.

Syntax highlighting: A "nextgroup" item was not properly stored in the state
list.  This caused missing of next groups when not redrawing from start to
end, but starting halfway.

Didn't check for valid values of 'ttymouse'.

When executing an external command from the GUI, waiting for the child to
terminate might not work, causing a hang. (Parmelan)

"make uninstall" didn't delete the vimrc_example.vim and gvimrc_example.vim
files and the vimtutor.

Win32: "expand("%:p:h")" with no buffer name removed the directory name.
"fnamemodify("", ":p")" did not add a trailing slash, fname_case() removed it.

Fixed: When 'hlsearch' was set and the 'c' flag was not in 'cpoptions':
highlighting was not correct.  Now overlapping matches are handled correctly.

Athena, Motif and GTK GUI: When started without focus, cursor was shown as if
with focus.

Don't include 'shellpipe' when compiled without quickfix, it's not used.
Don't include 'dictionary' option when compiled without the +insert_expand
feature.
Only include the 'shelltype' option for the Amiga.

When making a change to a line, with 'hlsearch' on, causing it to wrap, while
executing a register, the screen would not be updated correctly.  This was a
generic problem in update_screenline() being called while must_redraw is
VALID.

Using ":bdelete" in a BufUnload autocommand could cause a crash.  The window
height was added to another window twice in close_window().

Win32 GUI: When removing a menu item, the tearoff wasn't updated. (Negri)

Some performance bottlenecks removed.  Allocating memory was not efficient.
For Win32 checking for available memory was slow, don't check it every time
now.  On NT obtaining the user name takes a long time, cache the result (for
all systems).

fnamemodify() with an argument ":~:." or ":.:~" didn't work properly.

When editing a new file and exiting, the marks for the buffer were not saved
in the viminfo file.

":confirm only" didn't put up a dialog.

These text objects didn't work when 'selection' was "exclusive": va( vi( va{
vi{ va< vi< vi[ va[.

The dialog for writing a readonly file didn't have a valid default. (Negri)

The line number used for error messages when sourcing a file was reset when
modelines were inspected.  It was wrong when executing a function.

The file name and line number for an error message wasn't displayed when it
was the same as for the last error, even when this was long ago.  Now reset
the name/lnum after a hit-enter prompt.

In a session file, a "%" in a file name caused trouble, because fprintf() was
used to write it to the file.

When skipping statements, a mark in an address wasn't skipped correctly:
"ka|if 0|'ad|else|echo|endif". (Roemer)

":wall" could overwrite a not-edited file without asking.

GUI: When $DISPLAY was not set or starting the GUI failed in another way, the
console mode then started with wrong colors and skipped initializations.  Now
do an early check if the GUI can be started.  Don't source the menu.vim or
gvimrc when it will not.  Also do normal terminal initializations if the GUI
might not start.

When using a BufEnter autocommand to position the cursor and scroll the
window, the cursor was always put at the last used line and halfway the window
anyhow.

When 'wildmode' was set to "longest,list:full", ":e *.c<Tab><Tab>" didn't list
the matches.  Also avoid that listing after a "longest" lists the wrong
matches when the first expansion changed the string in front of the cursor.

When using ":insert", ":append" or ":change" inside a while loop, was not able
to break out of it with a CTRL-C.

Win32: ":e ." took an awful long time before an error message when used in
"C:\".  Was caused by adding another backslash and then trying to get the full
name for "C:\\".

":winpos -10 100" was working like ":winpos -10 -10", because a pointer was
not advanced past the '-' sign.

When obtaining the value of a hidden option, would give an error message.  Now
just use a zero value.

OS/2: Was using argv[0], even though it was not a useful name.  It could be
just "vim", found in the search path.

Xterm: ":set columns=78" didn't redraw properly (when lines wrap/unwrap) until
after a delay of 'updatetime'.  Didn't check for the size-changed signal.

'scrollbind' didn't work in Insert mode.
Horizontal scrollbinding didn't always work for "0" and "$" commands (e.g.,
when 'showcmd' was off).

When compiled with minimal features but with GUI, switching on the mouse in an
xterm caused garbage, because the mouse codes were not recognized.  Don't
enable the mouse when it can't be recognized.  In the GUI it also didn't work,
the arguments to the mouse code were not interpreted.

When 'showbreak' used, in Insert mode, when the cursor is just after the last
character in the line, which is also the in the rightmost column, the cursor
position would be like the 'showbreak' string is shown, but it wasn't.

Autocommands could move the cursor in a new file, so that CTRL-W i didn't show
the right line.  Same for when using a filemark to jump to another file.

When redefining the argument list, the title used for other windows could be
showing the wrong info about the position in the argument list.  Also update
this for a ":split" command without arguments.

When editing file 97 of 13, ":Next" didn't work.  Now it goes to the last
file in the argument list.

Insert mode completion (for dictionaries or included files) could not be
interrupted by typing an <Esc>.  Could get hit-enter prompt after line
completion, or whenever the informative message would get too long.

When using the ":edit" command to re-edit the same file, an autocommand to
jump to the last cursor position caused the cursor to move.  Now set the last
used cursor position to avoid this.

When 'comments' has a part that starts with white space, formatting the
comment didn't work.

At the ":tselect" prompt Normal mode mappings were used.  That has been
disabled.

When 'selection' is not "old", some commands still didn't allow the cursor
past the end-of-line in Visual mode.

Athena: When a menu was deleted, it would appear again (but not functional)
when adding another menu.  Now they don't reappear anymore (although they are
not really deleted either).

Borland C++ 4.x had an optimizer problem in fill_breakat_flags(). (Negri)

"ze" didn't work when 'number' was on. (Davis)

Win32 GUI: Intellimouse code didn't work properly on Windows 98. (Robinson)

A few files were including proto.h a second time, after vim.h had already done
that, which could cause problems with the vim_realloc() macro.

Win32 console: <M-x> or ALT-x was not recognized.  Also keypad '+', '-' and
'*'. (Negri)
MS-DOS: <M-x> didn't work, produced a two-byte code.  Now the alphabetic and
number keys work. (Negri)

When finding a lot of matches for a tag completion, the check for avoiding
double matches could take a lot of time.  Add a line_breakcheck() to be able
to interrupt this. (Deshpande)

When the command line was getting longer than the screen, the more-prompt
would be given regularly, and the cursor position would be wrong.  Now only
show the part of the command line that fits on the screen and force the cursor
to be positioned on the visible part.  There can be text after the cursor
which isn't editable.

At the more prompt and with the console dialog, a cursor key was interpreted
as <Esc> and OA.  Now recognize special keys in get_keystroke().  Ignore mouse
and scrollbar events.

When typing a BS after inserting a middle comment leader, typing the last char
of the end comment leader still changed it into the end comment leader. (Webb)

When a file system is full, writing to a swap file failed.  Now first try to
write one block to the file.  Try next entry in 'dir' if it fails.

When "~" is in 'whichwrap', doing "~" on last char of a line didn't update the
display.

Unix: Expanding wildcards for ":file {\\}" didn't work, because "\}" was
translated to "}" before the shell got it.  Now don't remove backslashes when
wildcards are going to be expanded.

Unix: ":e /tmp/$uid" didn't work.  When expanding environment variables in a
file name doesn't work, use the shell to expand the file name.  ":e /tmp/$tty"
still doesn't work though.

"make test" didn't always work on DOS/Windows for test30, because it depended
on the external "echo" command.

The link.sh script used "make" instead of $MAKE from the Makefile.  Caused
problems for generating pathdef.c when "make" doesn't work properly.

On versions that can do console and GUI: In the console a typed CSI code could
cause trouble.

The patterns in expression evaluation didn't ignore the 'l' flag in
'cpoptions'.  This broke the working of <CR> in the options window.

When 'hls' off and 'ai' on, "O<Esc>" did remove the indent, but it was still
highlighted red for trailing space.

Win32 GUI: Dropping an encrypted file on a running gvim didn't work right.  Vim
would loop while outputting "*" characters.  vgetc() was called recursively,
thus it returns NUL.  Added safe_vgetc(), which reads input directly from the
user in this situation.

While reading text from stdin, only an empty screen was shown.  Now show that
Vim is reading from stdin.

The cursor shape wasn't set properly when returning to Insert mode, after
using a CTRL-O /asdf command which fails.  It would be OK after a few seconds.
Now it's OK right away.

The 'isfname' default for DOS/Windows didn't include the '@' character.  File
names that contained "dir\@file" could not be edited.

Win32 console: <C-S-Left> could cause a crash when compiled with Borland or
egcs. (Aaron)

Unix and VMS: "#if HAVE_DIRENT_H" caused problems for some compilers.  Use
"#ifdef HAVE_DIRENT_H" instead. (Jones)

When a matching tag is in the current file but has a search pattern that
doesn't match, the cursor would jump to the first line.

Unix: Dependencies for pty.c were not included in Makefile.  Dependency of
ctags/config.h was not included (only matters for parallel make).

Removed a few Uninitialized Memory Reads (potential crashes).  In do_call()
calling clear_var() when not evaluating.  In win32_expandpath() and
dos_expandpath() calling backslash_halve() past the end of a file name.

Removed memory leaks: Set_vim_var_string() never freed the value.  The
next_list for a syntax keyword was never freed.

On non-Unix systems, using a file name with wildcards without a match would
silently fail.  E.g., ":e *.sh".  Now give a "No match" error message.

The life/life.mac, urm/urm.mac and hanoi/hanoi.mac files were not recognized
as Vim scripts.  Renamed them to *.vim.

[Note: some numbered patches are not relevant when upgrading from version 5.3,
they have been removed]

Patch 5.4m.1
Problem:    When editing a file with a long name, would get the hit-enter
	    prompt, even though all settings are such that the name should be
	    truncated to avoid that.  filemess() was printing the file name
	    without truncating it.
Solution:   Truncate the message in filemess().  Use the same code as for
	    msg_trunc_attr(), which is moved to the new function
	    msg_may_trunc().
Files:	    src/message.c, src/proto/message.pro, src/fileio.c

Patch 5.4m.3
Problem:    The Motif libraries were not found by configure for Digital Unix.
Solution:   Add "/usr/shlib" to the search path. (Andy Kahn)
Files:	    src/configure.in, src/configure

Patch 5.4m.5
Problem:    Win32 GUI: When using the Save-As menu entry and selecting an
	    existing file in the file browser, would get a dialog to confirm
	    overwriting twice.  (Ed Krall)
Solution:   Removed the dialog from the file browser.  It would be nicer to
	    set the "forceit" flag and skip Vim's ":confirm" dialog, but it
	    requires quite a few changes to do that.
Files:	    src/gui_w32.c

Patch 5.4m.6
Problem:    Win32 GUI: When reading text from stdin, e.g., "cat foo | gvim -",
	    a message box would pop up with "-stdin-" (when exiting). (Michael
	    Schaap)
Solution:   Don't switch off termcap mode for versions that are GUI-only.
	    They use another terminal to read from stdin.
Files:	    src/main.c, src/fileio.c

Patch 5.4m.7
Problem:    Unix: running configure with --enable-gtk-check,
	    --enable-motif-check, --enable-athena-check or --enable-gtktest
	    had the reverse effect. (Thomas Koehler)
Solution:   Use $enable_gtk_check variable correctly in AC_ARG_ENABLE().
Files:	    src/configure.in, src/configure

Patch 5.4m.9
Problem:    Multi-byte: With wrapping lines, the cursor was sometimes 2
	    characters to the left.  Syntax highlighting was wrong when a
	    double-byte character was split for a wrapping line.  When
	    'showbreak' was on the splitting also didn't work.
Solution:   Adjust getvcol() and win_line(). (Chong-Dae Park)
Files:	    src/charset.c, src/screen.c

Patch 5.4m.11
Problem:    The ":call" command didn't check for illegal trailing characters.
	    (Stefan Roemer)
Solution:   Add the check in do_call().
Files:	    src/eval.c

Patch 5.4m.13
Problem:    With the ":s" command:
	    1. When performing a substitute command, the mouse would be
	       disabled and enabled for every substitution.
	    2. The cursor position could be beyond the end of the line.
	       Calling line_breakcheck() could try to position the cursor,
	       which causes a crash in the Win32 GUI.
	    3. When using ":s" in a ":g" command, the cursor was not put on
	       the first non-white in the line.
	    4. There was a hit-enter prompt when confirming the substitution
	       and the replacement was a bit longer.
Solution:   1. Only disable/enable the mouse when asking for confirmation.
	    2. Always put the cursor on the first character, it is going to be
	       moved to the first non-blank anyway.
	       Don't use the cursor position in gui_mch_draw_hollow_cursor(),
	       get the character from the screen buffer.
	    3. Added global_need_beginline flag to call beginline() after ":g"
	       has finished all substitutions.
	    4. Clear the need_wait_return flag after prompting the user.
Files:	    src/ex_cmds.c, src/gui_w32.c

Patch 5.4m.14
Problem:    When doing "vim xxx", ":opt", ":only" and then ":e xxx" we end
	    up with two swapfiles for "xxx".  That is caused by the ":bdel"
	    command which is executed when unloading the option-window.
	    Also, there was no check if closing a buffer made the new one
	    invalid, this could cause a crash.
Solution:   When closing a buffer causes the current buffer to be deleted,
	    use the new buffer to replace it.  Also detect that the new buffer
	    has become invalid as a side effect of closing the current one.
	    Make autocommand that calls ":bdel" in optwin.vim nested, so that
	    the buffer loading it triggers also executes autocommands.
	    Also added a test for this in test13.
Files:	    runtime/optwin.vim, src/buffer.c, src/ex_cmds.c, src/globals.h
	    src/testdir/test13.in, src/testdir/test13.ok

Patch 5.4m.15
Problem:    When using a BufEnter autocommand to reload the syntax file,
	    conversion to HTML caused a crash. (Sung-Hyun Nam)
Solution:   When using ":syntax clear" the current stack of syntax items was
	    not cleared.  This will cause memory to be used that has already
	    been freed.  Added call to invalidate_current_state() in
	    syntax_clear().
Files:	    src/syntax.c

Patch 5.4m.17
Problem:    When omitting a ')' in an expression it would not be seen as a
	    failure.
	    When detecting an error inside (), there would be an error message
	    for a missing ')' too.
	    When using ":echo 1+|echo 2" there was no error message. (Roemer)
	    When using ":exe 1+" there was no error message.
	    When using ":return 1+" there was no error message.
Solution:   Fix do_echo(), do_execute() and do_return() to give an error
	    message when eval1() returns FAIL.
	    Fix eval6() to handle trailing ')' correctly and return FAIL when
	    it's missing.
Files:	    src/eval.c

Patch 5.4m.18
Problem:    When using input() from inside an expression entered with
	    "CTRL-R =" on the command line, there could be a crash.  And the
	    resulting command line was wrong.
Solution:   Added getcmdline_prompt(), which handles recursive use of
	    getcmdline() correctly.  It also sets the command line prompt.
	    Removed cmdline_prompt().  Also use getcmdline_prompt() for
	    getting the crypt key in get_crypt_key().
Files:	    src/proto/ex_getln.pro, src/ex_getln.c, src/eval.c, src/misc2.c

Patch 5.4m.21
Problem:    When starting up, the screen structures were first allocated at
	    the minimal size, then initializations were done with Rows
	    possibly different from screen_Rows.  Caused a crash in rare
	    situations (GTK with XIM and fontset).
Solution:   Call screenalloc() in main() only after calling ui_get_winsize().
	    Also avoids a potential delay because of calling screenclear()
	    while "starting" is non-zero.
Files:	    src/main.c

Patch 5.4m.22
Problem:    In the GUI it was possible that the screen was resized and the
	    screen structures re-allocated while redrawing the screen.  This
	    could cause a crash (hard to reproduce).  The call sequence goes
	    through update_screen() .. syntax_start() .. ui_breakcheck() ..
	    gui_resize_window() .. screenalloc().
Solution:   Set updating_screen while redrawing.  If the window is resized
	    remember the new size and handle it only after redrawing is
	    finished.
	    This also fixes that resizing the screen while still redrawing
	    (slow syntax highlighting) would not work properly.
	    Also disable display_hint, it was never used.
Files:	    src/globals.h, src/gui.c, src/screen.c, src/proto/gui.pro

Patch 5.4m.23
Problem:    When using expand("<cword>") when there was no word under the
	    cursor, would get an error message.  Same for <cWORD> and <cfile>.
Solution:   Don't give an error message, return an empty string.
Files:	    src/eval.c

Patch 5.4m.24
Problem:    ":help \|" didn't find anything.  It was translated to "/\\|".
Solution:   Translate "\|" into "\\bar".  First check the table for specific
	    translations before checking for "\x".
Files:	    src/ex_cmds.c

Patch 5.4m.25
Problem:    Unix: When using command line completion on files that contain
	    ''', '"' or '|' the file name could not be used.
	    Adding this file name to the Buffers menu caused an error message.
Solution:   Insert a backslash before these three characters.
	    Adjust Mungename() function to insert a backslash before '|'.
Files:	    src/ex_getln.c, runtime/menu.vim

Patch 5.4m.26
Problem:    When using a mapping of two function keys, e.g., <F1><F1>, and
	    only the first char of the second key has been read, the mapping
	    would not be recognized.  Noticed on some Unix systems with xterm.
Solution:   Add 'K' flag to 'cpoptions' to wait for the whole key code, even
	    when halfway a mapping.
Files:	    src/option.h, src/term.c

Patch 5.4m.27
Problem:    When making test33 without the lisp feature it hangs. Interrupting
	    the execution of the script then might cause a crash.
Solution:   In inchar(), after closing a script, don't use buf[] anymore.
	    closescript() has freed typebuf[] and buf[] might be pointing
	    inside typebuf[].
	    Avoid that test33 hangs when the lisp feature is missing.
Files:	    src/getchar.c src/testdir/test33.in

"os2" was missing from the feature list.  Useful for has("os2").

BeOS:
- Included patches from Richard Offer for BeOS R4.5.
- menu code didn't work right.  Crashed in the Buffers menu.  The window title
  wasn't set. (Offer)

Patch 5.4n.3
Problem:    C-indenting was wrong after "  } else".  The white space was not
	    skipped.  Visible when 'cino' has "+10".
Solution:   Skip white space before calling cin_iselse(). (Norbert Zeh)
Files:	    src/misc1.c

Patch 5.4n.4
Problem:    When the 't' flag in 'cpoptions' is included, after a
	    ":nohlsearch" the search highlighting would not be enabled again
	    after a tag search. (Norbert Zeh)
Solution:   When setting the new search pattern in jumpto_tag(), don't restore
	    no_hlsearch.
Files:	    src/tag.c

Patch 5.4n.5
Problem:    When using ":normal" from a CursorHold autocommand Vim hangs.  The
	    autocommand is executed down from vgetc().  Calling vgetc()
	    recursively to execute the command doesn't work then.
Solution:   Forbid the use of ":normal" when vgetc_busy is set.  Give an error
	    message when this happens.
Files:	    src/ex_docmd.c, runtime/doc/autocmd.txt

Patch 5.4n.6
Problem:    "gv" could reselect a Visual that starts and/or ends past the end
	    of a line. (Robert Webb)
Solution:   Check that the start and end of the Visual area are on a valid
	    character by calling adjust_cursor().
Files:	    src/normal.c

Patch 5.4n.8
Problem:    When a mark was on a non existing line (e.g., when the .viminfo
	    was edited), jumping to it caused ml_get errors. (Alexey
	    Marinichev).
Solution:   Added check_cursor_lnum() in nv_gomark().
Files:	    src/normal.c

Patch 5.4n.9
Problem:    ":-2" moved the cursor to a negative line number. (Ralf Schandl)
Solution:   Give an error message for a negative line number.
Files:	    src/ex_docmd.c

Patch 5.4n.10
Problem:    Win32 GUI: At the hit-enter prompt, it was possible to scroll the
	    text.  This erased the prompt and made Vim look like it is in
	    Normal mode, while it is actually still waiting for a <CR>.
Solution:   Disallow scrolling at the hit-enter prompt for systems that use
	    on the fly scrolling.
Files:	    src/message.c

Patch 5.4n.14
Problem:    Win32 GUI: When using ":winsize 80 46" and the height is more than
	    what fits on the screen, the window size was made smaller than
	    asked for (that's OK) and Vim crashed (that's not OK)>
Solution:   Call check_winsize() from gui_set_winsize() to resize the windows.
Files:	    src/gui.c

Patch 5.4n.16
Problem:    Win32 GUI: The <F10> key both selected the menu and was handled as
	    a key hit.
Solution:   Apply 'winaltkeys' to <F10>, like it is used for Alt keys.
Files:	    src/gui_w32.c

Patch 5.4n.17
Problem:    Local buffer variables were freed when the buffer is unloaded.
	    That's not logical, since options are not freed. (Ron Aaron)
Solution:   Free local buffer variables only when deleting the buffer.
Files:	    src/buffer.c

Patch 5.4n.19
Problem:    Doing ":e" (without argument) in an option-window causes trouble.
	    The mappings for <CR> and <Space> are not removed.  When there is
	    another buffer loaded, the swap file for it gets mixed up.
	    (Steve Mueller)
Solution:   Also remove the mappings at the BufUnload event, if they are still
	    present.
	    When re-editing the same file causes the current buffer to be
	    deleted, don't try editing it.
	    Also added a test for this situation.
Files:	    runtime/optwin.vim, src/ex_cmds.c, src/testdir/test13.in,
	    src/testdir/test13.ok

Patch 5.4n.24
Problem:    BeOS: configure never enabled the GUI, because $with_x was "no".
	    Unix prototypes caused problems, because Display and Widget are
	    undefined.
	    Freeing fonts on exit caused a crash.
Solution:   Only disable the GUI when $with_x is "no" and  $BEOS is not "yes".
	    Add dummy defines for Display and Widget in proto.h.
	    Don't free the fonts in gui_exit() for BeOS.
Files:	    src/configure.in, src/configure, src/proto.h, src/gui.c.


The runtime/vim48x48.xpm icon didn't have a transparent background. (Schild)

Some versions of the mingw32/egcs compiler didn't have WINBASEAPI defined.
(Aaron)

VMS:
- mch_setenv() had two arguments instead of three.
- The system vimrc and gvimrc files were called ".vimrc" and ".gvimrc".
  Removed the dot.
- call to RealWaitForChar() had one argument too many. (Campbell)
- WaitForChar() is static, removed the prototype from proto/os_vms.pro.
- Many file accesses failed, because Unix style file names were used.
  Translate file names to VMS style by using vim_fopen().
- Filtering didn't work, because the temporary file name was generated wrong.
- There was an extra newline every 9192 characters when writing a file.  Work
  around it by writing line by line. (Campbell)
- os_vms.c contained "# typedef int DESC".  Should be "typedef int DESC;".
  Only mattered for generating prototypes.
- Added file name translation to many places.  Made easy by defining macros
  mch_access(), mch_fopen(), mch_fstat(), mch_lstat() and mch_stat().
- Set default for 'tagbsearch' to off, because binary tag searching apparently
  doesn't work for VMS.
- make mch_get_host_name() work with /dec and /standard=vaxc. (Campbell)


Patch 5.4o.2
Problem:    Crash when using "gf" on "file.c://comment here". (Scott Graham)
Solution:   Fix wrong use of pointers in get_file_name_in_path().
Files:	    src/window.c

Patch 5.4o.3
Problem:    The horizontal scrollbar was not sized correctly when 'number' is
	    set and 'wrap' not set.
	    Athena: Horizontal scrollbar wasn't updated when the cursor was
	    positioned with a mouse click just after dragging.
Solution:   Subtract 8 from the size when 'number' set and 'wrap' not set.
	    Reset gui.dragged_sb when a mouse click is received.
Files:	    src/gui.c

Patch 5.4o.4
Problem:    When running in an xterm and $WINDOWID is set to an illegal value,
	    Vim would exit with "Vim: Got X error".
Solution:   When using the display which was opened for the xterm clipboard,
	    check if x11_window is valid by trying to obtain the window title.
	    Also add a check in setup_xterm_clip(), for when using X calls to
	    get the pointer position in an xterm.
Files:	    src/os_unix.c

Patch 5.4o.5
Problem:    Motif version with Lesstif: When removing the menubar and then
	    using a menu shortcut key, Vim would crash. (raf)
Solution:   Disable the menu mnemonics when the menu bar is removed.
Files:	    src/gui_motif.c

Patch 5.4o.9
Problem:    The DOS install.exe program used the "move" program.  That doesn't
	    work on Windows NT, where "move" is internal to cmd.exe.
Solution:   Don't use an external program for moving the executables.  Use C
	    functions to copy the file and delete the original.
Files:	    src/dosinst.c

Motif and Athena obtained the status area height differently from GTK.  Moved
status_area_enabled from global.h to gui_x11.c and call
xim_get_status_area_height() to get the status area height.

Patch 5.4p.1
Problem:    When using auto-select, and the "gv" command is used, would not
	    always obtain ownership of the selection.  Caused by the Visual
	    area still being the same, but ownership taken away by another
	    program.
Solution:   Reset the clipboard Visual mode to force updating the selection.
Files:	    src/normal.c

Patch 5.4p.2
Problem:    Motif and Athena with XIM: Typing 3-byte
	    <multibyte><multibyte><space> doesn't work correctly with Ami XIM.
Solution:   Avoid using key_sym XK_VoidSymbol. (Nam)
Files:	    src/multbyte.c, src/gui_x11.c

Patch 5.4p.4
Problem:    Win32 GUI: The scrollbar values were reduced for a file with more
	    than 32767 lines.  But this info was kept global for all
	    scrollbars, causing a mixup between the windows.
	    Using the down arrow of a scrollbar in a large file didn't work.
	    Because of round-off errors there is no scroll at all.
Solution:   Give each scrollbar its own scroll_shift field.  When the down
	    arrow is used, scroll several lines.
Files:	    src/gui.h, src/gui_w32.c

Patch 5.4p.5
Problem:    When changing buffers in a BufDelete autocommand, there could be
	    ml_line errors and/or a crash. (Schandl)  Was caused by deleting
	    the current buffer.
Solution:   When the buffer to be deleted unexpectedly becomes the current
	    buffer, don't delete it.
	    Also added a check for this in test13.
Files:	    src/buffer.c, src/testdir/test13.in, src/testdir/test13.ok

Patch 5.4p.7
Problem:    Win32 GUI: When using 'mousemodel' set to "popup_setpos" and
	    clicking the right mouse button outside of the selected area, the
	    selected area wasn't removed until the popup menu has gone.
	    (Aaron)
Solution:   Set the cursor and update the display before showing the popup
	    menu.
Files:	    src/normal.c

Patch 5.4p.8
Problem:    The generated bugreport didn't contain information about
	    $VIMRUNTIME and whether runtime files actually exist.
Solution:   Added a few checks to the bugreport script.
Files:	    runtime/bugreport.vim

Patch 5.4p.9
Problem:    The windows install.exe created a wrong entry in the popup menu.
	    The "%1" was "".  The full directory was included, even when the
	    executable had been moved elsewhere. (Ott)
Solution:   Double the '%' to get one from printf.  Only include the path to
	    gvim.exe when it wasn't moved and it's not in $PATH.
Files:	    src/dosinst.c

Patch 5.4p.10
Problem:    Win32: On top of 5.4p.9: The "Edit with Vim" entry sometimes used
	    a short file name for a directory.
Solution:   Change the "%1" to "%L" in the registry entry.
Files:	    src/dosinst.c

Patch 5.4p.11
Problem:    Motif, Athena and GTK: When closing the GUI window when there is a
	    changed buffer, there was only an error message and Vim would not
	    exit.
Solution:   Put up a dialog, like for ":confirm qa".  Uses the code that was
	    already used for MS-Windows.
Files:	    src/gui.c, src/gui_w32.c

Patch 5.4p.12
Problem:    Win32: Trying to expand a string that is longer than 256
	    characters could cause a crash. (Steed)
Solution:   For the buffer in win32_expandpath() don't use a fixed size array,
	    allocate it.
Files:	    src/os_win32.c

MSDOS: Added "-Wall" to Makefile.djg compile flags.  Function prototypes for
fname_case() and mch_update_cursor() were missing.  "fd" was unused in
mf_sync().  "puiLocation" was unused in myputch().  "newcmd" unused in
mch_call_shell() for DJGPP version.

==============================================================================
VERSION 5.5						*version-5.5*

Version 5.5 is a bug-fix version of 5.4.


Changed							*changed-5.5*
-------

The DJGPP version is now compiled with "-O2" instead of "-O4" to reduce the
size of the executables.

Moved the src/STYLE file to runtime/doc/develop.txt.  Added the design goals
to it.

'backspace' is now a string option.  See patch 5.4.15.


Added							*added-5.5*
-----

Included Exuberant Ctags version 3.3. (Darren Hiebert)

In runtime/mswin.vim, map CTRL-Q to CTRL-V, so that CTRL-Q can be used
everywhere to do what CTRL-V used to do.

Support for decompression of bzip2 files in vimrc_example.vim.

When a patch is included, the patch number is entered in a table in version.c.
This allows skipping a patch without breaking a next one.

Support for mouse scroll wheel in X11.  See patch 5.5a.14.

line2byte() can be used to get the size of the buffer.  See patch 5.4.35.

The CTRL-R CTRL-O r and CTRL-R CTRL-P r commands in Insert mode are used to
insert a register literally.  See patch 5.4.48.

Uninstall program for MS-Windows.  To be able to remove the registry entries
for "Edit with Vim".  It is registered to be run from the "Add/Remove
programs" application.  See patch 5.4.x7.


Fixed							*fixed-5.5*
-----

When using vimrc_example.vim: An error message when the cursor is on a line
higher than the number of lines in the compressed file.  Move the autocommand
for jumping to the last known cursor position to after the decompressing
autocommands.

":mkexrc" and ":mksession" wrote the current value of 'textmode'.  That may
mark a file as modified, which causes problems.  This is a buffer-specific
setting, it should not affect all files.

"vim --version" wrote two empty lines.

Unix: The alarm signal could kill Vim.  It is generated by the Perl alarm()
function.  Ignore SIGALRM.

Win32 GUI: Toolbar still had the yellow bitmap for running a Vim script.

BeOS: "tmo" must be bigtime_t, instead of double. (Seibert)

Patch 5.4.1
Problem:    Test11 fails when $GZIP is set to "-v". (Matthew Jackson)
Solution:   Set $GZIP to an empty string.
Files:	    src/testdir/test11.in

Patch 5.4.2
Problem:    Typing <Esc> at the crypt key prompt caused a crash. (Kallingal)
Solution:   Check for a NULL pointer returned from get_crypt_key().
Files:	    src/fileio.c

Patch 5.4.3
Problem:    Python: Trying to use the name of an unnamed buffer caused a
	    crash. (Daniel Burrows)
Solution:   Check for b_fname being a NULL pointer.
Files:	    src/if_python.c

Patch 5.4.4
Problem:    Win32: When compiled without toolbar, but the 'T' flag is in
	    'guioptions', there would be an empty space for the toolbar.
Solution:   Add two #ifdefs where checking for the 'T' flag. (Vince Negri)
Files:	    src/gui.c

Patch 5.4.5
Problem:    Athena GUI: Using the Buffers.Refresh menu entry caused a crash.
	    Looks like any ":unmenu" command may cause trouble.
Solution:   Disallow ":unmenu" in the Athena version.  Disable the Buffers
	    menu, because the Refresh item would not work.
Files:	    src/menu.c, runtime/menu.vim

Patch 5.4.6
Problem:    GTK GUI: Using ":gui" in the .gvimrc file caused an error.  Only
	    happens when the GUI forks.
Solution:   Don't fork in a recursive call of gui_start().
Files:	    src/gui.c

Patch 5.4.7
Problem:    Typing 'q' at the more prompt for the ATTENTION message causes the
	    file loading to be interrupted. (Will Day)
Solution:   Reset got_int after showing the ATTENTION message.
Files:	    src/memline.c

Patch 5.4.8
Problem:    Edit some file, ":he", ":opt": options from help window are shown,
	    but pressing space updates from the other window. (Phillipps)
	    Also: When there are changes in the option-window, ":q!" gives an
	    error message.
Solution:   Before creating the option-window, go to a non-help window.
	    Use ":bdel!" to delete the buffer.
Files:	    runtime/optwin.vim

Patch 5.4.9
	    Just updates version.h.  The real patch has been moved to 5.4.x1.
	    This patch is just to keep the version number correct.

Patch 5.4.10
Problem:    GTK GUI: When $DISPLAY is invalid, "gvim -f" just exits.  It
	    should run in the terminal.
Solution:   Use gtk_init_check() instead of gtk_init().
Files:	    src/gui_gtk_x11.c

Patch 5.4.11
Problem:    When using the 'S' flag in 'cpoptions', 'tabstop' is not copied to
	    the next buffer for some commands, e.g., ":buffer".
Solution:   When the BCO_NOHELP flag is given to buf_copy_options(), still
	    copy the options used by do_help() when neither the "from" or "to"
	    buffer is a help buffer.
Files:	    src/option.c

Patch 5.4.12
Problem:    When using 'smartindent', there would be no extra indent if the
	    current line did not have any indent already. (Hanus Adler)
Solution:   There was a wrongly placed "else", that previously matched with
	    the "if" that set trunc_line.  Removed the "else" and added a
	    check for trunc_line to be false.
Files:	    src/misc1.c

Patch 5.4.13
Problem:    New SGI C compilers need another option for optimisation.
Solution:   Add a check in configure for "-OPT:Olimit". (Chin A Young)
Files:	    src/configure.in, src/configure

Patch 5.4.14
Problem:    Motif GUI: When the popup menu is present, a tiny window appears
	    on the desktop for some users.
Solution:   Set the menu widget ID for a popup menu to 0. (Thomas Koehler)
Files:	    src/gui_motif.c

Patch 5.4.15
Problem:    Since 'backspace' set to 0 has been made Vi compatible, it is no
	    longer possible to only allow deleting autoindent.
Solution:   Make 'backspace' a list of parts, to allow each kind of
	    backspacing separately.
Files:	    src/edit.c, src/option.c, src/option.h, src/proto/option.pro,
	    runtime/doc/option.txt, runtime/doc/insert.txt

Patch 5.4.16
Problem:    Multibyte: Locale zh_TW.Big5 was not checked for in configure.
Solution:   Add zh_TW.Big5 to configure check. (Chih-Tsun Huang)
Files:	    src/configure.in, src/configure

Patch 5.4.17
Problem:    GUI: When started from inside gvim with ":!gvim", Vim would not
	    start.  ":!gvim -f" works fine.
Solution:   After forking, wait a moment in the parent process, to give the
	    child a chance to set its process group.
Files:	    src/gui.c

Patch 5.4.18
Problem:    Python: The clear_history() function also exists in a library.
Solution:   Rename clear_history() to clear_hist().
Files:	    src/ex_getln.c, src/eval.c, src/proto/ex_getln.pro

Patch 5.4.19
Problem:    In a terminal with 25 lines, there is a more prompt after the
	    ATTENTION message.  When hitting 'q' here the dialog prompt
	    doesn't appear and file loading is interrupted. (Will Day)
Solution:   Don't allow quitting the printing of a message for the dialog
	    prompt.  Added the msg_noquit_more flag for this.
Files:	    src/message.c

Patch 5.4.20
Problem:    GTK: When starting gvim, would send escape sequences to the
	    terminal to switch the cursor off and on.
Solution:   Don't call msg_start() if the GUI is expected to start.
Files:	    src/main.c

Patch 5.4.21
Problem:    Motif: Toplevel menu ordering was wrong when using tear-off items.
Solution:   Don't add one to the index for a toplevel menu.
Files:	    src/gui_motif.c

Patch 5.4.22
Problem:    In Insert mode, <C-Left>, <S-Left>, <C-Right> and <S-Right> didn't
	    update the column used for vertical movement.
Solution:   Set curwin->w_set_curswant for those commands.
Files:	    src/edit.c

Patch 5.4.23
Problem:    When a Visual selection is lost to another program, and then the
	    same text is Visually selected again, the clipboard ownership
	    wasn't regained.
Solution:   Set clipboard.vmode to NUL to force regaining the clipboard.
Files:	    src/normal.c

Patch 5.4.24
Problem:    Encryption: When using ":r file" while 'key' has already entered,
	    the 'key' option would be messed up.  When writing the file it
	    would be encrypted with an unknown key and lost! (Brad Despres)
Solution:   Don't free cryptkey when it is equal to the 'key' option.
Files:	    src/fileio.c

Patch 5.4.25
Problem:    When 'cindent' is set, but 'autoindent' isn't, comments are not
	    properly indented when starting a new line. (Mitterand)
Solution:   When there is a comment leader for the new line, but 'autoindent'
	    isn't set, do C-indenting.
Files:	    src/misc1.c

Patch 5.4.26
Problem:    Multi-byte: a multi-byte character is never recognized in a file
	    name, causing a backslash before it to be removed on Windows.
Solution:   Assume that a leading-byte character is a file name character in
	    vim_isfilec().
Files:	    src/charset.c

Patch 5.4.27
Problem:    Entries in the PopUp[nvic] menus were added for several modes, but
	    only deleted for the mode they were used for.  This resulted in
	    the  entry remaining in the PopUp menu.
	    When removing a PopUp[nvic] menu, the name had been truncated,
	    could result in greying-out the whole PopUp menu.
Solution:   Remove entries for all modes from the PopUp[nvic] menus.  Remove
	    the PopUp[nvic] menu entries first, before the name is changed.
Files:	    src/menu.c

Patch 5.4.28
Problem:    When using a BufWritePre autocommand to change 'fileformat', the
	    new value would not be used for writing the file.
Solution:   Check 'fileformat' after executing the autocommands instead of
	    before.
Files:	    src/fileio.c

Patch 5.4.29
Problem:    Athena GUI: When removing the 'g' flag from 'guioptions', using a
	    menu can result in a crash.
Solution:   Always grey-out menus for Athena, don't hide them.
Files:	    src/menu.c

Patch 5.4.30
Problem:    BeOS: Suspending Vim with CTRL-Z didn't work (killed Vim).  The
	    first character typed after ":sh" goes to Vim, instead of the
	    started shell.
Solution:   Don't suspend Vim, start a new shell.  Kill the async read thread
	    when starting a new shell.  It will be restarted later. (Will Day)
Files:	    src/os_unix.c, src/ui.c

Patch 5.4.31
Problem:    GUI: When 'mousefocus' is set, moving the mouse over where a
	    window boundary was, causes a hit-enter prompt to be finished.
	    (Jeff Walker)
Solution:   Don't use 'mousefocus' at the hit-enter prompt.  Also ignore it
	    for the more prompt and a few other situations.  When an operator
	    is pending, abort it first.
Files:	    src/gui.c

Patch 5.4.32
Problem:    Unix: $LDFLAGS was not passed to configure.
Solution:   Pass $LDFLAGS to configure just like $CFLAGS. (Jon Miner)
Files:	    src/Makefile

Patch 5.4.33
Problem:    Unix: After expanding an environment variable with the shell, the
	    next expansion would also use the shell, even though it is not
	    needed.
Solution:   Reset "recursive" before returning from gen_expand_wildcards().
Files:	    src/misc1.c

Patch 5.4.34 (also see 5.4.x5)
Problem:    When editing a file, and the file name is relative to a directory
	    above the current directory, the file name was made absolute.
	    (Gregory Margo)
Solution:   Add an argument to shorten_fnames() which indicates if all file
	    names should be shortened, or only absolute names.  In main() only
	    use shorten_fnames() to shorten absolute names.
Files:	    src/ex_docmd.c, src/fileio.c, src/main.c, src/proto/fileio.pro

Patch 5.4.35
Problem:    There is no function to get the current file size.
Solution:   Allow using line2byte() with the number of lines in the file plus
	    one.  This returns the offset of the line past the end of the
	    file, which is the file size plus one.
Files:	    src/eval.c, runtime/doc/eval.txt

Patch 5.4.36
Problem:    Comparing strings while ignoring case didn't work correctly for
	    some machines. (Mide Steed)
Solution:   vim_stricmp() and vim_strnicmp() only returned 0 or 1.  Changed
	    them to return -1 when the first argument is smaller.
Files:	    src/misc2.c

Patch 5.4.37 (also see 5.4.40 and 5.4.43)
Problem:    Long strings from the viminfo file are truncated.
Solution:   When writing a long string to the viminfo file, first write a line
	    with the length, then the string itself in a second line.
Files:	    src/eval.c, src/ex_cmds.c, src/ex_getln.c, src/mark.c, src/ops.c,
	    src/search.c, src/proto/ex_cmds.pro, runtime/syntax/viminfo.vim

Patch 5.4.38
Problem:    In the option-window, ":set go&" resulted in 'go' being handled
	    like a boolean option.
	    Mappings for <Space> and <CR> were overruled by the option-window.
Solution:   When the value of an option isn't 0 or 1, don't handle it like a
	    boolean option.
	    Save and restore mappings for <Space> and <CR> when entering and
	    leaving the option-window.
Files:	    runtime/optwin.vim

Patch 5.4.39
Problem:    When setting a hidden option, spaces before the equal sign were
	    not skipped and cause an error message.  E.g., ":set csprg =cmd".
Solution:   When skipping over a hidden option, check for a following "=val"
	    and skip it too.
Files:	    src/option.c

Patch 5.4.40 (depends on 5.4.37)
Problem:    Compiler error for "atol(p + 1)". (Axel Kielhorn)
Solution:   Add a typecast: "atol((char *)p + 1)".
Files:	    src/ex_cmds.c

Patch 5.4.41
Problem:    Some commands that were not included would give an error message,
	    even when after "if 0".
Solution:   Don't give an error message for an unsupported command when not
	    executing the command.
Files:	    src/ex_docmd.c

Patch 5.4.42
Problem:    ":w" would also cause a truncated message to appear in the message
	    history.
Solution:   Don't put a kept message in the message history when it starts
	    with "<".
Files:	    src/message.c

Patch 5.4.43 (depends on 5.4.37)
Problem:    Mixing long lines with multiple lines in a register causes errors
	    when writing the viminfo file. (Robinson)
Solution:   When reading the viminfo file to skip register contents, skip
	    lines that start with "<".
Files:	    src/ops.c

Patch 5.4.44
Problem:    When 'whichwrap' includes '~', a "~" command that goes on to the
	    next line cannot be properly undone. (Zellner)
Solution:   Save each line for undo in n_swapchar().
Files:	    src/normal.c

Patch 5.4.45 (also see 5.4.x8)
Problem:    When expand("$ASDF") fails, there is an error message.
Solution:   Remove the global expand_interactively.  Pass a flag down to skip
	    the error message.
	    Also: expand("$ASDF") returns an empty string if $ASDF isn't set.
	    Previously it returned "$ASDF" when 'shell' is "sh".
	    Also: system() doesn't print an error when the command returns an
	    error code.
Files:	    many

Patch 5.4.46
Problem:    Backspacing did not always use 'softtabstop' after hitting <CR>,
	    inserting a register, moving the cursor, etc.
Solution:   Reset inserted_space much more often in edit().
Files:	    src/edit.c

Patch 5.4.47
Problem:    When executing BufWritePre or BufWritePost autocommands for a
	    hidden buffer, the cursor could be moved to a non-existing
	    position. (Vince Negri)
Solution:   Save and restore the cursor and topline for the current window
	    when it is going to be used to execute autocommands for a hidden
	    buffer.  Use an existing window for the buffer when it's not
	    hidden.
Files:	    src/fileio.c

Patch 5.4.48
Problem:    A paste with the mouse in Insert mode was not repeated exactly the
	    same with ".".  For example, when 'autoindent' is set and pasting
	    text with leading indent. (Perry)
Solution:   Add the CTRL-R CTRL-O r and CTRL-R CTRL-P r commands in Insert
	    mode, which insert the contents of a register literally.
Files:	    src/edit.c, src/normal.c, runtime/doc/insert.txt

Patch 5.4.49
Problem:    When pasting text with [ <MiddleMouse>, the cursor could end up
	    after the last character of the line.
Solution:   Correct the cursor position for the change in indent.
Files:	    src/ops.c

Patch 5.4.x1 (note: Replaces patch 5.4.9)
Problem:    Win32 GUI: menu hints were never used, because WANT_MENU is not
	    defined until vim.h is included.
Solution:   Move the #ifdef WANT_MENU from where MENUHINTS is defined to where
	    it is used.
Files:	    src/gui_w32.c

Patch 5.4.x2
Problem:    BeOS: When pasting text, one character was moved to the end.
Solution:   Re-enable the BeOS code in fill_input_buf(), and fix timing out
	    with acquire_sem_etc(). (Will Day)
Files:	    src/os_beos.c, src/ui.c

Patch 5.4.x3
Problem:    Win32 GUI: When dropping a directory on a running gvim it crashes.
Solution:   Avoid using a NULL file name.  Also display a message to indicate
	    that the current directory was changed.
Files:	    src/gui_w32.c

Patch 5.4.x4
Problem:    Win32 GUI: Removing an item from the popup menu doesn't work.
Solution:   Don't remove the item from the menubar, but from the parent popup
	    menu.
Files:	    src/gui_w32.c

Patch 5.4.x5 (addition to 5.4.34)
Files:	    src/gui_w32.c

Patch 5.4.x6
Problem:    Win32: Expanding (dir)name starting with a dot doesn't work.
	    (McCormack)  Only when there is a path before it.
Solution:   Fix the check, done before expansion, if the file name pattern
	    starts with a dot.
Files:	    src/os_win32.c

Patch 5.4.x7
Problem:    Win32 GUI: Removing "Edit with Vim" from registry is difficult.
Solution:   Add uninstall program to remove the registry keys. It is installed
	    in the "Add/Remove programs" list for ease of use.
	    Also: don't set $VIM when the executable is with the runtime files.
	    Also: Add a text file with a step-by-step description of how to
	    uninstall Vim for DOS and Windows.
Files:	    src/uninstal.c, src/dosinst.c, src/Makefile.w32, uninstal.txt

Patch 5.4.x8 (addition to 5.4.45)
Files:	    many

Patch 5.4.x9
Problem:    Win32 GUI: After executing an external command, focus is not
	    always regained (when using focus-follows-mouse).
Solution:   Add SetFocus() in mch_system(). (Mike Steed)
Files:	    src/os_win32.c


Patch 5.5a.1
Problem:    ":let @* = @:" did not work.  The text was not put on the
	I   clipboard.  (Fisher)
Solution:   Own the clipboard and put the text on it.
Files:	    src/ops.c

Patch 5.5a.2
Problem:    append() did not mark the buffer modified.  Marks below the
	    new line were not adjusted.
Solution:   Fix the f_append() function.
Files:	    src/eval.c

Patch 5.5a.3
Problem:    Editing compressed ".gz" files doesn't work on non-Unix systems,
	    because there is no "mv" command.
Solution:   Add the rename() function and use it instead of ":!mv".
	    Also: Disable the automatic jump to the last position, because it
	    changes the jumplist.
Files:	    src/eval.c, runtime/doc/eval.txt, runtime/vimrc_example.vim

Patch 5.5a.4
Problem:    When using whole-line completion in insert mode while the cursor
	    is in the indent, get "out of memory" error. (Stekrt)
Solution:   Don't allocate a negative amount of memory in ins_complete().
Files:	    src/edit.c

Patch 5.5a.5
Problem:    Win32: The 'path' option can hold only up to 256 characters,
	    because _MAX_PATH is 256.  (Robert Webb)
Solution:   Use a fixed path length of 1024.
Files:	    src/os_win32.h

Patch 5.5a.6
Problem:    Compiling with gcc on Win32, using the Unix Makefile, didn't work.
Solution:   Add $(SUFFIX) to all places where an executable is used.  Also
	    pass it to ctags.  (Reynolds)
Files:	    src/Makefile

Patch 5.5a.7
Problem:    When using "cat | vim -" in an xterm, the xterm version reply
	    would end up in the file.
Solution:   Read the file from stdin before switching the terminal to RAW
	    mode.  Should also avoid problems with programs that use a
	    specific terminal setting.
	    Also: when using the GUI, print "Reading from stdin..." in the GUI
	    window, to give a hint why it doesn't do anything.
Files:	    src/main.c, src/fileio.c

Patch 5.5a.8
Problem:    On multi-threaded Solaris, suspending doesn't work.
Solution:   Call pause() when the SIGCONT signal was not received after
	    sending the SIGTSTP signal. (Nagano)
Files:	    src/os_unix.c

Patch 5.5a.9
Problem:    'winaltkeys' could be set to an empty argument, which is illegal.
Solution:   Give an error message when doing ":set winaltkeys=".
Files:	    src/option.c

Patch 5.5a.10
Problem:    Win32 console: Using ALTGR on a German keyboard to produce "}"
	    doesn't work, because the 8th bit is set when ALT is pressed.
Solution:   Don't set the 8th bit when ALT and CTRL are used. (Leipert)
Files:	    src/os_win32.c

Patch 5.5a.11
Problem:    Tcl: Configure always uses tclsh8.0.
	    Also: Loading a library doesn't work.
Solution:   Add "--with-tclsh" configure argument to allow specifying another
	    name for the tcl shell.
	    Call Tcl_Init() in tclinit() to make loading libraries work.
	    (Johannes Zellner)
Files:	    src/configure.in, src/configure, src/if_tcl.c

Patch 5.5a.12
Problem:    The "user_commands" feature is called "user-commands".
Solution:   Replace "user-commands" with "user_commands". (Kim Sung-bom)
	    Keep "user-commands" for the has() function, to remain backwards
	    compatible with 5.4.
Files:	    src/eval.c, src/version.c

Patch 5.5a.13
Problem:    OS/2: When $HOME is not defined, "C:/" is used for the viminfo
	    file.  That is very wrong when OS/2 is on another partition.
Solution:   Use $VIM for the viminfo file when it is defined, like for MSDOS.
	    Also: Makefile.os2 didn't depend on os_unix.h.
Files:	    src/os_unix.h, src/Makefile.os2

Patch 5.5a.14
Problem:    Athena, Motif and GTK: The Mouse scroll wheel doesn't work.
Solution:   Interpret a click of the wheel as a key press of the <MouseDown>
	    or <MouseUp> keys.  Default behavior is to scroll three lines, or
	    a full page when Shift is used.
Files:	    src/edit.c, src/ex_getln.c, src/gui.c, src/gui_gtk_x11.c,
	    src/gui_x11.c, src/keymap.h, src/message.c, src/misc1.c,
	    src/misc2.c, src/normal.c,  src/proto/normal.pro, src/vim.h,
	    runtime/doc/scroll.txt

Patch 5.5a.15
Problem:    Using CTRL-A in Insert mode doesn't work correctly when the insert
	    started with the <Insert> key. (Andreas Rohrschneider)
Solution:   Replace <Insert> with "i" before setting up the redo buffer.
Files:	    src/normal.c

Patch 5.5a.16
Problem:    VMS: GUI does not compile and run.
Solution:   Various fixes. (Zoltan Arpadffy)
	    Moved functions from os_unix.c to ui.c, so that VMS can use them
	    too: open_app_context(), x11_setup_atoms() and clip_x11* functions.
	    Made xterm_dpy global, it's now used by ui.c and os_unix.c.
	    Use gethostname() always, sys_hostname doesn't exist.
Files:	    src/globals.h, src/gui_x11.c, src/os_vms.mms, src/os_unix.c,
	    src/os_vms.c, src/ui.c, src/proto/os_unix.pro, src/proto/ui.pro

Renamed AdjustCursorForMultiByteCharacter() to AdjustCursorForMultiByteChar()
to avoid symbol length limit of 31 characters. (Steve P. Wall)

Patch 5.5b.1
Problem:    SASC complains about dead assignments and implicit type casts.
Solution:   Removed the dead assignments.  Added explicit type casts.
Files:	    src/buffer.c, src/edit.c, src/eval.c, src/ex_cmds.c,
	    src/ex_getln.c, src/fileio.c, src/getchar.c, src/memline.c,
	    src/menu.c, src/misc1.c, src/normal.c, src/ops.c, src/quickfix.c,
	    src/screen.c

Patch 5.5b.2
Problem:    When using "CTRL-O O" in Insert mode, hit <Esc> and then "o" in
	    another line truncates that line. (Devin Weaver)
Solution:   When using a command that starts Insert mode from CTRL-O, reset
	    "restart_edit" first.  This avoids that edit() is called with a
	    mix of starting a new edit command and restarting a previous one.
Files:	    src/normal.c

==============================================================================
VERSION 5.6						*version-5.6*

Version 5.6 is a bug-fix version of 5.5.


Changed							*changed-5.6*
-------

Small changes to OleVim files. (Christian Schaller)

Inserted "/**/" between patch numbers in src/version.c.  This allows for one
line of context, which some versions of patch need.

Reordered the Syntax menu to avoid long submenus.  Removed keyboard shortcuts
for alphabetical items to avoid a clash with fixed items.


Added							*added-5.6*
-----

Included Exuberant Ctags version 3.4. (Darren Hiebert)

OpenWithVim in Python. (Christian Schaller)

Win32 GUI: gvimext.dll, for the context menu "Edit with Vim" entry.  Avoids
the reported problems with the MS Office taskbar.  Now it's a Shell Extension.
(Tianmiao Hu)

New syntax files:
abel		Abel (John Cook)
aml		Arc Macro Language (Nikki Knuit)
apachestyle	Apache-style config file (Christian Hammers)
cf		Cold Fusion (Jeff Lanzarotta)
ctrlh		files with CTRL-H sequences (Bram Moolenaar)
cupl		CUPL (John Cook)
cuplsim		CUPL simulation (John Cook)
erlang		Erlang (Kresimir Marzic)
gedcom		Gedcom (Paul Johnson)
icon		Icon (Wendell Turner)
ist		MakeIndex style (Peter Meszaros)
jsp		Java Server Pages (Rafael Garcia-Suarez)
rcslog		Rcslog (Joe Karthauser)
remind		Remind (Davide Alberani)
sqr		Structured Query Report Writer (Paul Moore)
tads		TADS (Amir Karger)
texinfo		Texinfo (Sandor Kopanyi)
xpm2		X Pixmap v2 (Steve Wall)

The 'C' flag in 'cpoptions' can be used to switch off concatenation for
sourced lines.  See patch 5.5.013 below. |line-continuation|

"excludenl" argument for the ":syntax" command.  See patch 5.5.032 below.
|:syn-excludenl|

Implemented |z+| and |z^| commands.  See patch 5.5.050 below.

Vim logo in Corel Draw format.  Can be scaled to any resolution.


Fixed							*fixed-5.6*
-----

Using this mapping in Select mode, terminated completion:
":vnoremap <C-N> <Esc>a<C-N>" (Benji Fisher)
Ignore K_SELECT in ins_compl_prep().

VMS (Zoltan Arpadffy, David Elins):
- ioctl() in pty.c caused trouble, #ifndef VMS added.
- Cut & paste mismatch corrected.
- Popup menu line crash corrected.  (Patch 5.5.047)
- Motif directories during open and save as corrected.
- Handle full file names with version numbers. (Patch 5.5.046)
- Directory handling (CD command etc.)
- Corrected file name conversion VMS to Unix and v.v.
- Recovery was not working.
- Terminal and signal handling was outdated compared to os_unix.c.
- Improved os_vms.txt.

Configure used fprintf() instead of printf() to check for __DATE__ and
__TIME__. (John Card II)

BeOS: Adjust computing the char_height and char_ascent.  Round them up
separately, avoids redrawing artifacts. (Mike Steed)

Fix a few multi-byte problems in menu_name_skip(), set_reg_ic(), searchc() and
findmatchlimit(). (Taro Muraoka)

GTK GUI:
- With GTK 1.2.5 and later the scrollbars were not redrawn correctly.
- Adjusted the gtk_form_draw() function.
- SNiFF connection didn't work.
- 'mousefocus' was not working. (Dalecki)
- Some keys were not working with modifiers: Shift-Tab, Ctrl-Space and CTRL-@.


Patch 5.5.001
Problem:    Configure in the top directory did not pass on an argument with a
	    space correctly.  For example "./configure --previs="/My home".
	    (Stephane Chazelas)
Solution:   Use '"$@"' instead of '$*' to pass on the arguments.
Files:	    configure

Patch 5.5.002
Problem:    Compilation error for using "fds[] & POLLIN". (Jeff Walker)
Solution:   Use "fds[].revents & POLLIN".
Files:	    src/os_unix.c

Patch 5.5.003
Problem:    The autoconf check for sizeof(int) is wrong on machines where
	    sizeof(size_t) != sizeof(int).
Solution:   Use our own configure check.  Also fixes the warning for
	    cross-compiling.
Files:	    src/configure.in, src/configure

Patch 5.5.004
Problem:    On Unix it's not possible to interrupt ":sleep 100".
Solution:   Switch terminal to cooked mode while asleep, to allow a SIGINT to
	    wake us up.  But switch off echo, added TMODE_SLEEP.
Files:	    src/term.h, src/os_unix.c

Patch 5.5.005
Problem:    When using <f-args> with a user command, an empty argument to the
	    command resulted in one empty string, while no string was
	    expected.
Solution:   Catch an empty argument and pass no argument to the function.
	    (Paul Moore)
Files:	    src/ex_docmd.c

Patch 5.5.006
Problem:    Python: When platform-dependent files are in another directory
	    than the platform-independent files it doesn't work.
Solution:   Also check the executable directory, and add it to CFLAGS. (Tessa
	    Lau)
Files:	    src/configure.in, src/configure

Patch 5.5.007 (extra)
Problem:    Win32 OLE: Occasional crash when exiting while still being used
	    via OLE.
Solution:   Move OleUninitialize() to before deleting the application object.
	    (Vince Negri)
Files:	    src/if_ole.cpp

Patch 5.5.008
Problem:    10000@@ takes a long time and cannot be interrupted.
Solution:   Check for CTRL-C typed while in the loop to push the register.
Files:	    src/normal.c

Patch 5.5.009
Problem:    Recent Sequent machines don't link with "-linet". (Kurtis Rader)
Solution:   Remove configure check for Sequent.
Files:	    src/configure.in, src/configure

Patch 5.5.010
Problem:    Ctags freed a memory block twice when exiting.  When out of
	    memory, a misleading error message was given.
Solution:   Update to ctags 3.3.2.  Also fixes a few other problems. (Darren
	    Hiebert)
Files:	    src/ctags/*

Patch 5.5.011
Problem:    After "CTRL-V s", the cursor jumps back to the start, while all
	    other operators leave the cursor on the last changed character.
	    (Xiangjiang Ma)
Solution:   Position cursor on last changed character, if possible.
Files:	    src/ops.c

Patch 5.5.012
Problem:    Using CTRL-] in Visual mode doesn't work when the text includes a
	    space (just where it's useful). (Stefan Bittner)
Solution:   Don't escape special characters in a tag name with a backslash.
Files:	    src/normal.c

Patch 5.5.013
Problem:    The ":append" and ":insert" commands allow using a leading
	    backslash in a line.  The ":source" command concatenates those
	    lines. (Heinlein)
Solution:   Add the 'C' flag in 'cpoptions' to switch off concatenation.
Files:	    src/ex_docmd.c, src/option.h, runtime/doc/options.txt,
	    runtime/filetype.vim, runtime/scripts.vim

Patch 5.5.014
Problem:    When executing a register with ":@", the ":append" command would
	    get text lines with a ':' prepended. (Heinlein)
Solution:   Remove the ':' characters.
Files:	    src/ex_docmd.c, src/ex_getln.c, src/globals.h

Patch 5.5.015
Problem:    When using ":g/pat/p", it's hard to see where the output starts,
	    the ":g" command is overwritten.  Vi keeps the ":g" command.
Solution:   Keep the ":g" command, but allow overwriting it with the report
	    for the number of changes.
Files:	    src/ex_cmds.c

Patch 5.5.016 (extra)
Problem:    Win32: Using regedit to install Vim in the popup menu requires the
	    user to confirm this in a dialog.
Solution:   Use "regedit /s" to avoid the dialog
Files:	    src/dosinst.c

Patch 5.5.017
Problem:    If an error occurs when closing the current window, Vim could get
	    stuck in the error handling.
Solution:   Don't set curwin to NULL when closing the current window.
Files:	    src/window.c

Patch 5.5.018
Problem:    Absolute paths in shell scripts do not always work.
Solution:   Use /usr/bin/env to find out the path.
Files:	    runtime/doc/vim2html.pl, runtime/tools/efm_filter.pl,
	    runtime/tools/shtags.pl

Patch 5.5.019
Problem:    A function call in 'statusline' stops using ":q" twice from
	    exiting, when the last argument hasn't been edited.
Solution:   Don't decrement quitmore when executing a function. (Madsen)
Files:	    src/ex_docmd.c

Patch 5.5.020
Problem:    When the output of CTRL-D completion in the commandline goes all
	    the way to the last column, there is an empty line.
Solution:   Don't add a newline when the cursor wrapped already. (Madsen)
Files:	    src/ex_getln.c

Patch 5.5.021
Problem:    When checking if a file name in the tags file is relative,
	    environment variables were not expanded.
Solution:   Expand the file name before checking if it is relative. (Madsen)
Files:	    src/tag.c

Patch 5.5.022
Problem:    When setting or resetting 'paste' the ruler wasn't updated.
Solution:   Update the status lines when 'ruler' changes because of 'paste'.
Files:	    src/option.c

Patch 5.5.023
Problem:    When editing a new file and autocommands change the cursor
	    position, the cursor was moved back to the first non-white, unless
	    'startofline' was reset.
Solution:   Keep the new column, just like the line number.
Files:	    src/ex_cmds.c

Patch 5.5.024 (extra)
Problem:    Win32 GUI: When using confirm() to put up a dialog without a
	    default button, the dialog would not have keyboard focus.
	    (Krishna)
Solution:   Always set focus to the dialog window.  Only set focus to a button
	    when a default one is specified.
Files:	    src/gui_w32.c

Patch 5.5.025
Problem:    When using "keepend" in a syntax region, a contained match that
	    includes the end-of-line could still force that region to
	    continue, if there is another contained match in between.
Solution:   Check the keepend_level in check_state_ends().
Files:	    src/syntax.c

Patch 5.5.026
Problem:    When starting Vim in a white-on-black xterm, with 'bg' set to
	    "dark", and then starting the GUI with ":gui", setting 'bg' to
	    "light" in the gvimrc, the highlighting isn't set.  (Tsjokwing)
Solution:   Set the highlighting when 'bg' is changed in the gvimrc, even
	    though full_screen isn't set.
Files:	    src/option.c

Patch 5.5.027
Problem:    Unix: os_unix.c doesn't compile when XTERM_CLIP is used but
	    WANT_TITLE isn't. (Barnum)
Solution:   Move a few functions that are used by the X11 title and clipboard
	    and put another "#if" around it.
Files:	    src/os_unix.c

Patch 5.5.028 (extra)
Problem:    Win32 GUI: When a file is dropped on Win32 gvim while at the ":"
	    prompt, the file is edited but the command line is actually still
	    there, the cursor goes back to command line on the next command.
	    (Krishna)
Solution:   When dropping a file or directory on gvim while at the ":" prompt,
	    insert the name of the file/directory.  Allows using the
	    file/directory name for any Ex command.
Files:	    src/gui_w32.c

Patch 5.5.029
Problem:    "das" at the end of the file didn't delete the last character of
	    the sentence.
Solution:   When there is no character after the sentence, make the operation
	    inclusive in current_sent().
Files:	    src/search.c

Patch 5.5.030
Problem:    Unix: in os_unix.c, "term_str" is used, which is also defined in
	    vim.h as a macro. (wuxin)
Solution:   Renamed "term_str" to "buf" in do_xterm_trace().
Files:	    src/os_unix.c

Patch 5.5.031 (extra)
Problem:    Win32 GUI: When exiting Windows, gvim will leave swap files behind
	    and will be killed ungracefully. (Krishna)
Solution:   Catch the WM_QUERYENDSESSION and WM_ENDSESSION messages and try to
	    exit gracefully.  Allow the user to cancel the shutdown if there
	    is a changed buffer.
Files:	    src/gui_w32.c

Patch 5.5.032
Problem:    Patch 5.5.025 wasn't right.  And C highlighting was still not
	    working correctly for a #define.
Solution:   Added "excludenl" argument to ":syntax", to be able not to extend
	    a containing item when there is a match with the end-of-line.
Files:	    src/syntax.c, runtime/doc/syntax.txt, runtime/syntax/c.vim

Patch 5.5.033
Problem:    When reading from stdin, a long line in viminfo would mess up the
	    file message.  readfile() uses IObuff for keep_msg, which could be
	    overwritten by anyone.
Solution:   Copy the message from IObuff to msg_buf and set keep_msg to that.
	    Also change vim_fgets() to not use IObuff any longer.
Files:	    src/fileio.c

Patch 5.5.034
Problem:    "gvim -rv" caused a crash.  Using 't_Co' before it's set.
Solution:   Don't try to initialize the highlighting before it has been
	    initialized from main().
Files:	    src/syntax.c

Patch 5.5.035
Problem:    GTK with XIM: Resizing with status area was messy, and
	    ":set guioptions+=b" didn't work.
Solution:   Make status area a separate widget, but not a separate window.
	    (Chi-Deok Hwang)
Files:	    src/gui_gtk_f.c, src/gui_gtk_x11.c, src/multbyte.c

Patch 5.5.036
Problem:    The GZIP_read() function in $VIMRUNTIME/vimrc_example.vim to
	    uncompress a file did not do detection for 'fileformat'.  This is
	    because the filtering is done with 'binary' set.
Solution:   Split the filtering into separate write, filter and read commands.
Files:	    runtime/vimrc_example.vim

Patch 5.5.037
Problem:    The "U" command didn't mark the buffer as changed. (McCormack)
Solution:   Set the 'modified' flag when using "U".
Files:	    src/undo.c

Patch 5.5.038
Problem:    When typing a long ":" command, so that the screen scrolls up,
	    causes the hit-enter prompt, even though the user just typed
	    return to execute the command.
Solution:   Reset need_wait_return if (part of) the command was typed in
	    getcmdline().
Files:	    src/ex_getln.c

Patch 5.5.039
Problem:    When using a custom status line, "%a" (file # of #) reports the
	    index of the current window for all windows.
Solution:   Pass a window pointer to append_arg_number(), and pass the window
	    being updated from build_stl_str_hl(). (Stephen P. Wall)
Files:	    src/buffer.c, src/screen.c, src/proto/buffer.pro

Patch 5.5.040
Problem:    Multi-byte: When there is some error in xim_real_init(), it can
	    close XIM and return.  After this there can be a segv.
Solution:   Test "xic" for being non-NULL, don't set "xim" to NULL.  Also try
	    to find more matches for supported styles. (Sung-Hyun Nam)
Files:	    src/multbyte.c

Patch 5.5.041
Problem:    X11 GUI: CTRL-_ requires the SHIFT key only on some machines.
Solution:   Translate CTRL-- to CTRL-_. (Robert Webb)
Files:	    src/gui_x11.c

Patch 5.5.042
Problem:    X11 GUI: keys with ALT were assumed to be used for the menu, even
	    when the menu has been disabled by removing 'm' from 'guioptions'.
Solution:   Ignore keys with ALT only when gui.menu_is_active is set. (Raf)
Files:	    src/gui_x11.c

Patch 5.5.043
Problem:    GTK: Handling of fontset fonts was not right when 'guifontset'
	    contains exactly 14 times '-'.
Solution:   Avoid setting fonts when working with a fontset. (Sung-Hyun Nam)
Files:	    src/gui_gtk_x11.c

Patch 5.5.044
Problem:    pltags.pl contains an absolute path "/usr/local/bin/perl".  That
	    might not work everywhere.
Solution:   Use "/usr/bin/env perl" instead.
Files:	    runtime/tools/pltags.pl

Patch 5.5.045
Problem:    Using "this_session" variable does not work, requires preceding it
	    with "v:".  Default filename for ":mksession" isn't mentioned
	    in the docs. (Fisher)
Solution:   Support using "this_session" to be backwards compatible.
Files:	    src/eval.c, runtime/doc/options.txt

Patch 5.5.046 (extra)
Problem:    VMS: problems with path and filename.
Solution:   Truncate file name at last ';', etc. (Zoltan Arpadffy)
Files:	    src/buffer.c, src/fileio.c, src/gui_motif.c, src/os_vms.c,
	    src/proto/os_vms.pro

Patch 5.5.047
Problem:    VMS: Crash when using the popup menu
Solution:   Turn the #define MENU_MODE_CHARS into an array. (Arpadffy)
Files:	    src/structs.h, src/menu.c

Patch 5.5.048
Problem:    HP-UX 11: Compiling doesn't work, because both string.h and
	    strings.h are included. (Squassabia)
Solution:   The configure test for including both string.h and strings.h
	    must include <Xm/Xm.h> first, because it causes problems.
Files:	    src/configure.in, src/configure, src/config.h.in

Patch 5.5.049
Problem:    Unix: When installing Vim, the protection bits of files might be
	    influenced by the umask.
Solution:   Add $(FILEMOD) to Makefile. (Shetye)
Files:	    src/Makefile

Patch 5.5.050
Problem:    "z+" and "z^" commands are missing.
Solution:   Implemented "z+" and "z^".
Files:	    src/normal.c, runtime/doc/scroll.txt, runtime/doc/index.txt

Patch 5.5.051
Problem:    Several Unix systems have a problem with the optimization limits
	    check in configure.
Solution:   Removed the configure check, let the user add it manually in
	    Makefile or the environment.
Files:	    src/configure.in, src/configure, src/Makefile

Patch 5.5.052
Problem:    Crash when using a cursor key at the ATTENTION prompt. (Alberani)
Solution:   Ignore special keys at the console dialog.  Also ignore characters
	    > 255 for other uses of tolower() and toupper().
Files:	    src/menu.c, src/message.c, src/misc2.c

Patch 5.5.053
Problem:    Indenting is wrong after a function when 'cino' has "fs".  Another
	    problem when 'cino' has "{s".
Solution:   Put line after closing "}" of a function at the left margin.
	    Apply ind_open_extra in the right way after a '{'.
Files:	    src/misc1.c, src/testdir/test3.in, src/testdir/test3.ok

Patch 5.5.054
Problem:    Unix: ":e #" doesn't work if the alternate file name contains a
	    space or backslash. (Hudacek)
Solution:   When replacing "#", "%" or other items that stand for a file name,
	    prepend a backslash before special characters.
Files:	    src/ex_docmd.c

Patch 5.5.055
Problem:    Using "<C-V>$r-" in blockwise Visual mode replaces one character
	    beyond the end of the line. (Zivkov)
Solution:   Only replace existing characters.
Files:	    src/ops.c

Patch 5.5.056
Problem:    After "z20<CR>" messages were printed at the old command line
	    position once.  (Veselinovic)
Solution:   Set msg_row and msg_col when changing cmdline_row in
	    win_setheight().
Files:	    src/window.c

Patch 5.5.057
Problem:    After "S<Esc>" it should be possible to restore the line with "U".
	    (Veselinovic)
Solution:   Don't call u_clearline() in op_delete() when changing only one
	    line.
Files:	    src/ops.c

Patch 5.5.058
Problem:    Using a long search pattern and then "n" causes the hit-enter
	    prompt.  (Krishna)
Solution:   Truncate the echoed pattern, like other messages.  Moved code for
	    truncating from msg_attr() to msg_strtrunc().
Files:	    src/message.c, src/proto/message.pro, src/search.c

Patch 5.5.059
Problem:    GTK GUI: When $term is invalid, using "gvim" gives an error
	    message, even though $term isn't really used.  (Robbins)
Solution:   When the GUI is about to start, skip the error messages for a
	    wrong $term.
Files:	    src/term.c

Patch 5.5.060 (extra)
Problem:    Dos 32 bit: When a directory in 'backupdir' doesn't exist, ":w"
	    causes the file to be renamed to "axlqwqhy.ba~". (Matzdorf)
Solution:   The code to work around a LFN bug in Windows 95 doesn't handle a
	    non-existing target name correctly.  When renaming fails, make
	    sure the file has its original name.  Also do this for the Win32
	    version, although it's unlikely that it runs into this problem.
Files:	    src/os_msdos.c, src/os_win32.c

Patch 5.5.061
Problem:    When using "\:" in a modeline, the backslash is included in the
	    option value. (Mohsin)
Solution:   Remove one backslash before the ':' in a modeline.
Files:	    src/buffer.c, runtime/doc/options.txt

Patch 5.5.062 (extra)
Problem:    Win32 console: Temp files are created in the root of the current
	    drive, which may be read-only. (Peterson)
Solution:   Use the same mechanism of the GUI version: Use $TMP, $TEMP or the
	    current directory.  Cleaned up vim_tempname() a bit.
Files:	    src/fileio.c, src/os_win32.h, runtime/doc/os_dos.txt

Patch 5.5.063
Problem:    When using whole-line completion in Insert mode, 'cindent' is
	    applied, even after changing the indent of the line.
Solution:   Don't reindent the completed line after inserting/removing indent.
	    (Robert Webb)
Files:	    src/edit.c

Patch 5.5.064
Problem:    has("sniff") doesn't work correctly.
Solution:   Return 1 when Vim was compiled with the +sniff feature. (Pruemmer)
Files:	    src/eval.c

Patch 5.5.065
Problem:    When dropping a file on Vim, the 'shellslash' option is not
	    effective. (Krishna)
Solution:   Fix the slashes in the dropped file names according to
	    'shellslash'.
Files:	    src/ex_docmd.c, runtime/doc/options.txt

Patch 5.5.066
Problem:    For systems with backslash in file name: Setting a file name
	    option to a value starting with "\\machine" removed a backslash.
Solution:   Keep the double backslash for "\\machine", but do change
	    "\\\\machine" to "\\machine" for backwards compatibility.
Files:	    src/option.c, runtime/doc/options.txt

Patch 5.5.067
Problem:    With 'hlsearch' set, the pattern "\>" doesn't highlight the first
	    match in a line. (Benji Fisher)
Solution:   Fix highlighting an empty match.  Also highlight the first
	    character in an empty line for "$".
Files:	    src/screen.c

Patch 5.5.068
Problem:    Crash when a ":while" is used with an argument that has an error.
	    (Sylvain Viart)
Solution:   Was using an uninitialized index in the cs_line[] array.  The
	    crash only happened when the index was far off.  Made sure the
	    uninitialized index isn't used.
Files:	    src/ex_docmd.c

Patch 5.5.069
Problem:    Shifting lines in blockwise Visual mode didn't set the 'modified'
	    flag.
Solution:   Do set the 'modified' flag.
Files:	    src/ops.c

Patch 5.5.070
Problem:    When editing a new file, creating that file outside of Vim, then
	    editing it again, ":w" still warns for overwriting an existing
	    file. (Nam)
Solution:   The BF_NEW flag in the "b_flags" field wasn't cleared properly.
Files:	    src/buffer.c, src/fileio.c

Patch 5.5.071
Problem:    Using a matchgroup in a ":syn region", which is the same syntax
	    group as the region, didn't stop a contained item from matching in
	    the start pattern.
Solution:   Also push an item on the stack when the syntax ID of the
	    matchgroup is the same as the syntax ID of the region.
Files:	    src/syntax.c

Patch 5.5.072 (extra)
Problem:    Dos 32 bit: When setting 'columns' to a too large value, Vim may
	    crash, and the DOS console too.
Solution:   Check that the value of 'columns' isn't larger than the number of
	    columns that the BIOS reports.
Files:	    src/os_msdos.c, src/proto/os_msdos.pro, src/option.c

Patch 5.5.073 (extra)
Problem:    Win 32 GUI: The Find and Find/Replace dialogs didn't show the
	    "match case" checkbox.  The Find/Replace dialog didn't handle the
	    "match whole word" checkbox.
Solution:   Support the "match case" and "match whole word" checkboxes.
Files:	    src/gui_w32.c

Patch 5.6a.001
Problem:    Using <C-End> with a count doesn't work like it does with "G".
	    (Benji Fisher)
Solution:   Accept a count for <C-End> and <C-Home>.
Files:	    src/normal.c

Patch 5.6a.002
Problem:    The script for conversion to HTML was an older version.
Solution:   Add support for running 2html.vim on a color terminal.
Files:	    runtime/syntax/2html.vim

Patch 5.6a.003
Problem:    Defining a function inside a function didn't give an error
	    message.  A missing ":endfunction" doesn't give an error message.
Solution:   Allow defining a function inside a function.
Files:	    src/eval.c, runtime/doc/eval.txt

Patch 5.6a.004
Problem:    A missing ":endwhile" or ":endif" doesn't give an error message.
	    (Johannes Zellner)
Solution:   Check for missing ":endwhile" and ":endif" in sourced files.
	    Add missing ":endif" in file selection macros.
Files:	    src/ex_docmd.c, runtime/macros/file_select.vim

Patch 5.6a.005
Problem:    'hlsearch' was not listed alphabetically.  The value of 'toolbar'
	    was changed when 'compatible' is set.
Solution:   Moved entry of 'hlsearch' in options[] table down.
	    Don't reset 'toolbar' option to the default value when
	    'compatible' is set.
Files:	    src/option.c

Patch 5.6a.006
Problem:    Using a backwards range inside ":if 0" gave an error message.
Solution:   Don't complain about a range when it is not going to be used.
	    (Stefan Roemer)
Files:	    src/ex_docmd.c

Patch 5.6a.007
Problem:    ":let" didn't show internal Vim variables.  (Ron Aaron)
Solution:   Do show ":v" variables for ":let" and ":let v:name".
Files:	    src/eval.c

Patch 5.6a.008
Problem:    Selecting a syntax from the Syntax menu gives an error message.
Solution:   Replace "else if" in SetSyn() with "elseif".  (Ronald Schild)
Files:	    runtime/menu.vim

Patch 5.6a.009
Problem:    When compiling with +extra_search but without +syntax, there is a
	    compilation error in screen.c. (Axel Kielhorn)
Solution:   Adjust the #ifdef for declaring and initializing "line" in
	    win_line().  Also solve compilation problem when +statusline is
	    used without +eval.  Another one when +cmdline_compl is used
	    without +eval.
Files:	    src/screen.c, src/misc2.c

Patch 5.6a.010
Problem:    In a function, ":startinsert!" does not append to the end of the
	    line if a ":normal" command was used to move the cursor. (Fisher)
Solution:   Reset "w_set_curswant" to avoid that w_curswant is changed again.
Files:	    src/ex_docmd.c

Patch 5.6a.011 (depends on 5.6a.004)
Problem:    A missing ":endif" or ":endwhile" in a function doesn't give an
	    error message.
Solution:   Give that error message.
Files:	    src/ex_docmd.c

Patch 5.6a.012 (depends on 5.6a.008)
Problem:    Some Syntax menu entries caused a hit-enter prompt.
Solution:   Call a function to make the command shorter.  Also rename a few
	    functions to avoid name clashes.
Files:	    runtime/menu.vim

Patch 5.6a.013
Problem:    Command line completion works different when another completion
	    was done earlier. (Johannes Zellner)
Solution:   Reset wim_index when starting a new completion.
Files:	    src/ex_getln.c

Patch 5.6a.014
Problem:    Various warning messages when compiling and running lint with
	    different combinations of features.
Solution:   Fix the warning messages.
Files:	    src/eval.c, src/ex_cmds.c, src/ex_docmd.c, src/gui_gtk_x11.c,
	    src/option.c, src/screen.c, src/search.c, src/syntax.c,
	    src/feature.h, src/globals.h

Patch 5.6a.015
Problem:    The vimtutor command doesn't always know the value of $VIMRUNTIME.
Solution:   Let Vim expand $VIMRUNTIME, instead of the shell.
Files:	    src/vimtutor

Patch 5.6a.016 (extra)
Problem:    Mac: Window size is restricted when starting.  Cannot drag the
	    window all over the desktop.
Solution:   Get real screen size instead of assuming 640x400.  Do not use a
	    fixed number for the drag limits. (Axel Kielhorn)
Files:	    src/gui_mac.c

Patch 5.6a.017
Problem:    The "Paste" entry in popup menu for Visual, Insert and Cmdline
	    mode is in the wrong position. (Stol)
Solution:   Add priority numbers for all Paste menu entries.
Files:	    runtime/menu.vim

Patch 5.6a.018
Problem:    GTK GUI: submenu priority doesn't work.
	    Help dialog could be destroyed too soon.
	    When closing a dialog window (e.g. the "ATTENTION" one), Vim would
	    just hang.
	    When GTK theme is changed, Vim doesn't adjust to the new colors.
	    Argument for ":promptfind" isn't used.
Solution:   Fixed the mentioned problems.
	    Made the dialogs look&feel nicer.
	    Moved functions to avoid the need for a forward declaration.
	    Fixed reentrancy of the file browser dialog.
	    Added drag&drop support for GNOME.
	    Init the text for the Find/replace dialog from the last used
	    search string.  Set "match whole word" toggle button correctly.
	    Made repeat rate for drag outside of window depend on the
	    distance from the window.  (Marcin Dalecki)
	    Made the drag in Visual mode actually work.
	    Removed recursiveness protection from gui_mch_get_rgb(), it might
	    cause more trouble than it solves.
Files:	    src/ex_docmd.c, src/gui_gtk.c, src/gui_gtk_x11.c, src/ui.c,
	    src/proto/ui.pro, src/misc2.c

Patch 5.6a.019
Problem:    When trying to recover through NFS, which uses a large block size,
	    Vim might think the swap file is empty, because mf_blocknr_max is
	    zero.  (Scott McDermott)
Solution:   When computing the number of blocks of the file in mf_open(),
	    round up instead of down.
Files:	    src/memfile.c

Patch 5.6a.020
Problem:    GUI GTK: Could not set display for gvim.
Solution:   Add "-display" and "--display" arguments. (Marcin Dalecki)
Files:	    src/gui_gtk_x11.c

Patch 5.6a.021
Problem:    Recovering still may not work when the block size of the device
	    where the swap file is located is larger than 4096.
Solution:   Read block 0 with the minimal block size.
Files:	    src/memline.c, src/memfile.c, src/vim.h

Patch 5.6a.022 (extra)
Problem:    Win32 GUI: When an error in the vimrc causes a dialog to pop up
	    (e.g., for an existing swap file), Vim crashes. (David Elins)
Solution:   Before showing a dialog, open the main window.
Files:	    src/gui_w32.c

Patch 5.6a.023
Problem:    Using expand("%:gs??/?") causes a crash. (Ron Aaron)
Solution:   Check for running into the end of the string in do_string_sub().
Files:	    src/eval.c

Patch 5.6a.024
Problem:    Using an autocommand to delete a buffer when leaving it can cause
	    a crash when jumping to a tag. (Franz Gorkotte)
Solution:   In do_tag(), store tagstacklen before jumping to another buffer.
	    Check tagstackidx after jumping to another buffer.
	    Add extra check in win_split() if tagname isn't NULL.
Files:	    src/tag.c, src/window.c

Patch 5.6a.025 (extra)
Problem:    Win32 GUI: The tables for toupper() and tolower() are initialized
	    too late. (Mike Steed)
Solution:   Move the initialization to win32_init() and call it from main().
Files:	    src/main.c, src/os_w32.c, src/proto/os_w32.pro

Patch 5.6a.026
Problem:    When the SNiFF connection is open, shell commands hang. (Pruemmer)
Solution:   Skip a second wait() call if waitpid() already detected that the
	    child has exited.
Files:	    src/os_unix.c

Patch 5.6a.027 (extra)
Problem:    Win32 GUI: The "Edit with Vim" popup menu entry causes problems
	    for the Office toolbar.
Solution:   Use a shell extension dll. (Tianmiao Hu)
	    Added it to the install and uninstal programs, replaces the old
	    "Edit with Vim" menu registry entries.
Files:	    src/dosinst.c, src/uninstal.c, gvimext/*, runtime/doc/gui_w32.txt

Patch 5.6a.028 (extra)
Problem:    Win32 GUI: Dialogs and tear-off menus can't handle multi-byte
	    characters.
Solution:   Adjust nCopyAnsiToWideChar() to handle multi-byte characters
	    correctly.
Files:	    src/gui_w32.c

==============================================================================
VERSION 5.7						*version-5.7*

Version 5.7 is a bug-fix version of 5.6.

Changed							*changed-5.7*
-------

Renamed src/INSTALL.mac to INSTALL_mac.txt to avoid it being recognized with a
wrong file type.  Also renamed src/INSTALL.amiga to INSTALL_ami.txt.


Added							*added-5.7*
-----

New syntax files:
stp		Stored Procedures (Jeff Lanzarotta)
snnsnet, snnspat, snnsres	SNNS (Davide Alberani)
mel		MEL (Robert Minsk)
ruby		Ruby (Mirko Nasato)
tli		TealInfo (Kurt W. Andrews)
ora		Oracle config file (Sandor Kopanyi)
abaqus		Abaqus (Carl Osterwisch)
jproperties	Java Properties (Simon Baldwin)
apache		Apache config (Allan Kelly)
csp		CSP (Jan Bredereke)
samba		Samba config (Rafael Garcia-Suarez)
kscript		KDE script (Thomas Capricelli)
hb		Hyper Builder (Alejandro Forero Cuervo)
fortran		Fortran (rewritten) (Ajit J. Thakkar)
sml		SML (Fabrizio Zeno Cornelli)
cvs		CVS commit (Matt Dunford)
aspperl		ASP Perl (Aaron Hope)
bc		BC calculator (Vladimir Scholtz)
latte		Latte (Nick Moffitt)
wml		WML (Gerfried Fuchs)

Included Exuberant ctags 3.5.1. (Darren Hiebert)

"display" and "fold" arguments for syntax items.  For future extension, they
are ignored now.

strftime() function for the Macintosh.

macros/explorer.vim: A file browser script (M A Aziz Ahmed)


Fixed							*fixed-5.7*
-----

The 16 bit MS-DOS version is now compiled with Bcc 3.1 instead of 4.0.  The
executable is smaller.

When a "make test" failed, the output file was lost.  Rename it to
test99.failed to be able to see what went wrong.

After sourcing bugreport.vim, it's not clear that bugreport.txt has been
written in the current directory.  Edit bugreport.txt to avoid that.

Adding IME support when using Makefile.w32 didn't work. (Taro Muraoka)

Win32 console: Mouse drags were passed on even when the mouse didn't move.

Perl interface: In Buffers(), type of argument to SvPV() was int, should be
STRLEN. (Tony Leneis)

Problem with prototype for index() on AIX 4.3.0.  Added check for _AIX43 in
os_unix.h. (Jake Hamby)

Mappings in mswin.vim could break when some commands are mapped.  Add "nore"
to most mappings to avoid re-mapping.

modify_fname() made a copy of a file name for ":p" when it already was a full
path name, which is a bit slow.

Win32 with Borland C++ 5.5: Pass the path to the compiler on to xxd and ctags,
to avoid depending on $PATH.  Fixed "make clean".

Many fixes to Macintosh specific parts: (mostly by Dany StAmant)
- Only one Help menu.
- No more crash when removing a menu item.
- Support as External Editor for Codewarrior (still some little glitches).
- Popup menu support.
- Fixed crash when pasting after application switch.
- Color from rgb.txt properly displayed.
- 'isprint' default includes all chars above '~'. (Axel Kielhorn)
- mac_expandpath() was leaking memory.
- Add digraphs table. (Axel Kielhorn)
- Multi-byte support: (Kenichi Asai)
  Switch keyscript when going in/out of Insert mode.
  Draw multi-byte character correctly.
  Don't use mblen() but highest bit of char to detect multi-byte char.
  Display value of multi-byte in statusline (also for other systems).
- mouse button was not initialized properly to MOUSE_LEFT when
  USE_CTRLCLICKMENU not defined.
- With Japanese SJIS characters: Make "w", "b", and "e" work
  properly.  (Kenichi Asai)
- Replaced old CodeWarrior file os_mac.CW9.hqx with os_mac.cw5.sit.hqx.

Fixes for VMS: (Zoltan Arpadffy) (also see patch 5.6.045 below)
- Added Makefile_vms.mms and vimrc.vms to src/testdir to be able to run the
  tests.
- Various fixes.
- Set 'undolevels' to 1000 by default.
- Made mch_settitle() equivalent to the one in os_unix.c.

RiscOS: A few prototypes for os_riscos.c were outdated.  Generate prototypes
automatically.


Previously released patches:

Patch 5.6.001
Problem:    When using "set bs=0 si cin", Inserting "#<BS>" or "}<BS>" which
	    reduces the indent doesn't delete the "#" or "}". (Lorton)
Solution:   Adjust ai_col in ins_try_si().
Files:	    src/edit.c

Patch 5.6.002
Problem:    When using the vim.vim syntax file, a comment with all uppercase
	    characters causes a hang.
Solution:   Adjust pattern for vimCommentTitle (Charles Campbell)
Files:	    runtime/syntax/vim.vim

Patch 5.6.003
Problem:    GTK GUI: Loading a user defined toolbar bitmap gives a warning
	    about the colormap.  Probably because the window has not been
	    opened yet.
Solution:   Use gdk_pixmap_colormap_create_from_xpm() to convert the xpm file.
	    (Keith Radebaugh)
Files:	    src/gui_gtk.c

Patch 5.6.004 (extra)
Problem:    Win32 GUI with IME: When setting 'guifont' to "*", the font
	    requester appears twice.
Solution:   In gui_mch_init_font() don't call get_logfont() but copy
	    norm_logfont from fh. (Yasuhiro Matsumoto)
Files:	    src/gui_w32.c

Patch 5.6.005
Problem:    When 'winminheight' is zero, CTRL-W - with a big number causes a
	    crash.  (David Kotchan)
Solution:   Check for negative window height in win_setheight().
Files:	    src/window.c

Patch 5.6.006
Problem:    GTK GUI: Bold font cannot always be used.  Memory is freed too
	    early in gui_mch_init_font().
Solution:   Move call to g_free() to after where sdup is used. (Artem Hodyush)
Files:	    src/gui_gtk_x11.c

Patch 5.6.007 (extra)
Problem:    Win32 IME: Font is not changed when screen font is changed. And
	    IME composition window does not trace the cursor.
Solution:   Initialize IME font.  When cursor is moved, set IME composition
	    window with ImeSetCompositionWindow().  Add call to
	    ImmReleaseContext() in several places. (Taro Muraoka)
Files:	    src/gui.c, src/gui_w32.c, src/proto/gui_w32.pro

Patch 5.6.008 (extra)
Problem:    Win32: When two files exist with the same name but different case
	    (through NFS or Samba), fixing the file name case could cause the
	    wrong one to be edited.
Solution:   Prefer a perfect match above a match while ignoring case in
	    fname_case().  (Flemming Madsen)
Files:	    src/os_win32.c

Patch 5.6.009 (extra)
Problem:    Win32 GUI: Garbage in Windows Explorer help line when selecting
	    "Edit with Vim" popup menu entry.
Solution:   Only return the help line when called with the GCS_HELPTEXT flag.
	    (Tianmiao Hu)
Files:	    GvimExt/gvimext.cpp

Patch 5.6.010
Problem:    A file name which contains a TAB was not read correctly from the
	    viminfo file and the ":ls" listing was not aligned properly.
Solution:   Parse the buffer list lines in the viminfo file from the end
	    backwards.  Count a Tab for two characters to align the ":ls" list.
Files:	    src/buffer.c

Patch 5.6.011
Problem:    When 'columns' is huge (using a tiny font) and 'statusline' is
	    used, Vim can crash.
Solution:   Limit maxlen to MAXPATHL in win_redr_custom(). (John Mullin)
Files:	    src/screen.c

Patch 5.6.012
Problem:    When using "zsh" for /bin/sh, toolcheck may hang until "exit" is
	    typed. (Kuratczyk)
Solution:   Add "-c exit" when checking for the shell version.
Files:	    src/toolcheck

Patch 5.6.013
Problem:    Multibyte char in tooltip is broken.
Solution:   Consider multibyte char in replace_termcodes(). (Taro Muraoka)
Files:      src/term.c

Patch 5.6.014
Problem:    When cursor is at the end of line and the character under cursor
	    is a multibyte character, "yl" doesn't yank 1 multibyte-char.
	    (Takuhiro Nishioka)
Solution:   Recognize a multibyte-char at end-of-line correctly in oneright().
	    (Taro Muraoka)
	    Also: make "+quickfix" in ":version" output appear alphabetically.
Files:	    src/edit.c

Patch 5.6.015
Problem:    New xterm delete key sends <Esc>[3~ by default.
Solution:   Added <kDel> and <kIns> to make the set of keypad keys complete.
Files:	    src/edit.c, src/ex_getln.c, src/keymap.h, src/misc1.c,
	    src/misc2.c, src/normal.c, src/os_unix.c, src/term.c

Patch 5.6.016
Problem:    When deleting a search string from history from inside a mapping,
	    another entry is deleted too. (Benji Fisher)
Solution:   Reset last_maptick when deleting the last entry of the search
	    history.  Also: Increment maptick when starting a mapping from
	    typed characters to avoid a just added search string being
	    overwritten or removed from history.
Files:	    src/ex_getln.c, src/getchar.c

Patch 5.6.017
Problem:    ":s/e/\^M/" should replace an "e" with a CTRL-M, not split the
	    line. (Calder)
Solution:   Replace the backslash with a CTRL-V internally. (Stephen P. Wall)
Files:	    src/ex_cmds.c

Patch 5.6.018
Problem:    ":help [:digit:]" takes a long time to jump to the wrong place.
Solution:   Insert a backslash to avoid the special meaning of '[]'.
Files:	    src/ex_cmds.c

Patch 5.6.019
Problem:    "snd.c", "snd.java", etc. were recognized as "mail" filetype.
Solution:   Make pattern for mail filetype more strict.
Files:	    runtime/filetype.vim

Patch 5.6.020 (extra)
Problem:    The DJGPP version eats processor time (Walter Briscoe).
Solution:   Call __dpmi_yield() in the busy-wait loop.
Files:	    src/os_msdos.c

Patch 5.6.021
Problem:    When 'selection' is "exclusive", a double mouse click in Insert
	    mode doesn't select last char in line. (Lutz)
Solution:   Allow leaving the cursor on the NUL past the line in this case.
Files:	    src/edit.c

Patch 5.6.022
Problem:    ":e \~<Tab>" expands to ":e ~\$ceelen", which doesn't work.
Solution:   Re-insert the backslash before the '~'.
Files:	    src/ex_getln.c

Patch 5.6.023 (extra)
Problem:    Various warnings for the Ming compiler.
Solution:   Changes to avoid the warnings. (Bill McCarthy)
Files:	    src/ex_cmds.c, src/gui_w32.c, src/os_w32exe.c, src/os_win32.c,
	    src/syntax.c, src/vim.rc

Patch 5.6.024 (extra)
Problem:    Win32 console: Entering CTRL-_ requires the shift key. (Kotchan)
Solution:   Specifically catch keycode 0xBD, like the GUI.
Files:	    src/os_win32.c

Patch 5.6.025
Problem:    GTK GUI: Starting the GUI could be interrupted by a SIGWINCH.
	    (Nils Lohner)
Solution:   Repeat the read() call to get the gui_in_use value when
	    interrupted by a signal.
Files:	    src/gui.c

Patch 5.6.026 (extra)
Problem:    Win32 GUI: Toolbar bitmaps are searched for in
	    $VIMRUNTIME/bitmaps, while GTK looks in $VIM/bitmaps. (Keith
	    Radebaugh)
Solution:   Use $VIM/bitmaps for both, because these are not part of the
	    distribution but defined by the user.
Files:	    src/gui_w32.c, runtime/doc/gui.txt

Patch 5.6.027
Problem:    TCL: Crash when using a Tcl script (reported for Win32).
Solution:   Call Tcl_FindExecutable() in main(). (Brent Fulgham)
Files:	    src/main.c

Patch 5.6.028
Problem:    Xterm patch level 126 sends codes for mouse scroll wheel.
	    Fully works with xterm patch level 131.
Solution:   Recognize the codes for button 4 (0x60) and button 5 (0x61).
Files:	    src/term.c

Patch 5.6.029
Problem:    GTK GUI: Shortcut keys cannot be used for a dialog. (Johannes
	    Zellner)
Solution:   Add support for shortcut keys. (Marcin Dalecki)
Files:	    src/gui_gtk.c

Patch 5.6.030
Problem:    When closing a window and 'ea' is set, Vim can crash. (Yasuhiro
	    Matsumoto)
Solution:   Set "curbuf" to a valid value in win_close().
Files:	    src/window.c

Patch 5.6.031
Problem:    Multi-byte: When a double-byte character ends in CSI, Vim waits
	    for another character to be typed.
Solution:   Recognize the CSI as the second byte of a character and don't wait
	    for another one. (Yasuhiro Matsumoto)
Files:	    src/getchar.c

Patch 5.6.032
Problem:    Functions with an argument that is a line number don't all accept
	    ".", "$", etc. (Ralf Arens)
Solution:   Add get_art_lnum() and use it for setline(), line2byte() and
	    synID().
Files:	    src/eval.c

Patch 5.6.033
Problem:    Multi-byte: "f " sometimes skips to the second space.  (Sung-Hyun
	    Nam)
Solution:   Change logic in searchc() to skip trailing byte of a double-byte
	    character.
	    Also: Ask for second byte when searching for double-byte
	    character. (Park Chong-Dae)
Files:	    src/search.c

Patch 5.6.034 (extra)
Problem:    Compiling with Borland C++ 5.5 fails on tolower() and toupper().
Solution:   Use TO_LOWER() and TO_UPPER() instead.  Also adjust the Makefile
	    to make using bcc 5.5 easier.
Files:	    src/edit.c, src/ex_docmd.c, src/misc1.c, src/Makefile.bor

Patch 5.6.035
Problem:    Listing the"+comments" feature in the ":version" output depended
	    on the wrong ID. (Stephen P. Wall)
Solution:   Change "CRYPTV" to "COMMENTS".
Files:	    src/version.c

Patch 5.6.036
Problem:    GTK GUI: Copy/paste text doesn't work between gvim and Eterm.
Solution:   Support TEXT and COMPOUND_TEXT selection targets. (ChiDeok Hwang)
Files:	    src/gui_gtk_x11.c

Patch 5.6.037
Problem:    Multi-byte: Can't use "f" command with multi-byte character in GUI.
Solution:   Enable XIM in Normal mode for the GUI. (Sung-Hyun Nam)
Files:	    src/gui_gtk_x11.c, src/multbyte.c

Patch 5.6.038
Problem:    Multi-clicks in GUI are interpreted as a mouse wheel click.  When
	    'ttymouse' is "xterm" a mouse click is interpreted as a mouse
	    wheel click.
Solution:   Don't recognize the mouse wheel in check_termcode() in the GUI.
	    Use 0x43 for a mouse drag in do_xterm_trace(), not 0x63.
Files:	    src/term.c, src/os_unix.c

Patch 5.6.039
Problem:    Motif GUI under KDE: When trying to logout, Vim hangs up the
	    system. (Hermann Rochholz)
Solution:   When handling the WM_SAVE_YOURSELF event, set the WM_COMMAND
	    property of the window to let the session manager know we finished
	    saving ourselves.
Files:	    src/gui_x11.c

Patch 5.6.040
Problem:    When using ":s" command, matching the regexp is done twice.
Solution:   After copying the matched line, adjust the pointers instead of
	    finding the match again. (Loic Grenie)  Added vim_regnewptr().
Files:	    src/ex_cmds.c, src/regexp.c, src/proto/regexp.pro

Patch 5.6.041
Problem:    GUI: Athena, Motif and GTK don't give more than 10 dialog buttons.
Solution:   Remove the limit on the number of buttons.
	    Also support the 'v' flag in 'guioptions'.
	    For GTK: Center the buttons.
Files:	    src/gui_athena.c, src/gui_gtk.c, src/gui_motif.c

Patch 5.6.042
Problem:    When doing "vim -u vimrc" and vimrc contains ":q", the cursor in
	    the terminal can remain off.
Solution:   Call cursor_on() in mch_windexit().
Files:	    src/os_unix.c

Patch 5.6.043 (extra)
Problem:    Win32 GUI: When selecting guifont with the dialog, 'guifont'
	    doesn't include the bold or italic attributes.
Solution:   Append ":i" and/or ":b" to 'guifont' in gui_mch_init_font().
Files:	    src/gui_w32.c

Patch 5.6.044 (extra)
Problem:    MS-DOS and Windows: The line that dosinst.exe appends to
	    autoexec.bat to set PATH is wrong when Vim is in a directory with
	    an embedded space.
Solution:   Use double quotes for the value when there is an embedded space.
Files:	    src/dosinst.c

Patch 5.6.045 (extra) (fixed version)
Problem:    VMS: Various small problems.
Solution:   Many small changes. (Zoltan Arpadffy)
	    File name modifier ":h" keeps the path separator.
	    File name modifier ":e" also removes version.
	    Compile with MAX_FEAT by default.
	    When checking for autocommands ignore version in file name.
	    Be aware of file names being case insensitive.
	    Added vt320 builtin termcap.
	    Be prepared for an empty default_vim_dir.
Files:	    runtime/gvimrc_example.vim, runtime/vimrc_example.vim,
	    runtime/doc/os_vms.txt, src/eval.c, src/feature.h, src/fileio.c,
	    src/gui_motif.c, src/gui_vms_conf.h, src/main.c, src/memline.c,
	    src/misc1.c, src/option.c, src/os_vms_conf.h, src/os_vms.c,
	    src/os_vms.h, src/os_vms.mms, src/tag.c, src/term.c, src/version.c

Patch 5.6.046
Problem:    Systems with backslash in file name: With 'shellslash' set, "vim
	    */*.c" only uses a slash for the first file name.  (Har'El)
Solution:   Fix slashes in file name arguments after reading the vimrc file.
Files:	    src/option.c

Patch 5.6.047
Problem:    $CPPFLAGS is not passed on to ctags configure.
Solution:   Add it. (Walter Briscoe)
Files:	    src/config.mk.in, src/Makefile

Patch 5.6.048
Problem:    CTRL-R in Command-line mode is documented to insert text as typed,
	    but inserts text literally.
Solution:   Make CTRL-R insert text as typed, use CTRL-R CTRL-R to insert
	    literally.  This is consistent with Insert mode.  But characters
	    that end Command-line mode are inserted literally.
Files:	    runtime/doc/index.txt, runtime/doc/cmdline.txt, src/ex_getln.c,
	    src/ops.c, src/proto/ops.pro

Patch 5.6.049
Problem:    Documentation for [!] after ":ijump" is wrong way around. (Benji
	    Fisher)
Solution:   Fix the documentation.  Also improve the code to check for a match
	    after a /* */ comment.
Files:	    runtime/doc/tagsearch.txt, src/search.c

Patch 5.6.050
Problem:    Replacing is wrong when replacing a single-byte char with
	    double-byte char or the other way around.
Solution:   Shift the text after the character when it is replaced.
	    (Yasuhiro Matsumoto)
Files:	    src/normal.c, src/misc1.c

Patch 5.6.051
Problem:    ":tprev" and ":tnext" don't give an error message when trying to
	    go before the first or beyond the last tag. (Robert Webb)
Solution:   Added error messages.  Also: Delay a second when a file-read
	    message is going to overwrite an error message, otherwise it won't
	    be seen.
Files:	    src/fileio.c, src/tag.c

Patch 5.6.052
Problem:    Multi-byte: When an Ex command has a '|' or '"' as a second byte,
	    it terminates the command.
Solution:   Skip second byte of multi-byte char when checking for '|' and '"'.
	    (Asai Kenichi)
Files:	    src/ex_docmd.c

Patch 5.6.053
Problem:    CTRL-] doesn't work on a tag that contains a '|'. (Cesar Crusius)
Solution:   Escape '|', '"' and '\' in tag names when using CTRL-] and also
	    for command-line completion.
Files:	    src/ex_getln.c, src/normal.c

Patch 5.6.054
Problem:    When using ":e" and ":e #" the cursor is put in the first column
	    when 'startofline' is set. (Cordell)
Solution:   Use the last known column when 'startofline' is set.
	    Also, use ECMD_LAST more often to simplify the code.
Files:	    src/buffer.c, src/ex_cmds.c, src/ex_docmd.c, src/proto/buffer.pro

Patch 5.6.055
Problem:    When 'statusline' only contains a text without "%" and doesn't fit
	    in the window, Vim crashes. (Ron Aaron)
Solution:   Don't use the pointer for the first item if there is no item.
Files:	    src/screen.c

Patch 5.6.056 (extra)
Problem:    MS-DOS: F11 and F12 don't work when 'bioskey' is set.
Solution:   Use enhanced keyboard functions. (Vince Negri)
	    Detect presence of enhanced keyboard and set bioskey_read and
	    bioskey_ready.
Files:	    src/os_msdos.c

Patch 5.6.057 (extra)
Problem:    Win32 GUI: Multi-byte characters are wrong in dialogs and tear-off
	    menus.
Solution:   Use system font instead of a fixed font. (Matsumoto, Muraoka)
Files:	    src/gui_w32.c

Patch 5.6.058
Problem:    When the 'a' flag is not in 'guioptions', non-Windows systems
	    copy Visually selected text to the clipboard/selection on a yank
	    or delete command anyway.  On Windows it isn't done even when the
	    'a' flag is included.
Solution:   Respect the 'a' flag in 'guioptions' on all systems.
Files:	    src/normal.c

Patch 5.6.059 (extra)
Problem:    When moving the cursor over italic text and the characters spill
	    over to the cell on the right, that spill-over is deleted.
	    Noticed in the Win32 GUI, can happen on other systems too.
Solution:   Redraw italic text starting from a blank, like this is already
	    done for bold text. (Vince Negri)
Files:	    src/gui.c, src/gui.h, src/gui_w32.c

Patch 5.6.060
Problem:    Some bold characters spill over to the cell on the left, that
	    spill-over can remain sometimes.
Solution:   Redraw a characters when the next character was bold and needs
	    redrawing. (Robert Webb)
Files:	    src/screen.c

Patch 5.6.061
Problem:    When xterm sends 8-bit controls, recognizing the version response
	    doesn't work.
	    When using CSI instead of <Esc>[ for the termcap color codes,
	    using 16 colors doesn't work. (Neil Bird)
Solution:   Also accept CSI in place of <Esc>[ for the version string.
	    Also check for CSI when handling colors 8-15 in term_color().
	    Use CSI for builtin xterm termcap entries when 'term' contains
	    "8bit".
Files:	    runtime/doc/term.txt, src/ex_cmds.c, src/option.c, src/term.c,
	    src/os_unix.c, src/proto/option.pro, src/proto/term.pro

Patch 5.6.062
Problem:    The documentation says that setting 'smartindent' doesn't have an
	    effect when 'cindent' is set, but it does make a difference for
	    lines starting with "#". (Neil Bird)
Solution:   Really ignore 'smartindent' when 'cindent' is set.
Files:	    src/misc1.c, src/ops.c

Patch 5.6.063
Problem:    Using "I" in Visual-block mode doesn't accept a count. (Johannes
	    Zellner)
Solution:   Pass the count on to do_insert() and edit(). (Allan Kelly)
Files:	    src/normal.c, src/ops.c, src/proto/ops.pro

Patch 5.6.064
Problem:    MS-DOS and Win32 console: Mouse doesn't work correctly after
	    including patch 5.6.28. (Vince Negri)
Solution:   Don't check for mouse scroll wheel when the mouse code contains
	    the number of clicks.
Files:	    src/term.c

Patch 5.6.065
Problem:    After moving the cursor around in Insert mode, typing a space can
	    still trigger an abbreviation. (Benji Fisher)
Solution:   Don't check for an abbreviation after moving around in Insert mode.
Files:	    src/edit.c

Patch 5.6.066
Problem:    Still a few bold character spill-over remains after patch 60.
Solution:   Clear character just in front of blanking out rest of the line.
	    (Robert Webb)
Files:	    src/screen.c

Patch 5.6.067
Problem:    When a file name contains a NL, the viminfo file is corrupted.
Solution:   Use viminfo_writestring() to convert the NL to CTRL-V n.
	    Also fix the Buffers menu and listing a menu name with a newline.
Files:	    runtime/menu.vim, src/buffer.c, src/mark.c, src/menu.c

Patch 5.6.068
Problem:    Compiling the Perl interface doesn't work with Perl 5.6.0.
	    (Bernhard Rosenkraenzer)
Solution:   Also check xs_apiversion for the version number when prepending
	    defines for PL_*.
Files:	    src/Makefile

Patch 5.6.069
Problem:    "go" doesn't always end up at the right character when
	    'fileformat' is "dos". (Bruce DeVisser)
Solution:   Correct computations in ml_find_line_or_offset().
Files:	    src/memline.

Patch 5.6.070 (depends on 5.6.068)
Problem:    Compiling the Perl interface doesn't work with Perl 5.6.0.
	    (Bernhard Rosenkraenzer)
Solution:   Simpler check instead of the one from patch 68.
Files:	    src/Makefile

Patch 5.6.071
Problem:    "A" in Visual block mode on a Tab positions the cursor one char to
	    the right. (Michael Haumann)
Solution:   Correct the column computation in op_insert().
Files:	    src/ops.c

Patch 5.6.072
Problem:    When starting Vim with "vim +startinsert", it enters Insert mode
	    only after typing the first command. (Andrew Pimlott)
Solution:   Insert a dummy command in the stuff buffer.
Files:	    src/main.c

Patch 5.6.073 (extra) (depends on 5.6.034)
Problem:    Win32 GUI: When compiled with Bcc 5.5 menus don't work.
	    In dosinst.c toupper() and tolower() give an "internal compiler
	    error" for Bcc 5.5.
Solution:   Define WINVER to 4 to avoid compiling for Windows 2000. (Dan
	    Sharp)  Also cleaned up compilation arguments.
	    Use our own implementation of toupper() in dosinst.c.  Use
	    mytoupper() instead of tolower().
Files:	    src/Makefile.bor, src/dosinst.c

Patch 5.6.074 (extra)
Problem:    Entering CSI directly doesn't always work, because it's recognized
	    as the start of a special key.  Mostly a problem with multi-byte
	    in the GUI.
Solution:   Use K_CSI for a typed CSI character.  Use <CSI> for a normal CSI,
	    <xCSI> for a CSI typed in the GUI.
Files:	    runtime/doc/intro.txt, src/getchar.c, src/gui_amiga.c,
	    src/gui_gtk_x11.c, src/gui_mac.c, src/gui_riscos.c, src/gui_w32.c,
	    src/keymap.h, src/misc2.c

Patch 5.6.075
Problem:    When using "I" or "A" in Visual block mode while 'sts' is set may
	    change spaces to a Tab the inserted text is not correct. (Mike
	    Steed)  And some other problems when using "A" to append after the
	    end of the line.
Solution:   Check for change in spaces/tabs after inserting the text.  Append
	    spaces to fill the gap between the end-of-line and the right edge
	    of the block.
Files:	    src/ops.c

Patch 5.6.076
Problem:    GTK GUI: Mapping <M-Space> doesn't work.
Solution:   Don't use the "Alt" modifier twice in key_press_event().
Files:	    src/gui_gtk_x11.c

Patch 5.6.077
Problem:    GUI: When interrupting an external program with CTRL-C, gvim might
	    crash. (Benjamin Korvemaker)
Solution:   Avoid using a NULL pointer in ui_inchar_undo().
Files:	    src/ui.c

Patch 5.6.078
Problem:    Locale doesn't always work on FreeBSD. (David O'Brien)
Solution:   Link with the "xpg4" library when available.
Files:	    src/configure.in, src/configure

Patch 5.6.079
Problem:    Vim could crash when several Tcl interpreters are created and
	    destroyed.
Solution:   handle the "exit" command and nested ":tcl" commands better. (Ingo
	    Wilken)
Files:	    runtime/doc/if_tcl.txt, src/if_tcl.c

Patch 5.6.080
Problem:    When jumping to a tag, generating the tags file and jumping to the
	    same tag again uses the old search pattern. (Sung-Hyun Nam)
Solution:   Flush cached tag matches when executing an external command.
Files:	    src/misc2.c, src/proto/tag.pro, src/tag.c

Patch 5.6.081
Problem:    ":syn include" uses a level for the included file, this confuses
	    contained items included at the same level.
Solution:   Use a unique tag for each included file.  Changed sp_syn_inc_lvl
	    to sp_syn_inc_tag. (Scott Bigham)
Files:	    src/syntax.c, src/structs.h

Patch 5.6.082
Problem:    When using cscope, Vim can crash.
Solution:   Initialize tag_fname in find_tags(). (Anton Blanchard)
Files:	    src/tag.c

Patch 5.6.083 (extra)
Problem:    Win32: The visual beep can't be seen. (Eric Roesinger)
Solution:   Flush the output before waiting with GdiFlush(). (Maurice S. Barnum)
	    Also: Allow specifying the delay in t_vb for the GUI.
Files:	    src/gui.c, src/gui_amiga.c, src/gui_gtk_x11.c, src/gui_mac.c,
	    src/gui_riscos.c, src/gui_w32.c, src/gui_x11.c, src/gui_beos.cc,
	    src/proto/gui_amiga.pro, src/proto/gui_gtk_x11.pro,
	    src/proto/gui_mac.pro, src/proto/gui_riscos.pro,
	    src/proto/gui_w32.pro, src/proto/gui_x11.pro,
	    src/proto/gui_beos.pro

Patch 5.6.084 (depends on 5.6.074)
Problem:    GUI: Entering CSI doesn't always work for Athena and Motif.
Solution:   Handle typed CSI as <xCSI> (forgot this bit in 5.6.074).
Files:	    src/gui_x11.c

Patch 5.6.085
Problem:    Multi-byte: Using "r" to replace a double-byte char with a
	    single-byte char moved the cursor one character. (Matsumoto)
	    Also, using a count when replacing a single-byte char with a
	    double-byte char didn't work.
Solution:   Don't use del_char() to delete the second byte.
	    Get "ptr" again after calling ins_char().
Files:	    src/normal.c

Patch 5.6.086 (extra)
Problem:    Win32: When using libcall() and the returned value is not a valid
	    pointer, Vim crashes.
Solution:   Use IsBadStringPtr() to check if the pointer is valid.
Files:	    src/os_win32.c

Patch 5.6.087
Problem:    Multi-byte: Commands and messages with multi-byte characters are
	    displayed wrong.
Solution:   Detect double-byte characters. (Yasuhiro Matsumoto)
Files:	    src/ex_getln.c, src/message.c, src/misc2.c, src/screen.c

Patch 5.6.088
Problem:    Multi-byte with Motif or Athena: The message "XIM requires
	    fontset" is annoying when Vim was compiled with XIM support but it
	    is not being used.
Solution:   Remove that message.
Files:	    src/multbyte.c

Patch 5.6.089
Problem:    On non-Unix systems it's possible to overwrite a read-only file
	    without using "!".
Solution:   Check if the file permissions allow overwriting before moving the
	    file to become the backup file.
Files:	    src/fileio.c

Patch 5.6.090
Problem:    When editing a file in "/home/dir/home/dir" this was replaced with
	    "~~".  (Andreas Jellinghaus)
Solution:   Replace the home directory only once in home_replace().
Files:	    src/misc1.c

Patch 5.6.091
Problem:    When editing many "no file" files, can't create swap file, because
	    .sw[a-p] have all been used.  (Neil Bird)
Solution:   Also use ".sv[a-z]", ".su[a-z]", etc.
Files:	    src/memline.c

Patch 5.6.092
Problem:    FreeBSD: When setting $TERM to a non-valid terminal name, Vim
	    hangs in tputs().
Solution:   After tgetent() returns an error code, call it again with the
	    terminal name "dumb".  This apparently creates an environment in
	    which tputs() doesn't fail.
Files:	    src/term.c

Patch 5.6.093 (extra)
Problem:    Win32 GUI: "ls | gvim -" will show a message box about reading
	    stdin when Vim exits. (Donohue)
Solution:   Don't write a message about the file read from stdin until the GUI
	    has started.
Files:	    src/fileio.c

Patch 5.6.094
Problem:    Problem with multi-byte string for ":echo var".
Solution:   Check for length in msg_outtrans_len_attr(). (Sung-Hyun Nam)
	    Also make do_echo() aware of multi-byte characters.
Files:	    src/eval.c, src/message.c

Patch 5.6.095
Problem:    With an Emacs TAGS file that include another a relative path
	    doesn't always work.
Solution:   Use expand_tag_fname() on the name of the included file.
	    (Utz-Uwe Haus)
Files:	    src/tag.c

Patch 5.6.096
Problem:    Unix: When editing many files, startup can be slow. (Paul
	    Ackersviller)
Solution:   Halve the number of stat() calls used to add a file to the buffer
	    list.
Files:	    src/buffer.c

Patch 5.7a.001
Problem:    GTK doesn't respond on drag&drop from ROX-Filer.
Solution:   Add "text/uri-list" target. (Thomas Leonard)
	    Also: fix problem with checking for trash arguments.
Files:	    src/gui_gtk_x11.c

Patch 5.7a.002
Problem:    Multi-byte: 'showmatch' is performed when second byte of an
	    inserted double-byte char is a paren or brace.
Solution:   Check IsTrailByte() before calling showmatch(). (Taro Muraoka)
Files:	    src/misc1.c

Patch 5.7a.003
Problem:    Multi-byte: After using CTRL-O in Insert mode with the cursor at
	    the end of the line on a multi-byte character the cursor moves to
	    the left.
Solution:   Check for multi-byte character at end-of-line. (Taro Muraoka)
	    Also: fix cls() to detect a double-byte character. (Chong-Dae Park)
Files:	    src/edit.c, src/search.c

Patch 5.7a.004
Problem:    When reporting the search pattern offset, the string could be
	    unterminated, which may cause a crash.
Solution:   Terminate the string for the search offset. (Stephen P. Wall)
Files:	    src/search.c

Patch 5.7a.005
Problem:    When ":s//~/" doesn't find a match it reports "[NULL]" for the
	    pattern.
Solution:   Use get_search_pat() to obtain the actually used pattern.
Files:	    src/ex_cmds.c, src/proto/search.pro, src/search.c

Patch 5.7a.006 (extra)
Problem:    VMS: Various problems, also with the VAXC compiler.
Solution:   In many places use the Unix code for VMS too.
	    Added time, date and compiler version to version message.
	    (Zoltan Arpadffy)
Files:	    src/ex_cmds.c, src/ex_docmd.c, src/globals.h, src/gui_vms_conf.h,
	    src/main.c, src/message.c, src/misc1.c, src/os_vms.c,
	    src/os_vms.h, src/os_vms.mms, src/os_vms_conf.h,
	    src/proto/os_vms.pro, src/proto/version.pro, src/term.c,
	    src/version.c, src/xxd/os_vms.mms, src/xxd/xxd.c

Patch 5.7a.007
Problem:    Motif and Athena GUI: CTRL-@ is interpreted as CTRL-C.
Solution:   Only use "intr_char" when it has been set.
Files:	    src/gui_x11.c

Patch 5.7a.008
Problem:    GTK GUI: When using CTRL-L the screen is redrawn twice, causing
	    trouble for bold characters.  Also happens when moving with the
	    scrollbar.  Best seen when 'writedelay' is non-zero.
	    When starting the GUI with ":gui" the screen is redrawn once with
	    the wrong colors.
Solution:   Only set the geometry hints when the window size really changed.
	    This avoids setting it each time the scrollbar is forcefully
	    redrawn.
	    Don't redraw in expose_event() when gui.starting is still set.
Files:	    src/gui_gtk_x11.c


==============================================================================
VERSION 5.8						*version-5.8*

Version 5.8 is a bug-fix version of 5.7.


Changed							*changed-5.8*
-------

Ctags is no longer included with Vim.  It has grown into a project of its own.
You can find it here:  http://ctags.sf.net.  It is highly recommended as a Vim
companion when you are writing programs.


Added							*added-5.8*
-----

New syntax files:
acedb		AceDB (Stewart Morris)
aflex		Aflex (Mathieu Clabaut)
antlr		Antlr (Mathieu Clabaut)
asm68k		68000 Assembly (Steve Wall)
automake	Automake (John Williams)
ayacc		Ayacc (Mathieu Clabaut)
b		B (Mathieu Clabaut)
bindzone	BIND zone (glory hump)
blank		Blank (Rafal Sulejman)
cfg		Configure files (Igor Prischepoff)
changelog	ChangeLog (Gediminas Paulauskas)
cl		Clever (Phil Uren)
crontab		Crontab (John Hoelzel)
csc		Essbase script (Raul Segura Acevedo)
cynlib		Cynlib(C++) (Phil Derrick)
cynpp		Cyn++ (Phil Derrick)
debchangelog	Debian Changelog (Wichert Akkerman)
debcontrol	Debian Control (Wichert Akkerman)
dns		DNS zone file (Jehsom)
dtml		Zope's DTML (Jean Jordaan)
dylan		Dylan, Dylan-intr and Dylan-lid (Brent Fulgham)
ecd		Embedix Component Description (John Beppu)
fgl		Informix 4GL (Rafal Sulejman)
foxpro		FoxPro (Powing Tse)
gsp		GNU Server Pages (Nathaniel Harward)
gtkrc		GTK rc (David Necas)
hercules	Hercules (Avant! Corporation) (Dana Edwards)
htmlos		HTML/OS by Aestiva (Jason Rust)
inittab		SysV process control (David Necas)
iss		Inno Setup (Dominique Stephan)
jam		Jam (Ralf Lemke)
jess		Jess (Paul Baleme)
lprolog		LambdaProlog (Markus Mottl)
ia64		Intel Itanium (parth malwankar)
kix		Kixtart (Nigel Gibbs)
mgp		MaGic Point (Gerfried Fuchs)
mason		Mason (HTML with Perl) (Andrew Smith)
mma		Mathematica (Wolfgang Waltenberger)
nqc		Not Quite C (Stefan Scherer)
omnimark	Omnimark (Paul Terray)
openroad	OpenROAD (Luis Moreno Serrano)
named		BIND configuration (glory hump)
papp		PApp (Marc Lehmann)
pfmain		Postfix main config (Peter Kelemen)
pic		PIC assembly (Aleksandar Veselinovic)
ppwiz		PPWizard (Stefan Schwarzer)
progress	Progress (Phil Uren)
psf		Product Specification File (Rex Barzee)
r		R (Tom Payne)
registry	MS-Windows registry (Dominique Stephan)
robots		Robots.txt (Dominique Stephan)
rtf		Rich Text Format (Dominique Stephan)
setl		SETL (Alex Poylisher)
sgmldecl	SGML Declarations (Daniel A. Molina W.)
sinda		Sinda input (Adrian Nagle)
sindacmp	Sinda compare (Adrian Nagle)
sindaout	Sinda output (Adrian Nagle)
smith		SMITH (Rafal Sulejman)
snobol4		Snobol 4 (Rafal Sulejman)
strace		Strace (David Necas)
tak		TAK input (Adrian Nagle)
takcmp		TAK compare (Adrian Nagle)
takout		TAK output (Adrian Nagle)
tasm		Turbo assembly (FooLman)
texmf		TeX configuration (David Necas)
trasys		Trasys input (Adrian Nagle)
tssgm		TSS Geometry (Adrian Nagle)
tssop		TSS Optics (Adrian Nagle)
tsscl		TSS Command line (Adrian Nagle)
virata		Virata Configuration Script (Manuel M.H. Stol)
vsejcl		VSE JCL (David Ondrejko)
wdiff		Wordwise diff (Gerfried Fuchs)
wsh		Windows Scripting Host (Paul Moore)
xkb		X Keyboard Extension (David Necas)

Renamed php3 to php, it now also supports php4 (Lutz Eymers)

Patch 5.7.015
Problem:    Syntax files for Vim 6.0 can't be used with 5.x.
Solution:   Add the "default" argument to the ":highlight" command: Ignore the
	    command if highlighting was already specified.
Files:	    src/syntax.c

Generate the Syntax menu with makemenu.vim, so that it doesn't have to be done
when Vim is starting up.  Reduces the startup time of the GUI.


Fixed							*fixed-5.8*
-----

Conversion of docs to HTML didn't convert "|tag|s" to a hyperlink.

Fixed compiling under NeXT. (Jeroen C.M. Goudswaard)

optwin.vim gave an error when used in Vi compatible mode ('cpo' contains 'C').

Tcl interpreter: "buffer" command didn't check for presense of an argument.
(Dave Bodenstab)

dosinst.c: Added checks for too long file name.

Amiga: a file name starting with a colon was considered absolute but it isn't.
Amiga: ":pwd" added a slash when in the root of a drive.

Macintosh: Warnings for unused variables. (Bernhard Pruemmer)

Unix: When catching a deadly signal, handle it in such a way that it's
unlikely that Vim will hang.  Call _exit() instead of exit() in case of a
severe problem.

Setting the window title from nothing to something didn't work after patch 29.

Check for ownership of .exrc and .vimrc was done with stat().  Use lstat() as
well for extra security.

Win32 GUI: Printing a file with 'fileformat' "unix" didn't work.  Set
'fileformat' to "dos" before writing the temp file.

Unix: Could start waiting for a character when checking for a CTRL-C typed
when an X event is received.

Could not use Perl and Python at the same time on FreeBSD, because Perl used
"-lc" and Python used the threaded C library.

Win32: The Mingw compiler gave a few warning messages.

When using "ZZ" and an autocommand for writing uses an abbreviation it didn't
work.  Don't stuff the ":x" command but execute it directly. (Mikael Berthe)

VMS doesn't always have lstat(), added an #ifdef around it.

Added a few corrections for the Macintosh. (Axel Kielhorn)

Win32: Gvimext could not edit more than a few files at once, the length of the
argument was fixed.


Previously released patches for Vim 5.7:

Patch 5.7.001
Problem:    When the current buffer is crypted, and another modified buffer
	    isn't, ":wall" will encrypt the other buffer.
Solution:   In buf_write() use "buf" instead of "curbuf" to check for the
	    crypt key.
Files:	    src/fileio.c

Patch 5.7.002
Problem:    When 'showmode' is set, using "CTRL-O :r file" waits three seconds
	    before displaying the read text. (Wichert Akkerman)
Solution:   Set "keep_msg" to the file message so that the screen is redrawn
	    before the three seconds wait for displaying the mode message.
Files:	    src/fileio.c

Patch 5.7.003
Problem:    Searching for "[[:cntrl:]]" doesn't work.
Solution:   Exclude NUL from the matching characters, it terminates the list.
Files:	    src/regexp.c

Patch 5.7.004
Problem:    GTK: When selecting a new font, Vim can crash.
Solution:   In gui_mch_init_font() unreference the old font, not the new one.
Files:	    src/gui_gtk_x11.c

Patch 5.7.005
Problem:    Multibyte: Inserting a wrapped line corrupts kterm screen.
	    Pasting TEXT/COMPOUND_TEXT into Vim does not work.
	    On Motif no XIM status line is displayed even though it is
	    available.
Solution:   Don't use xterm trick for wrapping lines for multibyte mode.
	    Correct a missing "break", added TEXT/COMPOUND_TEXT selection
	    request.
	    Add XIMStatusArea fallback code.
	    (Katsuhito Nagano)
Files:	    src/gui_gtk_x11.c, src/multbyte.c, src/screen.c, src/ui.c

Patch 5.7.006
Problem:    GUI: redrawing the non-Visual selection is wrong when the window
	    is unobscured. (Jean-Pierre Etienne)
Solution:   Redraw the selection properly and don't clear it.  Added "len"
	    argument to clip_may_redraw_selection().
Files:	    src/gui.c, src/ui.c, src/proto/ui.pro

Patch 5.7.007
Problem:    Python: Crash when using the current buffer twice.
Solution:   Increase the reference count for buffer and window objects.
	    (Johannes Zellner)
Files:	    src/if_python.c

Patch 5.7.008
Problem:    In Ex mode, backspacing over the first TAB doesn't work properly.
	    (Wichert Akkerman)
Solution:   Switch the cursor on before printing the newline.
Files:	    src/ex_getln.c

Patch 5.7.009 (extra)
Problem:    Mac: Crash when using a long file.
Solution:   Don't redefine malloc() and free(), because it will break using
	    realloc().
Files:	    src/os_mac.h

Patch 5.7.010
Problem:    When using CTRL-A on a very long number Vim can crash.  (Michael
	    Naumann)
Solution:   Truncate the length of the new number to avoid a buffer overflow.
Files:	    src/ops.c

Patch 5.7.011 (extra)
Problem:    Win32 GUI on NT 5 and Win98: Displaying Hebrew is reversed.
Solution:   Output each character separately, to avoid that Windows reverses
	    the text for some fonts. (Ron Aaron)
Files:	    src/gui_w32.c

Patch 5.7.012
Problem:    When using "-complete=buffer" for ":command" the user command
	    fails.
Solution:   In a user command don't replace the buffer name with a count for
	    the  buffer number.
Files:	    src/ex_docmd.c

Patch 5.7.013
Problem:    "gD" didn't always find a match in the first line, depending on
	    the column the search started at.
Solution:   Reset the column to zero before starting to search.
Files:	    src/normal.c

Patch 5.7.014
Problem:    Rot13 encoding was done on characters with accents, which is
	    wrong. (Sven Gottwald)
Solution:   Only do rot13 encoding on ASCII characters.
Files:	    src/ops.c

Patch 5.7.016
Problem:    When hitting 'n' for a ":s///c" command, the ignore-case flag was
	    not restored, some matches were skipped. (Daniel Blaustein)
Solution:   Restore the reg_ic variable when 'n' was hit.
Files:	    src/ex_cmds.c

Patch 5.7.017
Problem:    When using a Vim script for Vim 6.0 with <SID> before a function
	    name, it produces an error message even when inside an "if version
	    >= 600".  (Charles Campbell)
Solution:   Ignore errors in the function name when the function is not going
	    to be defined.
Files:	    src/eval.c

Patch 5.7.018
Problem:    When running "rvim" or "vim -Z" it was still possible to execute a
	    shell command with system() and backtick-expansion. (Antonios A.
	    Kavarnos)
Solution:   Disallow executing a shell command in get_cmd_output() and
	    mch_expand_wildcards().
Files:	    src/misc1.c, src/os_unix.c

Patch 5.7.019
Problem:    Multibyte: In a substitute string, a multi-byte character isn't
	    skipped properly, can be a problem when the second byte is a
	    backslash.
Solution:   Skip an extra byte for a double-byte character. (Muraoka Taro)
Files:	    src/ex_cmds.c

Patch 5.7.020
Problem:    Compilation doesn't work on MacOS-X.
Solution:   Add a couple of #ifdefs. (Jamie Curmi)
Files:	    src/regexp.c, src/ctags/general.h

Patch 5.7.021
Problem:    Vim sometimes produces a beep when started in an xterm.  Only
	    happens when compiled without mouse support.
Solution:   Requesting the xterm version results in a K_IGNORE.  This wasn't
	    handled when mouse support is disabled.  Accept K_IGNORE always.
Files:	    src/normal.c

Patch 5.7.022
Problem:    %v in 'statusline' is not displayed when it's equal to %c.
Solution:   Check if %V or %v is used and handle them differently.
Files:	    src/screen.c

Patch 5.7.023
Problem:    Crash when a WinLeave autocommand deletes the buffer in the other
	    window.
Solution:   Check that after executing the WinLeave autocommands there still
	    is a window to be closed.  Also update the test that was supposed
	    to check for this problem.
Files:	    src/window.c, testdir/test13.in, testdir/test13.ok

Patch 5.7.024
Problem:    Evaluating an expression for 'statusline' can have side effects.
Solution:   Evaluate the expression in a sandbox.
Files:	    src/edit.c, src/eval.c, src/proto/eval.pro, src/ex_cmds.c,
	    src/ex_cmds.h, src/ex_docmd.c, src/globals.h, src/option.c,
	    src/screen.c, src/undo.c

Patch 5.7.025 (fixed)
Problem:    Creating a temp file has a race condition.
Solution:   Create a private directory to write the temp files in.
Files:	    src/fileio.c, src/misc1.c, src/proto/misc1.pro,
	    src/proto/fileio.pro, src/memline.c, src/os_unix.h

Patch 5.7.026 (extra)
Problem:    Creating a temp file has a race condition.
Solution:   Create a private directory to write the temp files in.
	    This is the extra part of patch 5.7.025.
Files:	    src/os_msdos.h

Patch 5.7.027
Problem:    Starting to edit a file can cause a crash.  For example when in
	    Insert mode, using CTRL-O :help abbr<Tab> to scroll the screen and
	    then <CR>, which edits a help file. (Robert Bogomip)
Solution:   Check if keep_msg is NULL before copying it.
Files:	    src/fileio.c

Patch 5.7.028
Problem:    Creating a backup or swap file could fail in rare situations.
Solution:   Use O_EXCL for open().
Files:	    src/fileio.c, src/memfile.c

Patch 5.7.029
Problem:    Editing a file with an extremely long name crashed Vim.
Solution:   Check for length of the name when setting the window title.
Files:	    src/buffer.c

Patch 5.7.030
Problem:    A ":make" or ":grep" command with a very long argument could cause
	    a crash.
Solution:   Allocate the buffer for the shell command.
Files:	    src/ex_docmd.c


 vim:tw=78:ts=8:ft=help:norl:
