exmh-ref - A detailed reference to exmh functions.


This man page gives complete, but terse, information about Exmh.


There are just a handful of command line options for exmh. Note that Xt-like command line options are not supported because exmh is based on Tk, not Xt.

-bgAction action
Override background processing setting. Valid actions are: off, count, msgchk, flist, and inc.
-bgPeriod minutes
Override background period setting.
-geometry geometry
Initial geometry to use for the window. Exmh remembers the geometry when you change it interactively, so you do not really need to specify it each time on the command line.
-iconposition geometry
Initial position to use for the icon in the form +xoff+yoff. You can use minus signs instead of + to position relative to the right and bottom of the screen.
Begin execution iconic.
Do not use faces database during this run.
Override the editor command defined in Preferences and use the built-in editor (sedit) instead.
It the argument is not one of the flags given above, it is assumed to be the name of a folder. In this case exmh begins in that folder.


There are three sets of buttons in exmh, the main, or top row, folder operations, and message operations. The main set has global commands: Log, Help..., Bindings..., Address..., Preferences, and Quit.

Help is a menu with several choices:
This provides a useful sub-set of this man page.
This provides a highlighting key for color or monochrome screens.
This provides access to all the exmh documentation.
This displays a Frequently-Asked-Questions file. It has the same info as the help.FAQ file.
Exmh Mailing Lists...
This is a sub-menu that lets you administer your membership in the exmh-related mailing lists. See the menu entry for an explanation of the various mailing lists. The add/remove operations result in mail messages. You'll need to Send the draft messages.
A mail message is started so you can report a problem with exmh.
A mail message is started to you can register as an exmh user. There is an opportunity to sign up for the mailing lists and provide positive and negative feedback about exmh.
Get started with PGP. There is some help text and an interface to create your public key / private key pair.
Exmh has two sets of key bindings. One for simple editing, and another to invoke commands. The editing bindings are used in the simple editor and in the various text entry widgets. The command bindings are in effect otherwise, and they allow you to invoke various Exmh commands without using buttons or menus. This is a menu with three choices:
This brings up a dialog that lets you edit the keystroke bindings. All of the defined bindings are displayed, and you can edit their associated keystroke in place. Use the entry to the right of each command to alter or add key bindings. There are further directions in the dialog box.
These bindings result in class definitions for the Entry and Text widget classes. The default bindings are Emacs-like. See the Tk man page on the bind command for details about the syntax, if you need to. "Meta" is an OK synonym for "Mod1". To emulate Emacs, any keystroke that is defined to be <Meta-x> will also result in a binding for <Escape>x.
The compose key is used to insert 8-bit characters. This dialog shows you the key sequences used to get special characters. You can define which key maps to Compose in the Simple Edit bindings dialog.
If you have enabled the debug log under the Hacking Support preferences section, then this button appears. It displays the debug log.
This is a menu with the following entries
This displays an interface to the MH alias file. You will be prompted to set up the MH profile entry that names the alias file, if needed. There are a pair of lists in the interface. To the left is a list of your aliases. Selecting one will display the address(s) of the alias in the right-hand list. Under each list are three buttons: Insert, Change, and Delete, that let you operate on the aliases or the addresses associated with an alias. As you view messages, the From address of the current message is displayed in the dialog. There is a Help button in the dialog that gives more tips about using it.
This displays a dialog that lets you customize exmh. There is also a different Help button in the Preference dialog that explains how to make selections and get more info. In particular, you can click on the descriptive label for an item to get a popup with more detailed information on the preference item.
This quits exmh. If there are pending changes to draft messages, they are saved first.


The middle set of buttons has folder commands: , , , , Search... and More...

This pops up a dialog box from which you can create new folders. When entering a folder name, the '@' character is short for the current folder name. Note that the operation is under the More... menu.
The button refreshes the color feedback of folder buttons so you can tell which folders have unseen messages in them. If you use presort inc style, then this is done automatically. However, if you read all the unseen messages in a folder from outside exmh, then it will miss the transition out of the unseen state, so the button will help reset its view of the folder state.
The button will incorporate new mail from your spool file into your mail folders. This command is also bound to the keystroke 'i'.
The button causes pending delete and move operations to occur. This command is also bound to the keystroke <Control-Return>. Know that messages marked for deletion are removed by means of the MH rmm command. In most systems, rmm will rename the message to a name beginning with either a comma (,) or pound sign (#). Unlike xmh, exmh requires that you commit changes before changing folders and doing other operations that modify the scan listing (e.g., , Sort, ). However, you can set Auto Commit under the Scan Listing preferences to have exmh automatically commit changes when needed. See also the description of the operation.
This is a menu of defined sequences that selected messages can be added to or removed from. If all the selected messages are already in the named sequence then clicking on an item in this menu causes the selected messages to be removed from the named sequence. Otherwise the selected messages are added to the named sequence.

By default, the only defined sequences are 'unseen' (for messages which have not yet been seen), and 'urgent'. To add to this menu, see the documentation on the sequences resources.

This is a menu of different search methods. The first two operations use a simple Find dialog. The Pick and Glimpse interfaces have their own dialogs. The menu entries under Search... are:
This help text describes the search methods in more detail.
Enter a string to find in the current message. <Return> causes the search to begin. <Control-s> and <Control-r> cause subsequent forward and reverse searches, respectively.
This search is done by scanning the folder table of contents display, so it only hits on the current folder scan output. Select the All button to select all matching messages. Use Pick for more general searching.
This provides an interface to the MH pick command. Begin by choosing from the "pick attribute" menu in the dialog. These include headers like Subject, From, To, and Cc, as well as date criteria like Before, and After. You can search for a string in the body of messages with the "Search" field. You can enter a pattern for any of these, and pick selects messages that satisfy the logical AND of these pattern specifications. Note that the Before and After patterns are date-specific, and pick understands many forms of date patterns. Read the MH man page on pick for the complete story. You can build up more complex logical search expressions by clicking the Or button.
Pick from Seq/msgs(s)
This entry lets you limit pick to a specific set of messages. In particular, you can specify a sequence name (e.g., "unseen"), and have pick find all messages with that sequence identifier. After the pick completes, a range of messages is selected that satisfies the search, and you can operate on these messages as described below.
Add to Sequence(s)
This entry lets you apply a sequence name to the set of messages that are selected by the search. You can select these later by using the "Pick from Seq" field.
Add to Sel
Set this before the pick to add the results of the pick to whatever message range is already selected in the table of contents. Otherwise a new selection is made.
This button causes the table of contents to be replaced with the set of currently selected messages. These can be the result of a pick, or you can just make a selection with the mouse. Warning: after projecting a new table of contents, a subsequent pick will only find things in this limited table of contents.
Mark Seen
Use this to remove the selected messages from the unseen sequence.
This brings up an interface to the Glimpse text index tool. You must first index your mail, so to get started click "index" to build your indexes. This process runs in the background, and the status of the index process is displayed in the Glimpse log. The storage overhead of the indexes is about 10% to 15%, which is quite good for a full text index system. To search, enter a word in the search area and press "Search". The button changes to a "Stop" button, although the stop may take a moment to take effect. The search results are displayed in the log. Click on the message in the log and exmh will visit that message. For more details, see the exmh-use man page.
This is a menu with more folder operations in it:
Rescan forces a rescan of the folder contents. Exmh maintains a cache of the scan output that could get confused. The Rescan button forces a full scan. If you just want to scan the new messages that have arrived in the folder you are currently reading, it is more efficient to click on the folder's label in the top pane. This will invoke a scan merging procedure that attempts to preserve the cached results of previous scans. You should only need Rescan when you have reason to believe that exmh is out of sync.
This changes the table of contents to list only the selected messages. This is useful after a pick or table of contents search that has highlighted several messages throughout the folder. You must use to get the full listing back.
This will renumber messages in the current folder to eliminate any gaps in the number sequence.
Sort folder...
This is a cascade menu that provides different ways to sort your folder: , , and by the . The subject and sender sorts also do some grouping by date so that messages from one person or about one subject may be grouped into several subgroups based on their age. See the MH sortf command manual page for details.
This refreshes the display of folder buttons, and it will pick up any new folders you have created. Under MH, the command "folders -fast -recurse" can be slow. The results are saved, so you should not need to wait for this scanning unless you change your folder structure. (You can also edit the .folders file in your MH mail directory.) In nmh, this command has been patched to speed it up considerably.
This lets you delete a folder. The folder must be empty, except for .xmhcache, .mh_sequences, and any .nfs junk files.
This clears the unseen sequence from the current folder.
This runs another process in the background to update any scan caches that are out of date.
This runs another process in the background to update all the scan caches.
When MH deletes a message it really only renames it to have a name like #N or ,N if it was message N. The Purge operation will clean up these junk files that are older than 7 days. (This age parameter can be adjusted by a Preference item under the MH Tweaks section.)
This runs through all your folders deleting old junk files. This is done in the background so you can continue to use the user interface during the process.
If you use a program like Elm or Sun's Mailtool, you can import their message folder contents into the format used by MH. This menu entry brings up a dialog that lets you do this. After you specify the directory that contains the mail folders, a display with a checkbutton for each folder is created. You can select which folders to import. The originals are left alone, so you'll have to delete them yourself after you import them into MH.
This is a cascade menu entry that lets you either view the audit summary statistics or the current audit log. Note that the audit log is appended into ~/Mail/.exmhaudit when you quit exmh.
If you change something important in your MH profile, you can get exmh to reprocess it with this operation.


The last set of commands are message operations. Several of these work in a batch fashion on all the messages in a selected set. These include Delete, Move, Link, Forward, Unmark, and Print. Some of these buttons and menu entries are disabled if there is no current message. Disabled actions have their text grayed out.

Forward the current message(s). Also keystroke 'f'.
Compose a mail message. Chose the editor to use via the dialog. Also keystroke 'c' (for "compose").
Move to the previous message. Also keystroke 'p'. Keystroke 'P' changes the current message without displaying it. Use 's' to display such a message.
Move to the next message. This will chain to the next folder with unread messages if you are at the end of the current folder. The "Next" folder is defined by the Folder-Order .mh_profile entry, and it is always the first folder in the order that has unseen messages. (This keeps you in the interesting folders and away from the dregs if you organize your Folder-Order properly.) Also keystroke 'n'. Keystroke 'N' changes the current message without displaying it. Keystroke 'F' changes to the next folder with unseen messages.
Mark the current message(s) for deletion and go to the next message. Also keystroke 'd'. If you change your mind, select the message again and it via the entry under the message More... menu.
Mark the selected message(s) to be moved to the target folder and go to the next message. Also keystroke 'm'. Note that selecting a target folder also moves the current message(s). So, you use the button if the correct target folder is already selected. If you make a mistake and want to move the message to a different folder, just select it again and right click on the proper destination folder. If you don't want to move it at all, then " the message.
Similar to move, except that the message is linked into the other folder so that it appears in both places. While this appears like a copy, the same message is shared between the folders to save disk space.
This is a menu of reply options. By default there are two choices, but you can easily define more variations on reply. The default choices are:
Reply to the current message, only to the person that send the original. Also keystroke 'r'.
Reply to the current message, including on the cc line everyone that got the original message. (It invokes MH repl with: -cc cc -cc to). Also keystroke 'R'.
This pops up a display that tells you how to program new reply buttons. You'll need to be familiar with the MH repl command and its filters. Check out the repl and mh-format manual pages.
This is a menu of more message operations.
Print the current message, or the selected set of messages. The print command is defined via the dialog. The whole message is printed, headers and all.
Cancel a move or delete mark on the selected message(s). Also keystroke 'u'.
Display a new toplevel window containing the current message.
Display the first unseen message, if any. Also keystroke 'U'.
Use the MH burst command to split up a digest message into its individual messages. In addition, the new messages are added to the unseen sequence. You can control whether or not the original message is replaced with just the digest header by specifying burst options in your .mh_profile. (E.g., burst: -inplace).
This simply copies the current message(s) to a file selected via the file selector dialog.
This copies the current message into the drafts folder and opens your editor on the message.
This opens your editor on the message so that you can annotate it.
This simple runs uudecode with the current message as input. A file selection dialog lets you choose the name of the resulting file.
This is useful for non-MIME messages that contain a postscript file. The message body (everything from the initial %!PS onwards) is put into a temp file and then the Postscript Print Command is used to print that file.
This runs a UNIX command over the current message (all of it). A dialog lets you set the command, with occurrences of $file replaced with the pathname of the message. The default value of the UNIX command is hiding under the Print entry.
This runs a UNIX command over a temporary file containing the body of the current message.
This puts the current message(s) back into the unseen sequence.
Replace the current message with an encrypted version of it.
old PGP...
This is a menu of operations that apply to PGP messages that are not wrapped up in a MIME format. Those are handled automatically. This menu is used to tell exmh explicitly what to do. You can , , or .
Scan through the message body and look for URL and URN references. If any are found, they are highlighted and made into active text. Click on the text and your web browser will be started on that URI. You can set the command to use via the URI section. Also keystroke 'z'.
If you have manually selected an embedded URL, then use this menu entry to get exmh to ask your web browser to display the selected URL. If the automatic scanning doesn't work perfectly, you can do a manual selection on top of an incorrect active text button. NOTE: This also works if the URL was selected outside of exmh!!
If you get a message in parts, as a MIME type message/partial, then select all the messages that have the parts and invoke this operation.
Choose a folder for the current message based on the from address.
Post a copy of the current message to a newsgroup. You'll be prompted for what group.


The built-in editor, sedit, has a dozen or so commonly used editing operations bound to keystrokes. These are Emacs-like, but you can change them from within the editor through the "Simple Edit" dialog available under the main "Bindings" menu. In addition, the editor has a number of buttons and menu entries used to manipulate your draft messages.
This deletes the draft message and removes the editor window.
This will save the message and quit the editor window. The idea is that you will come back to the draft via the drafts folder later.
This is a menu of options that use the Pretty Good Privacy package to to encryption and authentication. An explanation of pgp is beyond the scope of this manual.

The options in the menu determine how your message will be encrypted or signed when the message is sent.

These values default to the values provided on the PGP page and are reset for every new message.

There are currently three formats supported for signed or encrypted messages:

This uses no encapsulation whatsoever for the signed message. This format is compatible with older non-MIME compliant mail programs.
This uses the now deprecated Application/PGP MIME type. This type was deprecated because it turned out to be insufficiently flexible.
This uses Multipart/signed MIME type with the signature part encoded as an application/pgp-signature. This is compatible with other non-PGP digital signature schemes. Many minimally compliant mail programs see your signature as an attachment.

There are also four signature operations supported via the Sign sub-menu:

No signature is produced.
This causes the message to be digitally signed so that the recipient can determine that you were really the author.
Clear Sign
This causes a signed, but not encrypted message to be passed in clear text so even if a recipient doesn't have PGP available, they can still read the text.
plus Encrypt
This causes the message to be encrypted as well as signed.

Toggling "Encrypt Only" causes the message to be encrypted so that only the intended recipient can read it. If you have enabled caching of passphrases you can use "Clear Passphrases(s)" to clear the cache. Users with multiple private keys may select which key to use for signatures via "Choose Key" (or the SEDIT area described in the next paragraph).

If PGP is enabled, and "sedit PGP password" is selected in the , a field for entering a PGP password appears at the bottom of the SEDIT window. If your password is provided in this field, then the values set in the Crypt... menu are invoked. If no password is provided, then encryption is not used AND the message is not sent. This makes it harder to send un-encrypted messages out by mistake.

If PGP is enabled and "sedit PGP password is not selected in the , a popup window appears after pressing the SEND button.

This button brings up a window with a short explanation of the editor.
This is only active while you are replying to a message. When you are replying to a message, the file named "@" is a symbolic link to the message to which you are replying. When this file is inserted, it is formatted a bit, unlike the Insert File... operation. The mail headers are stripped off, quoted-printable text is decoded so you get 8-bit characters in the edit buffer, and each line is prefixed with a short string to distinguish the inserted lines. You can set this prefix via an Xresource, replPrefix. The default prefix is "> ". If you want to change this and still have trailing blanks, it turns out this works OK. The resource value seems to begin with the first non-blank character, but then extends all the way to the newline character.
This appends your ~/.signature file to the draft. If this file is instead an executable script or program, it is executed in order to generate the signature.
If you have multiple files that match the ~/.signature* pattern, the Sign button is replaced with a menu of possibilities. If you choose the autoSign Simple Editor Preference, then this menu is used to choose which signature file (or program) is used when automatically signing the message as it gets posted.
When you are done with the message, click Send. This is also bound to the keystroke <Control-c><Control-c>.
This menu is used to add bold, italic, underline, etc. to your messages. This results in a MIME message of type text/enriched. The formatting commands are supposed to be palatable to a non-MIME reader, but you may want to take this into consideration. If you disable the "Format mail" setting (described below), the looks are discarded before sending the message.
This menu contains a few entries for less common operations. They are:
Keep on send
This is a checkbox menu item that is off (un-highlighted) by default. If selected it prevents the editor window from disappearing after you send or abort a message. This is useful if you'd like to compose a few similar messages. (I also use it to debug the enriched text formatter.)
Format mail
This is a sub-menu of formatting options. The first three options are mutually exclusive and determine when and how the text in your message is formatted to fit into standard length lines. The choices are:
No Line Breaking
Don't do any formatting at anytime.
Line Break at Send
Post process the message after you hit the send button to break long lines.
Line Break when Typing.
At each keystroke check to see if the current line is too long, wrapping it if necessary. If you use this then you should know about the "format" command that reformats a paragraph. By default, that is bound to <Meta-q>
Attempt mhn
If this is selected, your message is run through mhn in order to expand any # directives that format a MIME message. See also the "Run mhn now" menu entry below, and see the mhn man page for details.
Quote Printable
If this is selected, then any text MIME parts are run through the quoted-printable encoder to wrap up 8-bit characters in a 7-bit safe encoding. The Quoted Printable default preference setting under Simple Editor can be set to automatic, never, or always. In automatic mode, quoting is enabled when you enter a Compose key sequence to generate an 8-bit character.
Run mhn now.
This processes the message assuming you have mhn directives, and then lets you edit the result.
Cite Selection
This formats and inserts the current selection. It is assumed to be in the currently displayed mail message, and the sender of that message is identified before the formatted text. Hint: this is the only useful way to include text from PGP encrypted messages and text/enriched messages. The formatting of text/enriched is lost, however.
This is a menu of attachment options.
Attach File...
This brings up a dialog box that lets you attach a file using MIME. It tries to determine the type of the file based on nametemplate entries in the metamail mailcap description file. It presents a dialog that lets you override the type, add a Content-Description, and choose an encoding for the file. When you attach the first Part of a message you are asked whether or not to save the existing message body. If you save it, it becomes the text/plain first part of the multipart message.
Insert File...
This simply inserts a file at the current insert point.
Attach Reference...
This sets up an Message/External-Body MIME message part. This is useful for sending around pointers to files available via FTP or on your local file system.
Attach PGP Keys...
Insert your PGP keys into the mail message. You can use the key selector to choose any key in your public keyring. Just type in a pattern that matches part of the key ID. Matching keys are displayed in the listbox.
This entry displays a small window with the network addresses of the recipients of the message. Clicking the button a second time makes the window go away.
This runs either the UNIX spell or ispell command. Choose between these two options in the Simple Editor . (Don't confuse that with the setting under Editor Support .) If you use ispell then the draft is reloaded after ispell terminates. If you use spell then the output of spell is put into a second pane inside the editor window. That's all - nothing fancy.
Find SEL
This searches the draft for the current X selection. The intent is that you select misspelled words in the output of the spell command and use this menu entry to locate them in the draft. (The find and keybinding mechanisms were stressed by this addition - expect a cleanup someday. There is no reasonable way to define keystroke accelerators for the find and still be able to change them in the Bind dialog. -don't ask...).
Save Buffer
This saves the editor buffer into a file in your drafts folder. Most likely you really want the "Keep on Send" function instead of Save, because that function preserves the draft after you send it, while ordinarily (in spite of "Save") MH will rename the draft after you send it.
Mime Preview
This displays the message as it will appear when an exmh user receives it. A detached top-level window is used, as with message Clip.
Alternate Editor
Save the draft and invoke your alternate editor on the message. Define the alternate under the Editor Support .


welch@acm.org "Brent Welch"


To Xerox PARC/CSL, for supporting this work initially, to Sun Microsystems Laboratories for continuing the support, and to all the exmh users that contributed ideas and code.
[ exmh | software | intro | faq | tutorial | guide ]