MH & nmh: Email for Users & Programmers

May, 2006

The History of exmh

In November, 1992 I picked up a prototype of exmh from Ed Oskiewicz. It was his first Tcl/Tk program, and he had done it as a learning exercise. I had been programming in Tcl for some time at that point, and I had long been interested in MH mail, but I had never used it. I figured it was a good opportunity to learn about MH and get my hands on a mail user interface that I had some control over. This initial version was just under 700 lines of Tcl, and in about a week I had it working to my satisfaction.

I was just about the only exmh user until August, 1993. I used the slocal mail filtering hook to sort arriving mail into folders, and Dave Nichols had a program that reported which folders had new mail. It was easy to display the flist results in a window. In April I added the facesaver display. By August the original script was mostly rewritten and totaled about 1250 lines.

I wanted to release exmh for more widespread use, but first I figured I needed to clean up a bit. I chopped it up into a number of files and changed procedure names to reflect which module (i.e., file) they belonged to. I set things up so users could supply their own versions of the files in order to override parts of the implementation. I wrote a simple preferences package so a number of knobs and dials could be exposed to the user. Finally, I wrote a little installer script that exposed all the file system pathnames that exmh depended on. This was a Tcl/Tk script too, so it could provide a graphical interface for the install process. I made the first release on August 30, 1993, to about a dozen pioneers.

I made 15 "beta" releases during September and October, 1993, as I fielded requests from real users. Each time the bug reports trailed off, I invited several more users to try it. Among other features, I added a simple built-in editor, which was about 300 lines of Tcl, including a user interface to change key bindings. I changed to a more xmh-like display with a button for each folder, and highlighted the buttons to show which ones had new mail. John LoVerso contributed some code to display nested folders in a neat little popup window. November, 1993 saw release 1.0gamma, 1.0delta, 1.0epsilon, 1.0, and (oops) release 1.1. I think at this point I made a more general announcement on comp.lang.tcl and about exmh.

January, 1994 saw release 1.2, which had rudimentary MIME support, mainly because metamail can handle anything exmh cannot. The simple editor let you compose text/enriched, and text/enriched messages could be displayed without metamail. John LoVerso finally convinced me to define buttons and menus via X resources so users could more easily customize the interface.

Version 1.3 was released in April. This version included lots of little things as I played with MIME and experimented with MIME composition. I had to go to a two-level preferences scheme because there were too many options to control.

Version 1.4 featured a rewrite of the MIME display code by Chris Garrigues, and mailcap parsing thanks to Marc VanHeyningen. More features crept in and I pushed the release out in late June, just before vacation. At the end of June I created the exmh-users mailing list, too. (See the Section Mailing Lists.)

Version 1.5 languished as I worked on other projects. I hadn't much planned for this release. I wanted to wait until I had time for a more major overhaul. New features were added because folks contributed code. Scott Stanton contributed a browser for the MH alias file. The PGP interface was due to a combination of Allan Downey, Stefan Monnier, Anders Klemets, and William Sproule. Stefan also contributed code to insert 8-bit characters using a Compose key sequence, and I added support to automatically encode messages as quoted-printable text. After Jerry Peek asked me to write a chapter or two about exmh for his book, I couldn't bear to document some of the weaker aspects of the program, so I fixed them instead. By early November, 1994 the program was nearly 19,000 lines of Tcl code.

I still have plans for exmh. At this point the implementation is showing signs of stress from the addition of so many features. With some cleanup the size of the program should actually decrease. For example, there is essentially no sharing among the code that displays MIME messages and the MIME composition code, except for a little bit related to text/enriched. I'd like to make exmh faster, too. I expect to actually write some C code to provide new Tcl commands that support the mail reader more efficiently. The time to change folders is too long, and it should be possible to display the table of contents of more than one folder at a time.

Brent Welch, November 1994