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
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
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
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
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
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
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.
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'.
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.,
). 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
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
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
This help text describes the search methods in more
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
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
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.
Use this to remove the selected messages from the
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.
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
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
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
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
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
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
Display the first unseen message, if any. Also keystroke
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).
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
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
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
No signature is produced.
This causes the message to be digitally signed so
that the recipient can determine that you were
really the author.
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.
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
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
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
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
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
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>
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
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.
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.
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.
This simply inserts a file at the current insert
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
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.
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...).
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.
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.
Save the draft and invoke your alternate editor on the
message. Define the alternate under the Editor Support
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 |