mh-e: Composing
8.1 Composing
=============
Outside of an MH-Folder buffer, you must call either ‘M-x mh-smail’ or
‘M-x mh-smail-other-window’ to compose a new message. The former
command always creates a two-window layout with the current buffer on
top and the draft on the bottom. Use the latter command if you would
rather preserve the window layout. You may find adding the following
key bindings to ‘~/.emacs’ useful:
(global-set-key "\C-xm" 'mh-smail)
(global-set-key "\C-x4m" 'mh-smail-other-window)
From within a MH-Folder buffer, you can simply use the command ‘m’
(‘mh-send’). However you invoke ‘mh-send’, your letter appears in an
Emacs buffer whose mode is MH-Letter (to see what the buffer looks like,
Sending Mail Tour). MH-Letter mode allows you to edit your
message, to check the validity of the recipients, to insert attachments
and other messages into your message, and to send the message. We’ll go
more into depth about editing a “draft”(1) (a message you’re composing)
in just a moment (Editing Drafts).
If you prefer to be prompted for the recipient and subject fields
before the MH-Letter buffer appears, turn on the option
‘mh-compose-prompt-flag’.
MH-E adds an ‘X-Mailer:’ header field to the header that includes the
version of MH-E and Emacs that you are using. If you don’t want to
participate in our marketing, you can turn off the option
‘mh-insert-x-mailer-flag’.
Two hooks are provided to run commands on your freshly created draft.
The first hook, ‘mh-letter-mode-hook’, allows you to do some processing
before editing a letter(2). For example, you may wish to modify the
header after ‘repl’ has done its work, or you may have a complicated
‘components’ file and need to tell MH-E where the cursor should go.
Here’s an example of how you would use this hook.
(defvar letter-mode-init-done-flag nil
"Non-nil means one-time MH-E settings have been made.")
(defun my-mh-letter-mode-hook ()
"Prepare letter for editing."
(when (not letter-mode-init-done) ; only need to bind the keys once
(local-set-key "\C-ctb" 'add-enriched-text)
(local-set-key "\C-cti" 'add-enriched-text)
(local-set-key "\C-ctf" 'add-enriched-text)
(local-set-key "\C-cts" 'add-enriched-text)
(local-set-key "\C-ctB" 'add-enriched-text)
(local-set-key "\C-ctu" 'add-enriched-text)
(local-set-key "\C-ctc" 'add-enriched-text)
(setq letter-mode-init-done t))
(save-excursion
(goto-char (point-max)) ; go to end of message to
(mh-insert-signature))) ; insert signature
Prepare draft for editing via mh-letter-mode-hook
The function, ‘add-enriched-text’ is defined in the example in
Adding Attachments.
The second hook, a function really, is ‘mh-compose-letter-function’.
Like ‘mh-letter-mode-hook’, it is called just before editing a new
message; however, it is the last function called before you edit your
message. The consequence of this is that you can write a function to
write and send the message for you. This function is passed three
arguments: the contents of the ‘To:’, ‘Subject:’, and ‘Cc:’ header
fields.
---------- Footnotes ----------
(1) I highly recommend that you use a “draft folder” so that you can
edit several drafts in parallel. To do so, create a folder named
‘+drafts’ for example, and add the profile component ‘Draft-Folder:
drafts’ (see ‘mh-profile’(5)).
(2) Actually, because MH-Letter mode inherits from Mail mode, the
hooks ‘text-mode-hook’ and ‘mail-mode-hook’ are run (in that order)
before ‘mh-letter-mode-hook’.