# exmh Reference Guide
by Brent Welch

## Command-line Options

There are just a handful of command-line options for exmh. Note that Xt-like 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 plus signs (`+`) to position relative to the right and bottom of the screen.
`-iconic`
  Begin execution iconic.
`-sedit`
  Override the editor command defined in Preferences and use the built-in editor (sedit) instead.
`folder`
  If 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.

## Main Buttons and Menus

exmh Main Buttons (top row)

Menu/Button | Tcl Command | Explanation
--- | --- | ---
Help | -- | A menu with three choices:
Quick Intro | Help | -- Some get-started information.
Color Legend | Help_KeyDisplay | -- A highlighting key for color or monochrome screens.
Frequently Asked Questions | Help FAQ | -- Displays the exmh.FAQ file.
Bindings | -- | A menu with two choices:
Commands | Bind_Pref | -- Dialog to change command key bindings.
Simple Edit | Sedit_Pref | -- Dialog to change editing key bindings.
Log | ExmhLogShow | Display the debug log, if it is enabled.
Aliases | Aliases_Pref | Display an interface to the MH alias file.
Preferences | Preferences_Dialog | Display the preferences user interface.
Quit | Exmh_Done | Quit exmh.

## Folder Buttons and Menus

Folder Buttons (middle row)

Menu/Button | Tcl Command | Explanation
--- | --- | ---
Pick | Pick | An interface to the MH pick command.
New | Folder_New | Create a new mail folder.
Find | Find_Setup | Display find dialog.
Flist | Fdisp_ClearHighlights ; busy Flist_FindUnseen | Refreshes highlights of labels for folders with unseen messages.
Inc | Inc | Incorporate new mail from your spool file.
Commit | Folder_Commit | Commit pending delete and move operations.
More... | -- | A menu with more folder operations:
Rescan folder | busy Scan_FolderForce ; Msg_ShowSomething | Force a rescan of the folder contents.
Pack folder | busy Folder_Pack ; Msg_ShowSomething | Renumber messages in the current folder to eliminate any gaps in the number sequence.
Sort folder | busy Folder_Sort ; Msg_ShowSomething | This will sort the current folder by date.
Find all folders | Flist_Refresh | Scan the file system for all your folders.
Delete folder | Folder_Delete | Delete a folder.
Catch-up Unseen | Pick_MarkSeen | Clear the unseen sequence from the current folder.
Update scan caches | Scan_AllFolders | Updates any scan caches that are out of date.
Update all scan caches | Scan_AllFolders 1 | Rescans all folders.
Purge folder | Folder_PurgeBg | Delete old messages renamed by rmm.
Purge all folders | Folder_PurgeAllBg | Purge all folders.
Import mailbox folders | Import_Dialog | Copy messages from mailtool folders.

## Message Buttons and Menus

Message Buttons (bottom row)

Menu/Button | Tcl Command | Explanation
--- | --- | ---
Forward | Msg_Forward | Forward the current message(s).
Send | Msg_Compose | Compose a mail message.
Prev | Ftoc_Prev show | Show previous message.
Next | Ftoc_Next show | Show next message.
Delete | Msg_Remove | Mark the current message(s) for deletion and advance.
Move | Msg_Move Ftoc_MoveMark | Mark the selected message(s) to be moved to the target folder and go to the next message.
Link | Msg_Move Ftoc_CopyMark advance? | Link message to target folder.
"Reply..." | -- | This is a menu of reply options.
Reply to sender | Msg_Reply -nocc all | Reply to the current message, only to the person that send the original.
Reply all | Msg_Reply -cc all | Reply to the current message, including on the cc line everyone that got the original message.
Reply help | Msg_ReplyHelp | Explains how to add more Reply... menu entries.
More... | -- | This is a menu of more message operations:
Print | Print | Print the current message(s).
Unmark (Undo) | Ftoc_Unmark | Cancel a move or delete mark on the selected message(s).
Clip | Msg_Clip | Display a new the current message in a new window.
First Unseen | Msg_ShowUnseen | Display the first unseen message, if any.
Burst Digest | Msg_BurstDigest | Use MH burst to split up a digest message into its individual messages.
Redistribute | Msg_Dist Mh_DistSetup | Resend a message to a different recipient.
Save to file | Msg_Save | Copy the current message(s) to a file.
Use message as draft | Msg_CompUse | Copy the current message into the drafts folder and open your editor on the message.
Edit message | Msg_Edit | Open your editor on the current message.
uudecode message | Msg_UUdecode | Run uudecode with the current message as input.
Print as postscript | Print_Postscript | Strip lines before %! and print the rest.
Apply to message | Message_Apply | This runs a UNIX command over the current message, header and body.
Apply to body | Message_Apply body | This runs a UNIX command over a temporary file containing the body of the current message.
Mark Unseen | Msg_MarkSeen | Put the current message(s) back into the unseen sequence.
PGP view | Pgp_view | Temporarily decrypt a message using PGP.
PGP decrypt | Pgp_decrypt | Decrypt and save a message using PGP.

## sedit Buttons and Menus

The following table describes the buttons and menus for the built-in editor sedit. Most of these Tcl commands are parameterized by $draft and $t to allow for multiple drafts in progress.

Simple Editor (sedit) Buttons

Menu/Button | Tcl Command/Variable | Explanation
--- | --- | ---
Abort | SeditAbort $draft $t | This deletes the draft message and removes the editor window.
Save&Quit | SeditSave $draft $t SeditNuke | This will save the message and quit the editor window.
Help | SeditHelp | Display a window with a short explanation of the editor.
Insert @ | SeditInsertFile $draft $t @ | Format and insert the message being replied to. Only enabled during replies.
Sign | SeditSign $draft $t | 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.
Sign... | -- | A menu of signature possibilities, which are all files that match the ~/.signature* pattern
Send | SeditSend $draft $t | Send the message.
Whom | SeditWhom $draft $f $t | Expand aliases to determine who the message is going to.
Text... | -- | This menu is used to add bold, italic, underline, etc. to your messages. This results in a MIME message of type text/enriched.
More... | -- | This menu contains a few entries for less common operations. The first three are checkbox entries that set the named Tcl variable.
Keep on send | sedit($t,keep) | If selected it prevents the editor window from disappearing after you send or abort a message.
Format mail | sedit($t,format) | Enables line breaking and text/enriched encoding.
Attempt mhn | sedit($t,mhn) | Run your message through mhn to create MIME messages.
Insert File... | SeditInsertFileDirect $draft $t | Insert a file into the message without MIME formatting.
Insert Part... | SeditInsertFileDialog $draft $t | Insert a file as part of a MIME message.
Insert External... | SeditInsertExternalDialog $draft $t | Create a Message/External-Body MIME message part.
Save | SeditSave $draft $t | Save the editor buffer to disk. This does not mean the draft is preserved after you send it. Use Save&Quit or Keep on Send instead.
Spell... | SeditSpell $draft $f $t | This runs a spell command over the draft body.
Find SEL | Sedit_Find $draft $t | This searches the draft for the current X selection.
PGP | -- | A menu of Pretty Good Privacy commands. These all work by inserting a pgp-action header into the message, and the action takes effect when the message is sent.
encrypt | Pgp_encrypt encrypt $draft $t | Encrypt a message for the recipients of the message.
sign clear | Pgp_encrypt signclear $draft $t | Digitally sign a plain text message.
sign binary | Pgp_encrypt signbinary $draft $t | Digitally sign and base64-encode the message.
encrypt & sign | Pgp_encrypt encryptsign $draft $t | Encrypt and sign the message.

## What Now Buttons and Menus

The What Now dialog is opened after you edit a draft with an external editor that is run via the exmh-async wrapper script.

What Now Dialog

Menu/Button | Tcl Command | Explanation
--- | --- | ---
Kill | EditDialogDone abort $id | Remove the draft instead of sending it.
Dismiss | EditDialogDone dismiss $id | Leave the draft in the drafts folder - do not send, yet.
Re-edit | EditDialogDone reedit $id nohide | Re-run the editor on the draft.
Send | EditDialogDone send $id | Send the message.
More... | -- | A menu with more operations:
Whom | EditDialogDone whom $id nohide | Expand aliases to determine who the message is going to.
MHN | EditDialogDone mhn $id nohide | Run the draft through mhn.
Spell | EditDialogDone spell $id nohide | Run a spell program on the message.
Sedit | EditDialogDone sedit $id | Run the built-in editor on the message.

## External Editor Interface

The following Tcl commands are designed to be used with an external Tcl-based editor. Use the Tk send command to get exmh to do these operations.

Tcl Interface for External Editors

Tcl Command | Explanation
--- | ---
Edit_Dialog $id | Display the WhatNow dialog for the draft. The $id is the message number of the draft. Alternatively, the following commands can be issued directly from the editor's interface.
Edit_Done send $id | Send the message $id in the drafts folder.
Edit_Done reedit $id | Re-edit the message.
Edit_Done sedit $id | Run the built-in editor on the message.
Edit_Done spell $id | Run a spell program on the message.
Edit_Done mhn $id | Run mhn on the message.
Edit_Done abort $id | Remove the draft message.
Edit_Done dismiss $id | Leave the message in the drafts folder.
Edit_Done whom $id | Run the MH whom program on the message.

## Command Keys

The following table lists command key bindings. The keystroke syntax is given as you would specify it to the Tk bind command. Capitalization is important. Note that punctuation characters are spelled out; these are X keysyms. The special keysyms like Next may vary from keyboard to keyboard. You can change these bindings via the Command Binding menu entry, and the results are saved in your ~/.exmhbindings file.

Command Key Bindings

Keystroke | Tcl Command | Explanation
--- | --- | ---
<Key-c> | Msg_Compose | Open the editor on a new draft message.
<Key-d> | Msg_Remove | Delete the current message(s).
<Key-D> | Msg_RemoveNoshow | Delete the current message(s) and advance without displaying.
<Key-f> | Msg_Forward | Forward the current message(s).
<Key-F> | Folder_Unseen | Change to the next folder with unseen messages.
<Key-i> | Inc | Incorporate Mail
<Key-m> | Msg_Move | Refile the current message(s) to the target folder.
<Key-M> | Msg_MoveNoshow | Refile the current message(s) and advance without displaying.
<Key-n> | Ftoc_Next show | Display the next message.
<Key-N> | Ftoc_Next noshow | Select, but do not display, the next message.
<Key-p> | Ftoc_Prev show | Display the previous message.
<Key-P> | Ftoc_Prev noshow | Select, but do not display, the previous message.
<Key-r> | Msg_Reply -nocc all | Reply to the sender of the current message.
<Key-R> | Msg_Reply -cc all | Reply to the sender and all recipients of the current message.
<Key-s> | Msg_ShowCurrent | Display the currently selected message.
<Control-s> | Find_It forw | Search forward in message or FTOC.
<Key-u> | Ftoc_Unmark | Unmark the current message(s).
<Key-U> | Msg_ShowUnseen | Show the next unread message.
<asciicircum> | Msg_First | Select, but do not display, the first message in the folder. This key prints as `^`.
<dollar> | Msg_Last | Select, but do not display, the last message. This key prints as `$`.
<minus> | Ftoc_PrevMarked | Display the the previous message, whether or not it is marked. This key prints as `-`.
<space> | Msg_PageOrNext | Page down the message or advance to the next one.
<question> | Bind_Pref | Display command binding user interface. This key prints as `?`.
<BackSpace> | Msg_PageUp | Page back through the message.
<Prior> | -- | Same as <BackSpace>
<Up> | -- | Same as <BackSpace>
<Next> | Msg_PageDown | Page down in the message display.
<Down> | -- | Same as <Next>
<Control-p> | Ftoc_PageUp | Page up the folder table of contents.
<Shift-Prev> | -- | Same as <Control-p>
<Control-r> | Find_It prev | Search backwards in message or FTOC.
<Control-Return> | Folder_Commit | Commit pending deletes and refiles.
<Control-n> | Ftoc_PageDown | Page down the folder table-of-contents.
<Shift-Next> | -- | Same as <Control-n>

## Editing Keys

The following table lists editing key bindings. These are used in the built-in editor and, where applicable, in the text entry widgets in dialogs. You can change (but not extend) these bindings via the Simple Edit menu entry, and the results are saved in your ~/.exmhsedit file.

Simple Edit Bindings

Keystroke | Mnemonic | Explanation
--- | --- | ---
<Control-h> | backspace | Destructive backspace.
<BackSpace> | backspace |
<Control-b> | backchar | Move cursor back a character.
<Key-Left> | backchar |
<Meta-less> | bof | Move to beginning of buffer.
<Meta-b> | backword | Move cursor back a word.
<Control-d> | delchar | Delete the character ahead of cursor.
<Control-x><Delete> | delbol | Delete to beginning of line.
<Meta-h> | delwordback | Delete back a word.
<Control-k> | deleol | Delete to end of line.
<Control-n> | down1line | Move cursor down one line.
<Key-Down> | down1line |
<Meta-d> | delwordforw | Delete word ahead of cursor.
<Meta-greater> | eof | Move to end of buffer.
<Control-v> | down1page | Scroll down one page.
<Meta-f> | forwword | Move cursor ahead one word.
<Control-f> | forwchar | Move cursor ahead one characer.
<Key-Right> | forwchar |
<Control-a> | linestart | Move cursor to beginning of line.
<Control-e> | lineend | Move cursor to end of line.
<Control-w> | seldelete | Cut the selection.
<Delete> | seldelete |
<Control-o> | openline | Open a new line after the cursor.
<Control-c><Control-c> | sendMsg | Send the draft.
<Control-y> | selpaste | Paste the selection.
<Meta-t> | transword | Transpose words.
<Control-t> | transpose | Transpose characters.
<Meta-v> | up1page | Scroll up one page.
<Control-p> | up1line | Move cursor up one line.
<Key-Up> | up1line |