exmh README

# exmh.README.html

### Contents

- Version
- New EXMH Installers
- Required and Optional Packages
- Known Bugs
- Getting Help
- Flashes
- Performance Hints
- Reverse Video
- Colorized Headers
- Mailing Lists
- Acknowledgments
- Features
- Installation
- Tk Send Problem
- Concluding Remarks
- Author

### Version

Last modified: Sun Jan 2 20:59:43 PST 2005
exmh version: 2.7.2
"Brent Welch" <welch@acm.org>

exmh is a TCL/TK based interface to the MH mail system.

Version 2.7 requires Tcl/Tk 8.3 or higher. exmh is known to work with MH versions 6.7 and 6.8.*. There is a clean replacement for MH called nmh available at http://www.nongnu.org/nmh

Experienced EXMH installers should check FLASHES below and the exmh.CHANGES file.

### New EXMH installers

Please read through all of this, thanks, especially the part at the end about the TK send command. See also the on-line FAQ file under the Help... menu.

The exmh documentation is now all in HTML and viewable from within exmh.

Please encourage your exmh users to REGISTER via the Register menu entry under the Help... menu. This lets me track exmh usage and get user feedback. I won't abuse this registration - there is no obligation associated with registration, but I would like all exmh users to do it.

All registration does is send me a mail message. You get to add your comments, pro and con, about exmh. I've learned a lot from the 2000+ registrations I have received so far. Thanks!

### Other software you'll need

EXMH lives "high in the food chain". You'll need some additional software. Please review the necessary and optional packages for exmh.

#### Known Bugs

See the `exmh.BUGS` and `exmh.TODO` files in the distribution, or the Exmh SourceForge site.

#### Exmh Wiki

See the exmh wiki for a web site you can use to share tips and tricks with other users.

#### Frequently Asked Questions

See the exmh-faq.html for answers to some frequently asked questions. This information is now available via the FAQ button in exmh.

#### Flashes

- 2.7.2 More bug fixes, plus some performance improvements for the new sequences code added in 2.6. The exmh-strip utility is integrated as "Save/Extract Attachments".
- 2.7.1 (Wasn't officially released in tarball form.)
- 2.7.0 Accumulates over a year of minor fixes in the CVS tree.
- 2.6.3 Fixed awful pauses caused by sequence searching in the front end. Fixed inc-on-startup.
- 2.6.2 Fixed Flist button, some optimizations to sequence handling.
- 2.6.1 Various fixes, but the Flist button is broken.
- 2.6 adds generalized sequence handling and fixes various bugs.
- 2.5 adds color highlighting for in-lined replies. Fixes a bug with "Keep on Send" in 2.4.
- 2.4 accumulates bug fixes and some code cleanup.
- 2.3.1 fixed an installation bug in 2.3 that showed up when you installed without the .exmhinstall cache file.
- 2.3 captures 6 months of feature tweaks and bug fixes by the hard working exmh-workers crew. The CVS sources are now at SourceForge.
- 2.1 and 2.2 were made while Brent was at Scriptics/Ajuba.
- 2.0.3 is done as Brent finally moves the sources into net CVS and asks for help maintaining the code. For more info on CVS, see http://www.scriptics.com/software/netcvs.html
- 2.0.2 is done as Brent leaves Sun for Scriptics Corp, http://www.scriptics.com/. I've tried to shift all email contact to <welch@acm.org>, and am housing exmh at http://www.beedub.com/exmh/.
- 2.0.1 fixes a bug in mime.tcl that prevents temp files from being deleted.
- 2.0 is finally released. This collects a host of minor bug fixes, most notably to ispell and the address book.
- 2.0zeta fixes the exmh-netscape interaction that was added in 2.0epsilon.
- 2.0epsilon features cleanup of the address book, the ispell interface, and the intelligent signature features.
- 2.0delta is a collection of fixes and features.
- 2.0gamma is more bug fixes, especially in the new HTML code. There is also a new Quote package that computes a cleaned up version of the message to which you are replying.
- 2.0beta has many bug fixes for the alpha release. The new line-breaking behavior of the built-in editor has been made optional, with the old line-breaking behavior as the default.
- 2.3.1 fixed an installation bug in 2.3 that showed up when you installed without the .exmhinstall cache file.
- 2.3 captures 6 months of feature tweaks and bug fixes by the hard working exmh-workers crew. The CVS sources are now at SourceForge.
- 2.1 and 2.2 were made while Brent was at Scriptics/Ajuba.
- 2.0.3 is done as Brent finally moves the sources into net CVS and asks for help maintaining the code. For more info on CVS, see http://www.scriptics.com/software/netcvs.html
- 2.0.2 is done as Brent leaves Sun for Scriptics Corp, http://www.scriptics.com/. I've tried to shift all email contact to <welch@acm.org>, and am housing exmh at http://www.beedub.com/exmh/.
- 2.0.1 fixes a bug in mime.tcl that prevents temp files from being deleted.
- 2.0 is finally released. This collects a host of minor bug fixes, most notably to ispell and the address book.
- 2.0zeta fixes the exmh-netscape interaction that was added in 2.0epsilon.
- 2.0epsilon features cleanup of the address book, the ispell interface, and the intelligent signature features.
- 2.0delta is a collection of fixes and features.
- 2.0gamma is more bug fixes, especially in the new HTML code. There is also a new Quote package that computes a cleaned up version of the message to which you are replying.
- 2.0beta has many bug fixes for the alpha release. The new line-breaking behavior of the built-in editor has been made optional, with the old line-breaking behavior as the default.
- 2.0alpha folds in many user contributed features and an HTML viewer for documentation. This version requires Tk 4.1 for socket support and some other features. There is a new Top Ten List in preferences that consolidates the most important preference settings into one place.
- 1.6.9 fixes to font selector and sedit formatting.
- 1.6.8 is more bug fixes. Cut and paste finally fixed? Font selector added.
- 1.6.7 is more bug fixes. Most notable is fixing up of the Paste operation in the editor.
- 1.6.6 is a collection of bug fixes and minor improvements. The next big release will be a 1.7/or/2.0alpha that rips out support for Tk 3.6 and folds in various contributions. There may still also be a 1.6.7 to fix bugs in 1.6.6
- 1.6.5 includes an overhaul of the Flist module that highlights folders with unseen messages, and counts unseen messages in total. This also detects 8-bit characters in all cases within Sedit. CLIPBOARD support for OpenWindows users (Tk 4.* only) TMPDIR and EXMHTMPDIR environment variables honored to map /tmp
- 1.6.4 has fixes for the bugs in 1.6.3
- 1.6.3 collects many minor enhancements, plus integrated ispell support for Sedit, and new faces code from John LoVerso. Check out the new "Faces Row" option to display all matching faces.
- 1.6.2 collects several minor enhancements
- 1.6.1 fixes two minor bugs and adds support for Sun Attachments.
- 1.6 released as Brent moves from PARC to Sun Labs. Exmh lives. This release is stable with Tk 3.6 and Tk 4.0b3. The FTP site and WWW Page will migrate to Sun shortly, although parcftp will continue to host exmh for a while. Update your bug mail address ("maintainer") to Brent.Welch@acm.org

Multidrop+Inc style inc has been added. Set up your `.xmhcheck` file to use the MyIncTmp folder. Any messages in that folder get sorted by slocal.

The man page has been chopped into 4 documents:
exmh.l - a tutorial
exmh-use.l - a more comprehensive user guide
exmh-custom.l - a guide to exmh customization
exmh-ref.l - a terse description of all buttons and menu entries.

#### Performance Hints

Grab the Tcl/Tk 8.0 releases for a nice performance boost!

Squeeze the last drop out of message display by disabling the separator bars in message display. (Show Graphic Part Separator under MIME)

Really large folders make exmh run slowly. Take this as a hint to reorganize things into sub-folders if you have more than 500 or so messages in a folder.

Bound the unseen folder search by defining the `.mh_profile`

    	Folder-Unseen: pattern pattern pattern

entry to name the folders to search under. The default is *, so all folders are searched.

#### Reverse Video

It takes just a few resource settings in your `~/.exmh/exmh-defaults-mono` file to get reverse video on a black and white display:

    ! For widgets
    *Background: black
    *Foreground: white
    ! For highlights
    *c_background: black
    *c_foreground: white

#### Colorized Headers

Did you know you can colorize rfc822 headers in the message display by setting *m_tagnames and related X resources? This feature has been around for some time, but seems to be little-known. Here's what I have in my `~/.exmh/exmh-defaults-color` file.

    *m_tagnames:    hidden subject from x-filters-matched content-type x-mailer repl
    ied replied-to
    *m_hidden:      -font 6x10
    *m_subject:     -foreground blue
    *m_x-filters-matched:   -foreground "medium sea green"
    *m_content-type:        -foreground "medium sea green"
    *m_x-mailer:    -foreground "medium sea green"
    *m_from:        -foreground blue
    *m_replied:     -foreground "violet red"

The *c_ family of resources has expanded a bit to allow control of both foreground and background colors for current, unseen, moved, and delete messages.

#### Mailing Lists

There are now three exmh-related mailing lists. YOU ONLY NEED TO PICK ONE LIST. Send your subscription requests to:

    	exmh-announce-request 	- to receive release notices
    	exmh-users-request 	- to get exmh-announce + user discussion
    	exmh-workers-request 	- to just get exmh hacker discussion

The mailing lists have the following addresses, but please send your subscription requests to the -request aliases. If you use the menu entries under Help, they format the message automatically.

    	exmh-users@redhat.com
    	exmh-workers@redhat.com

#### Acknowledgments

Thanks go to Ed Oskiewicz for inspiring me with an initial version, which is much modified by now. Thanks also go to many beta testers that put up with buggy versions and suggested many features that are now part of exmh. Feature requests that come with code diffs to implement them are especially nice.

The following employers of mine deserve credit for letting me indulge in exmh hacking: Xerox/PARC, Mark Weiser and Doug Terry. Sun Microsystems Laboratories, John Ousterhout. Scriptics, The Tcl/Tk Platform Company, John Ousterhout.

Honorable mentions:

- John LoVerso (loverso@osf.org), who contributed the popup nested folder display.
- Chris Garrigues (cwg@deepeddy.com), who rewrote the mime display code, and recently generalized sequence handling.
- Marc VanHeyningen (mvanheyn@cs.indiana.edu), who wrote the mailcap parsing code.
- Allen Downey (downey@cs.berkeley.edu), who provided PGP support.
- Scott Stanton (sstanton@eng.sun.com), who contributed the alias browser.
- Anders Klements (klements@it.kth.se), also updated the PGP code, and more
- Stefan Monnier (monnier@di.epfl.ch), updated and maintains the PGP code
- Martin Hamilton (martin@mrrl.lut.ac.uk), who provided the URL highlighting
- Achim Bohnet (ach@rosat.mpe-garching.mpg.de), for cleanup and generalization.
- Berry Kerchival (kerch@parc.xerox.com), for the address memorization package.
- Olly Stephens, who contributed the unseen window display which has now been merged into the seqwin display.
- Ben Escoto (bescoto@stanford.edu), who contributed the multipart/security code for PGP.
- Hal DeVore (haldevore@geocities.com), who overhauled the address book.
- J C Lawrence (claw@kanga.nu), who worked on the message colorization code.

There are a lot of other folks that contributed code and patches. Without them, exmh wouldn't be what it is today.

#### Features

As well as providing the usual layer on top of MH commands, exmh has a number of other features:

MIME support! Displays richtext and enriched directly. Parses multipart messages. A popup menu under the right button can invoke external viewers (metamail) for things not directly supported. Built-in editor allows simple composition of text/enriched format and multipart messages (via Insert Part).

Color feedback in the scan listing so you can easily identify unseen messages (white background), the current message (raised display), deleted messages (strikeout), and moved messages (yellow background). Xresources control these color choices.

Monochrome displays highlight unseen messages with underline, current message in reverse video, deleted messages with strikeout, and moved messages with stippled background.

A folder display with one label per folder. Color highlights indicate the current folder (red), folders with unseen messages in them (blue), and the target folder for moves (yellow background). Nested folders are highlighted by a shadow box. A cache of recently visited folder buttons is also maintained. Monochrome highlights are reverse video for the current folder, bold box for folders with unseen messages, and stippled box for the target of move operations.

Clever scan caching. MH users know that scan is slow, so exmh tries hard to cache the current state of the folder to avoid scanning. Moves and deletes within exmh do not invalidate the cache, and background incs that add new messages are handled by merging them into the scan listing. The scan cache is compatible with xmh.

Facesaver bitmap display. If you have a facesaver database on your system, exmh displays the bitmap face of the person that sent the current message (or their organization). Otherwise, it just displays a boring EXMH logo.

Background inc. You can set exmh to run inc periodically, or just to periodically count up the messages in your mail spool file. (Depends on proper TK send functioning. See notes below.)

Various inc styles. Exmh knows about three styles of inc usage: Inc from your spool file to your inbox folder. Inc from your spool file or POP host to a set of dropboxes as specified by your `~/.xmhcheck` file. Inc from your spool file directly into folders. exmh can run the MH filtering program (slocal) for you, or you can let an external agent presort mail into folders for you.

Searching over folder listing and message body.

A dialog-box interface to MH pick.

A simple editor with emacs-like bindings is provided by default. It has an interface that lets you tweak key bindings.

Editor interface. You can hook up exmh to TCL based-editors like mxedit quite easily. A script is also provided, exmh-async, for using terminal based editors like vi. The emacsclient.README file has hand-wavy instructions for using emacsclient to talk to an emacs server.

Glimpse interface. You can index all your mail with glimpse and search for messages by content. The search works across all folders and runs quite fast. The indexes are only about 10% of the space of your mail database.

User preferences. You can tune exmh through a dialog box. The settings are saved in an Xresource-style file named `.exmh/exmh-defaults`. You can also put font and color resource specifications in this file, plus there are a few random parameters not exposed via preferences.

User hacking support. A user library of TCL routines is supported. The main implementation is chopped up into many smallish modules. So, you can modify a copy of some module to put your favorite mail reader hack in without affecting others (or convincing me to put it into the main line). There are also a number of places where hook procedures are used so you can refine the behavior of things like composing a reply message. Details in the man page.

## Installation

Installation is done via the exmh.install script. Invoke it as:

    	wish -f exmh.install

This puts up a dialog box that lets you patch various file system specific pathnames and enable or disable features that your system cannot support (e.g., facesaver, sound). You can test out exmh via this dialog before installing it.

Upon startup, exmh.install looks around for `.exmhinstall` files from previous installations. It will ask you which one you want to use, unless there is already one in the current directory. You can also use the Conf button to look for config files. This lets you maintain a set of config files, `.exmhinstall.*` if you need this for multiple architectures, for example.

In the install dialog, the "Script Library" and the "Install lib directory" are usually the same place. The script library is the run-time value of the library directory, while the install lib directory is the install-time value. The Test button now automatically changes the run-time value to "./lib" in order to test before installing. So, the only reason for the distinction between install-time and run-time is for AFS environments where writable and read-only volumes might have different names.

Remember to choose a script library directory that exmh can take up all for itself. The install is *not* smart enough to make an exmh subdirectory in a common lib dir (e.g., /usr/local/lib).

WARNING: you need to specify an alternate location - the install is *not yet* smart enough to handle leaving the script library where you unpacked the tar file.

After you set things up in the dialog box, then hit some buttons:

- Patch - to apply site-dependent patches to exmh. The configuration is saved into a `.exmhinstall` file.
- TclIndex - to compute the auto-load library index.
- Test - to run the patched script.
- Verify - to see what the Install will do.
- Install - to install exmh.

If the install fails to work gracefully on your system, let me know! One common error is to get a complaint about the procedure "Exmh" not being defined. This happens when the value of the script library is not correct.

### Tk Send Problems

VERY IMPORTANT. PLEASE READ. SOURCE OF MANY PROBLEMS. READ THIS HERE :-)

exmh depends on the TK send facility for its background processing. With TK 3.3, send now uses Xauthority mechanisms by default, unless you compile TK with -DTK_NO_SECURITY. A manifestation of problems are that background processing doesn't work: new messages are not scanned into the current folder, the flag icon doesn't behave, and so on. Similarly, use of the exmh-async wrapper script also fails. If you cannot recompile wish, then the trick is to get your X server process started with the right incantation.

You can easily test send (and my installation process should have...) Just run wish, and type in the following command to it:

    	send exmh {Exmh_Status "Hello world"}

Obviously, make sure exmh is running first.

If you get an error, you need to recompile the TK library, or learn how to start up the X server so it does the right Xauthentication stuff.

Here is one example, for SunOS openwindows. This is an excerpt from an `.xserverrc` file:

        if [ ! \( -d $HOME -a -w $HOME \) ]; then
          echo "Warning: Can't write X authority file" 1>&2 ;
          auth_args=""
        else
          authfname=$HOME/.xnews.`uname -n`$DISPLAY
          ${OPENWINHOME}/lib/mkcookie $authfname -auth magic-cookie
          auth_args="-auth $authfname"
        fi ;
        ${OPENWINHOME}/bin/xnews $auth_args $server_args $xnews_config_args ;;

The general picture of what's going on is this:

- some program generates a magic cookie (arbitrary string) and writes this to a file.
- The name of this file is passed to the X server
- The X server writes an entry for the DISPLAY into your `~/.Xauthority` file.
- Xlib reads `~/.Xauthority` when you create a window, and passes the cookie value back to the X server.

If you have the xauth program and your server doesn't like to be told about the intermediate file, then you can use xauth to write into the `~/.Xauthority` file for you, and apparently the right thing will happen. If this sounds vague, it is. For precise details, do some experimentation or ask your local X guru. If you come up with particular solutions, feel free to post them to "comp.lang.tcl" so other folks with similar configurations can learn how to do the right thing as well.

See also "misc/Xauthority" for similar info.

#### Concluding Remarks

If you end up using exmh on a regular basis, also let me know! If I can tell my managers that there are N users of my mail reader, there is a greater chance I'll have time to hack up more tools in the future (and still get paid). There is a Register User menu entry under the Help... menu that you can use for this purpose. Encourage your users to do this if you are an administrator at a large site.

Finally, please take time to read the man page before asking too many questions. If exmh gets an internal error it will display a dialog box with a TCL trace back and a What Happened: area. You can type short note into that area, and then hit the "mail to" button in order to file a bug report. I'll consider feature requests, but basically I'd appreciate it if you'd code up your feature and send me some diffs or just the whole file that is affected. Many of the neat features in exmh were originally contributed by its users.

#### Author

-- "Brent Welch" <welch@acm.org>

exmh:The Right Tool for the Job