This is a list of patches that have been made since the original 1.8 release.
pl1: Fixed a bug that caused core dump when } command used on blank line
after last paragraph in file.
Fixed a bug that caused text loss with AutoIndent enabled, when
two newlines are inserted into the middle of a line.
Replaced the mangled VMS configuration files with good versions.
pl2: Fixed a security hole on some UNIX systems.
Added cursor positioning via mouse clicks when running elvis inside
an xterm. (Not supported for other GUIs yet.)
Minor tweaks for HPUX, OS/2, Borland, and TERMIOS.
After :w, # will refer to the file just written.
Fixed bug in tag lookup. This was most accute for MS-DOS, because
it uses INTERNAL_TAGS, but it could have affected anybody.
The compiler error parser now allows '_' in a filename.
If autowrite is set, ^Z will save the file if it has been modified.
:s (with no arguments) repeats the previous substitution, like :&.
Fixed bug which caused some blank lines in .exrc file to be
interpretted as :p commands. Basically, the bug was that lines
which contained only one or more whitespace characters weren't
considered to be blank lines. Now they are.
Increased the limit on word size, for the ^A command. (Search for
next occurrence of the word under the cursor.) The old limit was
30; the new limit is 50. To change the limit, add -DWSRCH_MAX=n
to CFLAGS in the Makefile. If you exceed this limit, it'll now
search for the longest possible substring; before, it would bomb.
Increased the size of an array used while showing option settings.
The old size could overflow if you did a ":set all" on some systems.
Now, the maximum size is calculated at compile time, and the array
is declared to this size.
The command 5r^M now leaves the cursor in the right place. In earlier
releases, 5r^M would replace 5 characters with 5 newlines, and leave
the cursor 5 lines lower. 1.8 replaced 5 chars with a single newline,
to mimic the real vi better, but still left the cursor 5 lines lower.
This patch finally makes it right.
Finally put my current address in the source files.
pl3: Corrected bugs in :tag and :make, which caused tag addresses and
error messages to be forgotten after switching files. The ".exfilerc"
feature interacted with these bugs, and made them pretty obnoxious.
A similar bug caused ":e +cmd file" to start misbehaving; it has been
The "window" option now defaults to 0. 0 is a special value, meaning
"use as many rows as possible". Previously, this option defaulted
to the maximum number of rows available when elvis started (usually 24)
which resulted in '@' signs appearing on the screen if you resized the
display while elvis was running. (As far as I know, this problem only
showed up when you ran elvis in an xterm.)
And speaking of xterm, some people asked whether elvis' new "click to
position the cursor" feature could be bypassed in an xterm. It can be!
The secret is to hold
select & paste operations. I've added a note to the "versions" section
of the manual mentioning this.
The CHANGES file mentioned version 1.8c-beta, instead of 1.8. This
has now been fixed.
A bug has been fixed in autoindent. Previously, if you inserted a
newline before the first non-whitespace character on a line, then
everything after the insertion point was wiped out. (This is different
from the bug that pl2 fixed. pl2's fix addresses a bug which affected
insertion of multiple newlines anywhere in a lines; this one affects
inserting a single newline before the first non-whitespace character.)
To avoid linking problems on various systems, the name of the "kD"
variable has been changed to "kDel", and the name of the ioctl()
function in pc.c has been changed to "elvis_ioctl".
A bug that caused :! to clobber the value of # (the previous file name)
has been fixed.
There is a bug that affects screen redraws after pasting (the visual
p and P commands). In an attempt to work around this bug, elvis will
sometimes redraw the screen from scratch after a multi-line paste.
Some people have reported problems using fmt on non-English text.
I suspect that this is due to a faulty implementation of isspace()
in the standard C library. In 1.8pl3, fmt doesn't use isspace()
anymore; it uses a built-in macro which explicitly tests for ' ' or
'\t'. Hopefully this will solve the problem.
The special sequence \@ will be replaced by the word that the cursor
is on, in two contexts. The first context is any ex command which
also replaced % with the current filename. The other context is in
regular expressions. This can simplify writing certain kinds of
I've attempted to find most of elvis' (and vi's) security holes, and
optionally disable them. My intent is to make modelines and ./.exrc
safe, BUT I'M NOT MAKING ANY PROMISES! A new option, "safer", has been
created to turn this extra security on and off. This option is set
temporarily during the execution of any commands from modelines or
./.exrc. You can also set it permanently via ":set safer", or by
adding "-s" to elvis' command line. (The "safer" feature can be
removed by added -DNO_SAFER to CFLAGS in the Makefile.)
The following commands are disabled:
:! :Next :abbreviate :args :cc :cd :chdir :ex
:file :make :map :mkexrc :next :pop :previous
:rewind :shell :stop :suspend :tag :unab :unmap
Although :write is disabled, :wq is not. :wq doesn't
let you specify a filename to write to, so it should
be fairly safe.
:read is still allowed, but it won't allow you to
read from a filter.
The following options can't be altered:
autowrite cc directory equalprg keywordprg make
Wildcard expansion is disabled.
The visual ! command is disabled.
pl4: Fixed a bug in "cut.c". In VMS, this bug would cause elvis to
dump core if the last line of the buffer was yanked and then pasted
twice. In DOS, it would sometimes cause elvis to forget the name
of the file being edited.
Changed "instman.sh" to allow it to install compressed man pages in
directories with names like ".../man1.Z/vi.1" Also, I added the
directory /usr/elvis/man as one possible directory for man pages.
Fixed a minor bug relating to $EXINIT and $HOME/.exrc initialization.
Also, I updated "doc/elvis.man" and "doc/environ.ms" to describe the
way that EXINIT currently behaves.
Minor POSIX compatibility bug fixes.
Several changes were suggested by Mike Burrows. Actually, he supplied
patches for all of these changes, but they were against an older
version of elvis, and were slightly munged by the mailer, so I had
to apply the patches by hand... sometimes excercising a bit of
creativity. The changes are:
* Allow typeahead on POSIX machines when starting elvis
by using TIOCSETN instead TIOCSETP.
* Allow typing "." to repeat a filter command.
* Make count on join command be like vi.
* Allow count on p and P commands.
* Use "line mode" for paragraph deletes and yanks
if at start of paragraph.
* Change autoprint mode to be more like ex. Now, only a
few specific commands will trigger autoprinting.
A new option, ":set keepanon", allows the anonymous cut buffers'
contents to be retained when you switch to a different file. This
option is false by default, for compatibility with the real vi.