README.html file for elvis 2.1i-beta
Description: Quick intro to elvis 2.1g-alpha, with links to source code and binaries
Keywords: vi, elvis, unix, linux, msdos, win32, windows95 windowsNT, nt, editor, source

CONTENTS
- 1. ABOUT THIS FILE
- 2. RECENT CHANGES
- Between 2.1i-beta and 2.1j-beta
- 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.1i-beta and 2.1j-beta

  The biggest change is that a whole lot of time has passed. I got distracted by the real world. Sorry.

  Elvis 2.1 will be distributed under the terms of the Perl "Artistic License." I didn't want to use GPL because it is far too strict. For a while I considered distributing elvis under the user's choice of either the old elvis license or GPL... but then I decided the Artistic License comes pretty close to what I really intended, and it seems wise to use a well-established license rather than make up my own. The lib/license file describes the Artistic License.

  Other than that, there are some new features (mostly to fill gaps which had become annoying) and a lot of little bug fixes. Specifically...

  Name completion
    Name completion (the <Tab> key on ex command lines) is greatly improved. It is now somewhat knowledgable about ex syntax, so won't attempt to complete file names for commands that don't use file name arguments. I did this mostly because I got tired of typing <Ctrl-V> before each <Tab> in a `:s` command.

    As a bonus, it can now complete ex command names, option names, option values, and tag names. You can even make tag name completion work while editing your own source files (see the "inputtab" option). And for file name completion, elvis can optionally omit binary files (see the "completebinary" option) and when listing multiple matches it will skip the directory portion of each file name.

    Sadly, all of this makes name completion so big that I decided to leave it out of the MS-DOS version (#undef FEATURE_COMPLETE in config.h).

  Substitution and Regular Expressions
    Elvis' `:s` command now supports the 'c' flag! There were a lot of little bug fixes I wanted to make in the substitution code (mostly for the benefit of the `:&` and `:~` commands) but it seemed silly to fix the old code when I knew I'd have to rewrite it soon anyway to support 'c'. So I added the 'c' flag first, and then fixed the bugs.

    Regular expressions have been extended with Perl-style tokens for common character classes: `\d` for digit, `\s` for whitespace, `\w` for alphanumeric (including '_'), and `\p` for any printable character... Plus uppercase versions which match any character not in those classes. You can also use most of the C escapes, such as `\r` for carriage-return, and `\0` for nul, either in a regular expression or in replacement text for the `:s` command.

  Files that don't end with a newline
    Like vi, elvis will now append a newline to the edit buffer so the last line can be edited like any other line. Elvis does it better though: It sets a new "partiallastline" option to indicate that it added the last newline; when the file is written out in binary mode, elvis will then omit the added newline.
  Networking
    Elvis is now a lot smarter about detecting the type of FTP files. The FTP protocol doesn't support any direct way to check a file's attributes (new? readonly? directory?) so it needs to be smart.

    Also, there were some bugs in way that elvis combined file names when given a URL. These have been fixed.

    Name lookup should be faster now. When you look up the name of a system many times in a row (which is typical) elvis will only perform the name look up the first time; after that, it just remembers it. This should make navigating a set of HTML files, or the directory tree of an FTP site, much faster.

  Formatted display modes
    In the "html" display mode, links are easier to follow. Previously, the cursor had to be at or after the start of the <a ...> tag in order for the link to work. This was a problem because <a ...> links are often preceeded by other tags which have no visible screen image, so he cursor would be displayed on the link's highlighted text but the cursor was actually outside the link. Now elvis allows links to be followed even when the cursor is on those invisible tags. A few other formatting problems are fixed now too.

    In the "man" display mode, the \^ escape is accepted as a zero-width string. It also handles .TS, .TE, and .HP macros, more or less.

    A fatal bug in the "tex" display mode has been fixed. Previously, an attempt to use :tag would cause a core dump.

  Tags
    The "showtag" option should now load a file's tags very quickly, if they have an "ln" attribute. The "ln" attribute gives their original line number, allowing elvis to greatly reduce the search time.

    The version of ctags distributed with elvis has been extended to generate "ln" attributes. Also, there was a bug in the MS-DOS and Windows versions which prevented it from finding most tags; this has been fixed.

  New Commands
    There are new ex commands for outputing messages. `:message` outputs a normal message, `:warning` outputs a warning message, and `:error` outputs an error message. Also, `:error` has the side-effect of cancelling any pending aliases or macros.

    There is also a new `:try` command. It executes an ex command line, and then sets the then/else flag to indicate whether the command succeeded or not. Either way, the `:try` command itself succeeds. This is useful for adding error control to scripts and aliases.

  Aliases
    The notation for arguments in an alias (e.g., `!1` for the first argument, and `!*` for all of them) has been extended. You can now place a backslash after the `!` to have elvis insert backslashes before any characters which would be treated specially inside a regular expression. Also, you can place a default value inside parentheses after the `!` (e.g., `!(first arg)1`) which elvis will use if that argument is missing or empty.

    When `:alias` is invoked with no arguments to generate a list of aliases, the list will now be sorted by ASCII order; previously they were listed in the order in which they were defined.

    The built-in calculator now has an `alias()` function which tests for the existence of a given alias.

    I'm including some sample aliases in the lib/exalias.eg file.

  Miscellaneous
    The calculator supports `\a` in strings and chars. The `isnumber()` function allows a decimal point (but everything after the decimal point is ignored). The change to `isnumber()` was made mostly so that error messages of the form "file:line.column: message" could be recognized.

    The "configure" script now supports a `--verbose` flag, which causes it to explain any decisions that it makes.

    You can now directly edit a cut buffer, via a command such as `:("a)split` to edit the "a cut buffer. This is particularly handy when the cut buffer contains a macro that needs some work. Also, the content type (character, line, or rectangle) used to be stored on the first line of the buffer, but now it is stored in a new option named "putstyle".

    Fixed a fatal bug which could cause elvis to hang or dump core in some circumstances. This one was nasty!

    Fixed a minor bug in the "x11" user interface, which caused the text area to shrink (show fewer columns or lines) when the font size was changed. Also, there is a new "borderwidth" option for adjusting the number of blank pixels around the edge of the text area.

    The tiny "alias.c" program is now compiled to produce vi.exe, ex.exe, and view.exe for DOS, Win32, and OS/2. Previously DOS and OS/2 had separate versions of this, and Win32 didn't have it at all.

    Lots of other fixes. If you're curious, take a look in the "BUGS" file.

  ## 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:
    - When the mouse pointer is moved into the left margin (the area used for selecting whole lines) the cursor shape changes.
    - Italic characters were always shifted slightly to the left. This was done to compensate for the skewing that Win32 uses to simulate italics. However, if you disabled the skewing by ":set italicfont=n" then elvis still shifted them needlessly. Now it won't shift italics if italics are displayed as normal unskewed characters.
  The X11 graphical interface has been improved.
    Many improvements were added in 2.1d-alpha. Here are some that were added after that:
    - Changed the X resources so that toolbar buttons now have separate foreground and background resources. Previously, the button face was drawn in the scrollbar foreground, and th button label was drawn in the normal text foreground; this foreground-on-foreground combination used to show as solid black on some workstations.
    - The "-client" option should be smart enough now to ignore elvis servers which are running on a different host, or have a different user ID.
  Lots of little GUI-independent bugs have been fixed.
    These are the main reason for 2.1e-alpha!
    - The handling of backslashes in filenames has changed slightly, so that fewer MS-DOS file names will cause problems. Now a backslash is only seen as a quote when it precedes a dollar sign, parenthesis, or another backslash.
    - The :lpr command now supports appending. E.g., ":lp >>foo".
    - If the last line didn't end with a newline, and you did a Y on the last line, then elvis used to go into an infinite loop. Not any more!
    - Newly created windows now acquire input focus immediately. Previously they didn't acquire input focus until the next keystroke was read; this prevented macros from creating new files and doing something in them.
    - The :s command (with no args) should repeat the previous :s/old/new/ command, just like :&. It didn't, but now it does.
    - Some cut buffer bugs have been fixed. This also affects cut&paste between applications.
    - The "Hit <Enter> to continue" prompt is disabled during the execution of a macro.
    - Fixed a minor bug in the handing of the scrollbar (for any graphical interface) which caused the screen to jump slightly as soon as you started to move the scrollbar's thumb.
    - The :close command was dangerous. It could conceivably close the last window even if there were unsaved buffers. This has been fixed.
    - The :only command caused core dumps on some systems.
    - The markup display modes (html, man, and tex) used to widow punctuation that occurred near the end of the line. This shouldn't happen any more.

  ## 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.
    - FTP protocol is supported, in addition to HTTP
    - The FTP protocol can be configured to access selected sites using your own account, instead of the default anonymous access.
    - Elvis can be configured to use HTTP proxies, either to reach past a firewall or to use protocols which elvis doesn't support directly.
    - While a file is being received, elvis displays the total number of expected, in addition to the number of bytes received so far.
    - Directories can be read via FTP. They are converted into HTML documents so you can use elvis as a remote file 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.
    - The "x11" initialization has been split into a separate "elvis.x11" configuration file. This was done mostly to keep "elvis.ini" small.
    - An optional status bar has been added. It is enabled by default; to disable it, give the command "set nostatusbar".
    - Toolbar buttons can now be assigned one-line descriptions. These are displayed on the statusbar while you hold the toolbar button down.
    - A weird bug has been fixed which caused elvis to continually adjust the size of the window.

  ## 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:

    - If the toolbar has too many buttons to fit on a single row, then the toolbar will wrap onto multiple rows.
    - The gaps between groups of related buttons will now be expanded, so the button groups are spread across the whole width of the toolbar. Also, a tiny dimple is drawn in each gap.
    - The toolbar buttons now perform their assigned action when you release the mouse button. Previously, they acted when you pressed the mouse button, but that caused problems with the [Quit] button.
    - If no toolbar buttons are defined, then the toolbar is always hidden, even if the "toolbar" option is set.
    - Some of the X11 resources have changed names, to avoid clashes.
    - The scrollbar's position is now configurable. A new "scrollbar" option can be set to one of {`left right none`} to control this.
    - Many x11 options which used to be locked after initialization, can now be changed at any time. You can switch fonts, or change the scrollbar's width or position, with a simple ":`set`" command.
  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:

    - If a file name starts with "http:", elvis loads it via network using HTTP. For example...

          :e http://www.cs.vu.nl/~tmgil/vi.html

      ...will load the Vi Lovers' Home Page.
    - Other network protocols are not supported yet. FTP is greatly missed, and is a high priority for me.
    - I tweaked the "html" display mode to work better for other peoples' documents.
    - It will probably never support graphics, forms, or secure connections. Bill and Marc can relax!
  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:
    - Elvis finds all tags with the requested name, and moves the cursor to the most likely match. If you immediately request the same tag name again, then elvis moves the cursor to the next most most likely match, and so on through all possibilities.
    - After a tag search, elvis tries to leave the cursor on the tag name (not simply at the start of the line). This way, if elvis chooses the wrong overloaded tag, you can find the next one just by typing `^]`.
    - The `ctags` program has been extended slightly. If invoked with `-h` it will add some extra hints to the tags file which should help elvis guess which overloaded tag you're probably trying to find. This is not the ultimate ctags program; this is just a quick hack to allow elvis' new tags features to be put to the test.
    - Elvis now requires the `tags` file to be sorted; this helps elvis search faster. The `ctags` program has been modified so that it will now sort the tags on all operating systems. (Previously, the tags weren't sorted under DOS or Win32.)
    - Elvis remembers the hints from recent successful or failed tag searches, and uses them to guess the likelyhood that any later tags are the ones you're looking for.
    - The syntax of the `:tag` command has been extended to allow you to restrict tags which have a specific hint, or to tweak the remembered hints that elvis uses to sort the matching tags.
    - There is a new `:br`[`owse`] command which builds an HTML document listing selected tags from the tags file, with hypertext links which take you to the definition points in your source code.
  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:
    - fileeol(filename) is a new function which tries to guess a file's format by examining its first hundred bytes.
    - readeol is a new option which is used to determine what conversions are used when reading a file.
    - writeeol is a new option which influences the conversions that elvis performs when writing a file.
    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...
    - Clicking the left button cancels any pending visible selection and moves the mouse.
    - Clicking the right button moves the mouse and extends any pending visible selection to the cursor's to new location.
    - Dragging the mouse with the left button pressed selects characters, like the `v` command.
    - Dragging the mouse with the right button pressed selects whole lines, like the `V` command.
    - Dragging the mouse with the middle button pressed selects a rectangular area, like the `^V` command. If you have a two-button mouse, you can achieve the same effect by dragging the mouse with both buttons pressed.
    - Double-clicking the left button on a word performs a tag search on that word, like the `^]` command.
    - Double-clicking the right button anywhere will return from a tag search, like the `^T` command.

  ## Between 2.0 and 2.1a-alpha

  Bugs
    Many small bugs have been fixed. See the "BUGS" file for a detailed list.
  WinTags
    Serge has also provided a "WinTags.exe" version of ctags. The only change is that WinTags shows a feedback window so you can see which file it is currently scanning. Unfortunately, I have an ancient version of Visual C++ and this window isn't updated correctly. I intend to update my Visual C++ as soon as possible, which should solve that problem.
  Default values of options
    The options listed by ":set" (with no arguments) are now chosen in a slightly different way. Immediately after executing the "elvis.ini" script, elvis stores the value of each option. Later, setting that option to a different value will set a flag allowing that option to be output by ":set"; setting it back to its original value will reset that flag. This is closer to the POSIX definition of how ":set" should behave.
  X11 "textcursor" option
    The "x11" user interface has a new option: textcursor. It can be set to one of hollow, opaque, or xor to control how the text cursor is drawn.
  Syntax-coloring strings
    The syntax-coloring display mode, "syntax", has been extended slightly to allow it to handle languages whose string contants don't require a backslash before an embedded newline. This allows elvis to do a better job of coloring Perl source code.
  Graphical Win32 interface
    A graphical interface has been added for Win32. Microsoft doesn't allow a single executable to support both Windows and console I/O, so the graphical version of elvis resides in a separate executable, named "WinElvis.exe". After starting WinElvis, you can give the command ":set guiwin" to see the names and values of the new configuration options.

    The Win32 graphical interface was written by Serge Pirotte. If you wish to report a bug which exists only in the graphical Win32 version of elvis, then write to him. You can also thank him, if you feel so motivated. (Other bugs should still be reported to Steve Kirkendall.)

    # 3. FUTURE

    One of the biggest tasks on my list is to rewrite the ctags program so that it will be able to parse C++ code better. It should read the language descriptions from "elvis.syn", and do at least a half-assed job of generating tags for any language described there. I'm also toying with the idea of a statistical tags generator, but that's still pretty nebulous at this point.

    I intend to add a true extension language to elvis someday, but it won't be in 2.1. The language interface will be general enough to support a variety of languages. The first language supported will probably be PERL, followed rapidly by Python and TCL.

    # 4. LINKS TO RELATED FILES

    If the main site (ftp.cs.pdx.edu) is too slow, try the mirror site at ftp.false.com.

    Most of the following are binary files, not text or HTML files, so you can't view then with your Web browser. But you can use your browser to download the files. For Netscape, use <Shift-Click>; for MSIE, use <LeftClick> and "download".

    untar.c
      This is the complete source code for "untar", a little program which extracts files from a gzipped tar archive. Comments near the top of "untar.c" describe how to compile and use it. If you already have the gzip and tar utilities, then you don't need this.
    untardos.exe
      This is an MS-DOS executable, produced from the above "untar.c" file. It can also be run under Windows 3.1, in a Dos-prompt window. For brief instructions on how to use `untardos,` run it with no arguments.
    untarw32.exe
      This is a Win32 executable, produced from the above "untar.c" file. It runs under WindowsNT and Windows95. It runs somewhat faster than the MS-DOS version. It also supports long file names. For brief instructions on how to use `untarw32,` run it with no arguments, in a text-mode window.

      NOTE: MS-Windows95 and MS-DOS use incompatible methods for mapping long file names to short ones. So if you extract the files under Windows95, DOS programs won't be able to find them with their expected names, and vice versa. Consequently, you must use `untardos.exe` to unpack `elvis-2.1i-msdos.tar.gz`, and `untarw32.exe` to unpack `elvis-2.1i-win32.tar.gz`.

    untaros2.exe
      This is an OS/2 executable, produced from the above "untar.c" file. For brief instructions on how to use `untaros2,` run it with no arguments.
    elvis-2.1i.tar.gz
      This is a gzipped tar archive of the source code and documentation for Elvis 2.1i-beta and its related programs.
    elvis-2.1i-msdos.tar.gz
      This archive contains the documentation and MS-DOS executables for Elvis 2.1i-beta.
    elvis-2.1i-win32.tar.gz
      This archive contains the documentation and Win32 executables for Elvis 2.1i-beta. These were compiled and tested under Windows95, but should work under WindowsNT 3.51 (or later) as well.
    elvis-2.1i-os2.tar.gz
      This archive contains the documentation and OS/2 executables for Elvis 2.1i-beta.
    ftp://ftp.fh-wedel.de/pub/fh-wedel/staff/herbert/elvis/00-index.html
      This is where the OS/2 maintainer stores his most up-to-date versions. It may be better than the `elvis-2.1i-os2.tar.gz` file, above.