CONTENTS
  • 1. ABOUT THIS FILE
  • 2. RECENT CHANGES
  • Between 2.1h-beta and 2.1i-beta
  • Between 2.1g-beta and 2.1h-beta
  • Between 2.1f-alpha and 2.1g-beta
  • Between 2.1e-alpha and 2.1f-alpha
  • Between 2.1d-alpha and 2.1e-alpha
  • Between 2.1c-alpha and 2.1d-alpha
  • Between 2.1b-alpha and 2.1c-alpha
  • Between 2.1a-alpha and 2.1b-alpha
  • Between 2.0 and 2.1a-alpha
  • 3. FUTURE PLANS
  • 4. LINKS TO RELATED FILES

  • 1. ABOUT THIS FILE

    This file is written in the HTML markup language. You can view it with any WWW viewer, such as Netscape. You can also use elvis 2.1i-beta to view it; this version of elvis has the ability to view HTML documents, and print them.

    This file has many hypertext links. Use them! If you're using elvis 2.1i-beta to browse this file, then hypertextual references will appear as underlined text. (Except on color PCs; since color video cards don't support underlining, hypertextual references will be colored -- white on red, by default.) To follow the hypertext link, move the cursor onto the underlined text and press (Enter). To go back, press (Control-T). The (Tab) key moves the cursor forward to the next hypertext reference.

    If elvis 2.1i-beta doesn't automatically start up in HTML mode when you view this file, then you'll need to force it into HTML mode by giving the command ":display html".

    2. RECENT CHANGES

    The following is a summary of changes made since the release of elvis 2.0. For a more detailed (but cryptic) list, see the "BUGS" file included in the source and binary distribution archives.

    Changes between 2.1h-beta and 2.1i-beta

    Well, I broke my own rule this time. Even though elvis is in beta-test, there are some significant new features in this update for OS/2 and MS-DOS users. Other than that, most of the changes are bug fixes, portability enhancements, or standards conformance tweaks.
    OS/2 support
    Elvis can now be compiled on OS/2 as a native program -- you aren't stuck using the MS-DOS version anymore! Currently it only runs as a text-mode program using the "vio" interface, which looks and acts a lot like the termcap interface for other operating systems. A graphical version, based on Presentation Manager, is not yet available.
    More free memory under MS-DOS
    Elvis now uses Thomas Wagner's "exec 3.3b" functions to swap itself out to EMS/XMS memory or a temporary file, while it runs any external programs. Typically, only about 2K bytes remain resident. This makes a huge difference -- DOS users can finally run a compiler from within elvis!

    Since elvis doesn't have to conserve memory quite so much, most of the features that had to be disabled in previous versions are now enabled. Also, the default block size has been increased from 512 bytes to 1024 bytes; this should make elvis run faster.

    Regular expressions
    In regular expressions, some problems with character classes were fixed. Character classes are symbols such as [:alpha:] which appear inside [...] metacharacters.

    Also, there were problems parsing a / character that appeared as part of a character list inside [...] metacharacters. That's fixed now too.

    X11 detection
    In addition to checking the value of the TERM environment variable for a known X terminal emulator, elvis now checks for the existence of WINDOWID. This will usually allow elvis to automatically select the "x11" user interface even if you start it from a terminal emulator that isn't known to elvis. However, when starting elvis from a menu (e.g., from the window manager), you will still need an explicit "-Gx11" flag.
    Error logging
    When elvis is invoked with "-VVV", it writes debugging information to stdout and stderr. However, Windows95 and WindowsNT discard anything written to stdout or stderr by a graphical program, which made WinElvis configuration problems hard to diagnose. So I added a "-o logfile" argument which redirects that information out to a file.
    Documentation
    Many typos in the online manual have been fixed. Unclear verbage has been revised. Errors have been corrected. Many broken hypertext links have been fixed. The discussion of character classes in the "Regular expression" chapter has been expanded. In the "Ex commands" chapter, the description of file arguments has been greatly expanded, describing all of the special characters you can use in file names. The new OS/2 port is discussed.
    Miscellany
    The convention for extended tags has been revised again; elvis and its related programs have been tweaked to use the new convention. If an expression uses $VARIABLE and there is no environment variable with a case-sensitive matching name, then elvis tries the lowercase equivelent, $variable. Some problems with single-line aliases were fixed. Lots of little bugs have been fixed, some of which could have caused elvis to crash.

    Changes between 2.1g-beta and 2.1h-beta

    Elvis is now in beta-test, so no big new features will be added until after the official 2.1 release. Consequently, all of the changes between 2.1g-beta and 2.1h-beta are bug fixes and documentation updates. The following is a list of bugs fixed:
    The X11 User Interface
    Elvis was miscalculating the size of the window, so that its requested window size wasn't equal to the base size plus an integer times the increment size. When this happened, some window managers tried to force elvis to resize the window, at which point elvis would miscalculate the size again, resulting in a loop. This loop had no visible effects, but it did burn CPU cycles. This is now fixed.

    In a related problem, if two configure events for different sizes happened to be in the message queue, then would try to adjust to the first configure event and and force the window to its miscalculated size before handling the second queued configure event. This resulted in an endless loop in which elvis cycled between two or more different window sizes. Fixing the miscalculation described in the previous paragraph reduced the chance that two configure events could be queued, but it didn't eliminate the chance. Consequently, elvis will now try to detect multiple configure events and ignore all but the last. This should solve the problem. It also has the unfortunate side-effect that if you manually resize the window rapidly then elvis may wait a while before responding.

    The XGetInputFocus() function is now assumed to return a void value. In previous versions of X it returned a success indicator; elvis was testing that value, but it didn't really need to and the test was interfering with X on some platforms.

    Modifiers on non-US keyboards weren't working correctly. I took a stab at fixing this one, but since I don't have a non-US keyboard I can't really tell if it works. (What's the German phrase for "Cross your fingers"?) Anyway, it still works great for US keyboards, so apparently I didn't break anything.

    The Graphical WIN32 User Interface
    When dropping a file into elvis, the special characters weren't being quoted. This prevented elvis from accepting files whose names contained spaces, etc. This should be fixed now.
    Compatibility Problems
    In osunix/tcaposix.h, the sigaction() calls don't use sa_restorer anymore because it is obsolete and not universally supported.

    In osunix/osnet.c, the function netread() tried to return -1 to indicate an error. It should return False.

    Problems remained with terminals that support dim text but not bright text (the md/me/mh termcap attributes). Hopefully this is now fixed.

    The "configure" script has been patched to support FreeBSD.

    Obscure features
    The [charlist] notation in regular expressions didn't allow ] to be included in a regexp. It should be allowed as the first character, or after an initial ^ character for negating the list, or after a - as the end of a range. Now it is!

    The backslash changes for aliases seemed to break backslash handling for commands like...

    	g/foo/a\
      	one\
      	two
    ... which suddenly started adding an extra blank line. This is now fixed.

    In ex mode if you hit at the end of a file, elvis used to say "bad delta". Now it gives a better error message, "no more lines".

    The "tags" option needs to support a notation for "look in the directory of the current file". Elvis now allows you to say "./tags" to denote that.

    After a <L command, elvis gave the message "15 lines NULLed". Now it will correctly say "15 lines <ed".

    Added a dummy "redraw" option.

    Improved the entry in "elvis.syn" that describes HTML highlighting. Now it includes all tags in HTML 3.2, and most of the parameters as well.

    When the "number" option is set, clicking the mouse would set the preferred column to the wrong value; if you clicked and then hit j/k, the cursor jumped to a different column. This is fixed.

    A crash was reported in the "tex" display mode. I suspect this was caused by overflow when elvis encountered a very long token. I have now gone through that code and ensured that elvis always detects token buffer overflow and handles it gracefully.

    The hacked ctags program couldn't quite handle derived classes: "class foo: public bar {...}" should generate an entry for "foo" and ignore "bar". I've managed to fix this particular bug, but others remain.

    Changes to the Manual
    The use of multiple -V flags was never explained. Now the "Sessions..." chapter describes it at the top of the "Initialization" section.

    Due to memory constraints, the DOS version is missing some features. Notes have been added to the manual where necessary to warn DOS users when features about to be discussed are unavailable to them.

    The online manual title said "elvis 2.0" -- I changed to "2.1".

    I fixed a reference to "14.x" which should actually read "16.x".

    The "Tips" chapter of the manual has a new section that discusses how to make elvis run faster.

    I added a paragraph to the manual describing how to embed ']' and '-' characters in a character list in a regular expression.

    Changes between 2.1f-alpha and 2.1g-beta

    In the "x11" interface
    The bug which intermittently prevented the scrollbar's "down" button from being drawn. Another bug has been fixed which caused the toolbar to be drawn incorrectly on some systems, notably AIX. Changed the name of the "scrollbar" option to "xscrollbar", to avoid a clash with WinElvis's "scrollbar" option.

    Added a pushpin to the dialog's icon. Dialog fields can be declared to be of type "locked". The labels of the dialog's [Submit] and [Cancel] buttons can be changed via some new options named "submit" and "cancel"; the default values of those options are drawn from the "elvis.msg" file.

    Added a "-mono" command-line flag.

    Some "win32" fixes...
    UNC names (e.g., "\\machine\directory\file") are parsed correctly. There was a bug which caused elvis to leave temp files lying around; This is fixed.

    The "windows" user interface is now described in the online manual. In WinElvis, the names of some options have changed, in order to avoid clashes with X11 option names (which shared the same names, although they have different meanings). Specifically, "normalfont" was changed to "normalstyle", "boldfont" to "boldstyle", and so on.

    WinElvis now supports -Gquit, so you can print elvis' files using lptype=windows.

    The text-mode version now allows you to resize the console buffer by giving the command ":set ttyrows=... ttycolumns=...". Text-mode elvis can now read from external programs again (":r !cmd").

    Some tag enhancements...
    In the :ta command, you can now quote special characters by preceeding them with a backslash. The tag search code has been extended to support unsorted tags files, if "!_TAG_FILE_SORTED 0" appears near the start of the tags file. There are also new "tagprg" and "tagprgonce" options, for running an external tag search program. With suitable wrappers, this allows you to use CSCOPE or Shigio Yamaguchi's GLOBAL program for tags.

    The default behavior of "ctags" has changed. If you invoke it without any flags, it assumes it should use the "-s -t -v -h" flags.

    In input mode...
    ^L doesn't redraw the screen anymore; that was causing problems for some people's macros. Abbreviations weren't expanded before <Return> or <Esc>; now they are. Rapid left-arrow in input mode could cause characters to be dropped. (I had fixed *part* of that last bug before, and this should complete the job.)
    A new :alias command has been added.
    It uses a syntax similar to csh's alias command. Run ":help :alias" for more info. Also there are now :while/:do commands, and the { ... } notation for grouping commands can now be nested.
    Lots of little bug fixes...
    ":w >>foo" wasn't setting the alternate file name correctly. The ":set" command didn't permit trailing spaces after the last name=value clause. Macros couldn't be undone in a single step; now they can. Under MS-DOS, elvis was writing each output character twice, and mouse selections didn't look right when using ANSI.SYS. The saveregexp option wasn't saving the replacement text. Long cursor movements didn't always center the cursor correctly. Large ":copy" commands didn't work right. The syntax-coloring mode's keyword table was too small to handle PERL. The Linux console version didn't save the shell prompt's screen colors.

    Changes between 2.1e-alpha and 2.1f-alpha

    Changes to filename handling
    Under some circumstances a leading backslash was removed from file names; this has been fixed. Also, file name completion (the <Tab> key) has been modified insert a backslash before special characters, such as spaces, to "quote" them so they're treated as normal characters. Win32 menu items which prompt for a file name will do this too.
    The :mkexrc command is slightly more powerful
    Previously :mkexrc couldn't store window-specific GUI-dependent options. This was siginificant in WinElvis, because the font is a window-specific option. Now :mkexrc will store the values for the current window; those values will then be the defaults for all windows the next time you start elvis. The generic window-specific options and colors already worked this way.

    Also, WinElvis' "Options->Save" menu item will now add a "!" to the :mkexrc command line, so it can overwrite any existing elvis.rc file.

    Clipboard
    The GUI's cut buffer is now referred to as "^ (doublequote carat) regardless of whether you're cutting or pasting. Previously the buffer was referred to as "> when cutting, or "< when pasting, but that seemed counterintuitive to a lot of people.
    Comments in "syntax" mode
    Single-line comments are now marked with keywords, rather than simple one- or two-character strings. Since one- or two-character strings can be defined as keywords, this shouldn't cause any problems. It does, however, offer a lot of interesting new possibilities.

    You can use actual words to start comments, such as "rem" in DOS batch files. You can make comments appear in any font, not just the one defined by the commentfont option. You can configure multiple keywords for starting comments.

    Also, the syntax mode now allows you to restrict certain keywords to a particular column, via an "anchor" line in the description. For example, if your elvis.syn file contains the line "anchor 1 BEGIN END" then the BEGIN and END words will only be keywords if they appear at the start of a line.

    The X11 user interface
    The text cursor now defaults to the solid "xor" shape, instead of the "hollow" shape. It reverts to the "hollow" shape whenever the window looses input focus, just like an xterm window.

    You can now attach configurable dialog windows to any toolbar button. The dialogs allow you to edit some options before the toolbar's ex command is run.

    Text-mode Win32 improvements
    Under Win32, the termcap interface runs much faster, and all of the display bugs have been fixed (knock on wood). Also, you can now access Windows' clipboard via the "^ cut buffer.
    Scripts
    The POSIX "-s" flag (and archaic "-" flag) for running scripts is now supported. The flag for setting the "safer" option has been changed to "-S" (uppercase) to avoid a name clash.

    Changes between 2.1d-alpha and 2.1e-alpha

    The tag file format has been tweaked.
    The authors of Vim, Elvis, and Exuberant Ctags are working together to define a new standard for tags files. A new standard is needed because the old format doesn't work well for C++. The new tags format is almost identical the extended tags that were introduced in elvis 2.1b; in fact, 2.1e should still be able to read tags files created for 2.1b through 2.1d.
    The Win32 graphical interface has been improved.
    Most of the changes were bug fixes. Some of the more visible ones are:
    The X11 graphical interface has been improved.
    Many improvements were added in 2.1d-alpha. Here are some that were added after that:
    Lots of little GUI-independent bugs have been fixed.
    These are the main reason for 2.1e-alpha!

    Changes between 2.1c-alpha and 2.1d-alpha

    Network I/O has been improved several ways.
    These affect the use of elvis as a Web browser.

    By the way, the combined FTP/HTTP network access adds only about 8k bytes to the executable. If you want to reuse the code for your own project, grab url.c, http.c, ftp.c, os*/osnet.c, and parts of elvis.h, elvisio.h and opsys.h.

    The X11 interface has been slightly improved.
    These are in addition to the 2.1e-alpha changes, listed above.

    Between 2.1b-alpha and 2.1c-alpha

    The "x11" user interface has been reorganized.
    The "x11" interface began as a quick hack; I intended to replace it with the REAL "x11" interface fairly quickly. But I never got around to that, so now I've decided to clean up the hack, and give it a future.

    Most of the changes merely affect the internal organization of the interface, with the intent of making it easier to add new features such as a menubar in the future. However, some of the changes are detectable now:

    Elvis can now fetch files via HTTP.
    In addition to being a really good editor, elvis can also be used as a crappy Web browser... currently under Unix only, but it should be fairly easy to add to Win32 as well.

    I implemented this partly just to see how hard it would be. It took less than one day, and added maybe 4k bytes of code! It was worth the effort.

    I added a new section to the "Tips" chapter of the online manual, describing elvis' Web facilities. Basically, it boils down to:

    A new "locked" option has been added.
    It prevents practically all types of changes to a buffer. By default, it is set for some of the more delicate internal buffers. The default "elvis.arf" file also sets them for Web pages which were read via the network, just as a convenience: You probably don't want to edit them anyway.

    The "locked" option is totally separate from the "readonly" option.

    A new "lpnumber" option has been added.
    It causes printouts to have line numbers, just like the "number" option does for windows. Also, for the normal and syntax display modes, it causes each page to include a header which shows the file name, page number, and date/time that the printout was created.
    A new "tex" display mode has been added.
    Don't get excited, it isn't that good. This is just a two-day hack by somebody (me!) who doesn't use TeX very much. Obviously I expect TeX folks to find it useful... but I'm worried that if I say anything good about it, I'll get mail from somebody saying, "I know TeX. TeX is a very good friend of mine. And Mister Kirkendall, elvis is no TeX!"

    It shares a lot of code with the html display mode. Consequently, it only increases the size of elvis by about 3k bytes!

    The "^Wd" command is a little smarter.
    The ^Wd command toggles the display mode between the buffer's bufdisplay mode, and one other mode. Previously, that other mode was always normal, but now it will use the syntax mode whenever appropriate.

    For example, if you're editing an HTML file, then ^Wd will toggle between the html and syntax html display modes.

    Between 2.1a-alpha and 2.1b-alpha

    Bugs
    Many small bugs have been fixed. See the "BUGS" file for a detailed list.
    The "showname" option
    A "showname" option has been added. When set, it causes the name of the buffer to be displayed at the bottom of each window.
    The % visual command.
    The % visual command has been enhanced. There is a new option, "matchchar", which stores a list of character-pairs to be matched. The default is matchchar=()[]{} which makes % act like it always has. You might want to try matchchar=()[]{}<>\"\" though.

    Also, in the "syntax" display mode, the % command can match #if/#else/#endif preprocessor directives. The cursor must be on or before the '#' character for this to work.

    Buffer browser
    A :bb[rowser][!] command has been added. It constructs an HTML document listing all of the edit buffers, with hypertext links to each of them so you can select a buffer just by double-clicking it. Normally :bb lists the user buffers, but :bb! (with a !) lists all buffers including elvis' internal ones.
    Tags
    Elvis' handling of tags has been enhanced to work better for C++. The specific changes are:
    X11 resources
    The "x11" user interface can now read some of its defaults from the X resources database. The resource values are used as defaults for options or color table entries. The supported resources are:
    .----------------------------.----------------------------------.
    | Resource name              | Option, default                  |
    |----------------------------|----------------------------------|
    | elvis.toolbar              | toolbar, yes                     |
    | elvis.font                 | normalfont, fixed                |
    | elvis.geometry             | geometry, 80x34                  |
    | elvis.foreground           | (normal foreground), black       |
    | elvis.background           | (normal background), white       |
    | elvis.dblclicktime         | dblclicktime, 4                  |
    | elvis.control.font         | controlfont, variable            |
    | elvis.cursor.foreground    | (cursor foreground), red         |
    | elvis.cursor.selected      | (cursor background), red         |
    | elvis.cursor.blinktime     | blinktime, 3                     |
    | elvis.scrollbar.foreground | (scrollbar foreground), gray75   |
    | elvis.scrollbar.background | (scrollbar background), gray60   |
    | elvis.scrollbar.width      | scrollbarwidth, 14               |
    | elvis.scrollbar.repeat     | scrollbartime, 3                 |
    ^----------------------------^----------------------------------^
    
    In each case, if your .exrc file sets the option or color, then the value from the resources database is ignored. All times are given in units of 0.1 second.
    :only and ^Wo
    The :on[ly] and ^Wo commands have been added. They close all windows except the current one.
    :buffer name
    When :buffer is given a buffer name as an argument, it will now cause the current window to switch to the named buffer. (Previously, :buffer name would simply rename the current buffer.)
    Numbered buffers
    Each buffer now has a bufid option. User buffers' bufid options are assigned consecutive numbers, and you can use those numbers in place of a buffer name. For example, if your first file is named "foo.c", then your first buffer will be named "foo.c" as well. Since it is your first, its bufid will be 1. You can then refer to the buffer by name (:(foo.c)%p) or number (:(1)%p). Also, anywhere that elvis is expecting a filename, elvis will replace "#n" with the filename of the buffer whose bufid=n. You can use :buffer (with no arguments) to list all user buffers' names and bufid values.
    The untar program
    On POSIX-compliant systems, the untar program can now restore timestamps and permissions of the files that it extracts. These features are enabled when untar.c is compiled with _POSIX_SOURCE defined.

    Note: The untar program isn't really part of the elvis package.

    Binary and text conversions
    The "binary" option has been deleted. It is replaced by the following: The default configuration handles binary, unix text, dos text, and mac text files automatically.
    DOS Mouse
    The MS-DOS port now supports the mouse. The DOS port is a text-mode application, and you must have a mouse driver installed and running for the mouse to work. The mouse behaves the same as it does in the Win32 text-mode port; they are both subsets of the X11 mouse support. Specifically...

    Between 2.0 and 2.1a-alpha