- The version number has been changed to 1.6. - The exit code of elvis is now 0 if the file wasn't updated, 1 if it was updated, or some other value for errors. This was done because some versions of crontab apparently are sensitive to the exit status. - The :join and shift-J commands are now a little smarter. - Most UNIX versions of elvis will now allow ":source" scripts to recursively invoke other scripts. Also, the script files can be larger. Why not all versions? The solution uses a lot of stack space. Some systems have tiny stacks, so they must continue to use the old code. - New-style function prototypes are used if __STDC__ or cplusplus is defined. The function definitions are still written in the old style, so K&R compilers can still compile elvis. A few of the function declarations were changed slightly, in order to avoid differences between ANSI and K&R standards. Also, if __STDC__ is defined then elvis's source code will try to include some of the ANSI headers such as . - Two bugs have been fixed in the wrapmargin code. The first bug caused my ELVIS.EXE MS-DOS executable to go into an infinite loop when it tried to do an automatic wrap. This was apparently due to a bug in my MSC 5.10 compiler. It went away when I broke up a 4-line expression into four 1-line expressions. The second bug showed up when inserting text in front of some words. When the line gre too long, the last word would be moved to the next line, even if the cursor hadn't reached the wrapmargin yet. - Two bugs have been fixed in autoindent mode. One was a biggie: The code that was supposed to delete trailing whitespace from a line was actually deleting text up to the previous end-of-line. So if you inserted a newline into the middle of a line, then the tail of the line just "went away." The other was that "i" on an empty line would automatically insert whitespace to make its indent match that of the line above. The real vi doesn't do that, and elvis 1.6 doesn't either. - A new compile-time option has been added: -DMAILER=string. This will allow you UNIX users to choose a mailer other than "mail", if they wish. On BSD systems, you might prefer to use "Mail" to deliver your mail, for example. SysV users may prefer "mailx". Since the value of MAILER should be a quoted string, you need to be careful about quotes: -DMAILER=\"mailx\" - The ctags program didn't work under MS-DOS because it wasn't stripping the '\r' character from the end of each line. This has been fixed. Also, it didn't expand wildcard characters in filenames correctly, either. This has also been fixed. - The :ks=:ke=: termcap strings aren't used anymore. Those strings are supposed to be used to put the keypad in "application mode", but it seems that editors aren't applications in the eyes of termcap entry writers. The :ks=: string was making the arrow keys send goofy codes instead of the normal codes defined in :ku=: etc. So the arrow keys on a vt100 or Xterm are more likely to work now. - "d}" now works better at the end of the file. Also, this will delete characters now, instead of whole lines. - "dw" while the cursor is on whitespace will now correctly delete one character. (It used to delete two characters.) - With ":set number" turned on, there is no longer a '|' between the line number and the text. - Elvis should now work better on screens with a width that isn't divisible by eight. (This bug caused some lines to be drawn indented on some terminals.) - Sometimes, after a long move, the line containing the cursor would not be redrawn. This bug has been fixed. I think. - A bug has been fixed in the regexp code. This bug caused elvis to dump core on a command such as ":s/--/[]/g". What was happening was that *part* of the regexp parser was failing to stop at the end of the regexp, and was processing the replacement text as though it was part of the regexp. This would cause elvis to write past the end of the internal struct used to store the regexp. - We generally try to avoid using "#if defined(SYMBOL)", since not all preprocessors can handle the defined() function. - The \ menu wasn't being erased completely under some circumstances when the > option was chosen. This has been fixed. - After something like "d/foo" to delete all text up to the next "foo", "." would only automatically repeat the "d/" part of the command. You still had to type in "foo" manually. This has been fixed. - The command "dtA" would delete a character even if no "A" was found. This bug has been partially fixed: it doesn't delete anything, but it doesn't beep at you either. - On VMS systems, wildcard expansion no longer includes the version number. Earlier versions did include the version number which could cause confusion if you edited a file, wrote it out, and then did a ":rew" or something. - Under AmigaDos 1.3, any files written out by elvis would be marked as "resource busy" or something like that. This has been fixed. - Some minor compatibility fixes were made; elvis should be easier to compile now, especially under AmigaDos with the Manx Aztec C compiler. - If the arrow key is the same as the key, then elvis will not map it automatically. This was causing some major confusion among people who're stuck with ancient terminals. - A new option has been added: "nearscroll". It is a numeric option, and its value is used by elvis when deciding whether an off-screen line is near enough that the screen should be scrolled to bring it into view, or far enough that the whole screen should be redrawn with the line in the center of the screen. It defaults to 15 lines, which is pretty much the way elvis has always acted. - The elvprsv program will now work under MS-DOS. It didn't before, due to a bug in the Elvis.mak file and also a because ctype wasn't initialized before wildcards were expanded. If you add "elvprsv c:\tmp\elv*.*" to the end of your AUTOEXEC.BAT file, and create a directory called "C:\preserve", then your edit buffers will be preserved automatically after a power failure, etc.