Here's a quick list of features in 1.5 that aren't in 1.4

- Under MS-DOS, no system variables are accessed directly.
- Elvis now works under VMS.
- The "file is busy" limitation has been removed.
- Control-V quoting is more compatible with the real vi.
- The ":set warn" warning is only output on a ":!" or ":sh" command that isn't
  being used as a filter.
- Function keys can be easily mapped in a terminal-independent way.  The
  ":mkexrc" command will then save the mappings in a terminal-independent way.
- The `ctags` program has been modified to support ANSI C (somewhat).
- The `ref` program has been modified.  It no longer needs a "refs" file
- A new ":color" command allows you to control which colors elvis uses.
  (This only works right on PCs... running any operating system, though!)
- The ":set remap" option is now supported.  Elvis allows recursive macros!
- A new option, ":set ruler", has been added.  It causes elvis to constantly
  display the current line/column numbers.
- Many small changes have been made to bring elvis a little closed to POSIX.
- In visual commannd mode, the new 'v' and 'V' commands let you *visibly*
  mark the text that you want to apply a c/d/y/</=/>/\ command to.
- The \ key is a new operator command.  It brings up a small menu.
- The = key is now an operator command that sends the selected text through
  a predefined filter program.  The default filter is "fmt", but you can change
  it via ":set equalprg=indent" or whatever.
- A clone of "fmt" is included.
- You can now move directly to a given percentage of the way through the file,
  via a command such as "50%".  (The numberless % command still works, too.)
- Regular expressions now support the \{n\} and \{n,m\} closure operators.
- File preservation and recovery is now handled in a more vi-like way.
- Keyboard timeouts are now handled in a better way on SysV and BSD unices.


The main goals of 1.5 have been to fix bugs, improve portability,
increase compatibility with the real vi, and add a few useful
extensions.  Most of the extensions can be individually disabled by
compile-time options, if you like.

My favorite extension is a new *visible* way to select text to delete,
yank, or whatever.  In visual command mode, if you hit 'v', then the
character under the cursor is hilighted.  As you move the cursor around,
all text from the 'v' spot to the current cursor position is hilighted.
When you've moved the cursor to the end of the text you want to act on,
you just need to hit one of the operator keys once.  For example,
"vwwwd" is approximately the same as "3dw".  To cancel the selection
without doing anything to the text, hit 'v' a second time.

The uppercase 'V' key does the same thing with whole lines, instead of
characters.  E.g., "Vjjjjj>" is a lot like ">5j" or "6>>".

The '\' key is a new operator which pops up a menu from which you can
choose any of the most common operations.

All three of these can be mapped using the "visual" hack.  This allows
them to be used while you're in input mode.  Also, I've experimented
with using them in conjunction with a mouse, with the mouse configured
like this: mouse movement simulates repeated pressings of the arrow
keys, and the buttons send unique escape codes when pressed and when
released.  I mapped the left and right buttons to send 'v' and 'V'
(respectively) when pressed, and '\' when released.  This gives elvis a
reasonably nice mouse interface, since the '\' pop-up menu is clever
enough allow selection via arrow keys (mouse movement) and the '\' key
(mouse button).

The '%' movement command can now accept a "count" argument.  A plain "%"
still moves to the matching parenthesis, as always, but "50%" moves the
cursor to approximately half way through the file.  I figured this might
provide a nice hook for adding support for a slider bar in a windowing
system, but I haven't actually tried it.  For a similar reason,
control-X now moves the cursor to a given screen column (taking
side-ways scrolling into account), which I figured might be useful in
conjuction with the 'H' command for adding simple cursor positioning in
a windowing system.  If the user clicks on row 5 column 27, then you
could stuff "5H27^X" into the type-ahead queue, and elvis would move the
cursor there.

The '=' key is a new operator which filters the affected text through an
external program.  It is similar to the '!' command, except that '='
uses a predefined command instead of asking you each time.  The default
program is "fmt", and you can change it via ":set ep=foo".  A version of
"fmt" is included.  (In case you didn't know: fmt performs simple paragraph
reformatting and word wrap.)

There is a new ":color" command.  Its usage should be fairly intuitive.
Try ":color light cyan on blue" first, and then ":color" with no arguments.

There are several new :set options.  Most of them are SysV compatible.
One nice extension is ":set ruler", which causes the row and column
number to be continuously displayed on the bottom line of the screen.

The ctags command has been modified to work better with "new style"
function definitions.  Also, it has been extended to allow typedefs and
static (local) definitions to be included.

The ref command has also been improved.  Also, it has been extended to
work well with the "static tags" option of the new ctags program.  You
are no longer forced to have a separate "refs" file (although you can if
you want) because ref now reads the "tags" file and then looks up the
function header.  Elvis can be configured to call the "ref" program to
perform tag lookup, so elvis can benefit from the more sophisticated
lookup that "ref" offers.

Regular expressions can now handle \{m\} and \{m,n\} notation.  The
\{m\} operator means "the preceding single-character expression must be
repeated exactly m times."  The \{m,n\} notation means "the preceding
single-character expression must be repeated at least m times, but no
more than n times."  If m is missing, it defaults to 0.  If n is
missing, it defaults to infinity.  So "^-\{80\}$" matches a line of
exactly 80 hyphens, and "[A-Za-z]\{10,\}" matches any word that has 10
or more characters.

The ttyread() function has been modified.  It is now passed a "timeout"
argument.  This argument should be 0 to never timeout, or the amount of
time to allow for a keystroke, expressed in tenths of a second.  For
SysV UNIX, this is implemented via VMIN/VTIME.  For BSD, it uses
select().  For other UNIX flavors, it uses the old SIGALRM trick and has
poorer time resolution.  All three UNIX versions are in the file
"unix.c".

File preservation and recovery is now handled in a more vi-like way.  A
program called elvprsv extracts the text from a temp file and stores it
in the /usr/preserve directory.  A separate program called "elvrec" is
used to recover the file -- move it from /usr/preserve to the current
directory.  Sadly, this makes installation more complex.

The tinytcap.c file has been completely rewritten, to make it smaller and
more maintainable.  More terminal descriptions are included in it now.

The ":set remap" option is now supported.  Many of the more complex macro
packages depend on this option.  Also, support for maps and abbreviations
has been merged into a single, more cohesive package.  Abbreviations work
a little better now than they did before.
