Working with Draft Messages
[previous]
[next]
[table of contents] [index]
If you use the quit command at a What now?
prompt, it leaves the draft message for you to work on later.
MH also has a very useful feature called draft folders
that lets you keep many draft messages, work on them, and send them
"in the background" while you do something else.
This section explains how to work with draft messages in MH.
If you started using MH from scratch, your account probably uses just a
single draft message.
(It has to be set up especially to use an MH draft folder instead of the
draft message.)
A "single draft message" means that whenever you start to send a message
with comp, repl, forw, or dist, the draft is
always written to a file named draft in your MH directory.
If you start one of those programs and the draft file already exists,
you'll see this message:
Draft '/yourMHdir/draft' exists; disposition?
Press
RETURN
for a list of what you can do.
Here are the choices:
- list (or l)
-
Shows you the existing draft.
- quit (or q)
-
Exits from MH and leaves the draft alone.
- refile +folder
-
Moves the draft message into the folder you name.
The draft won't be sent.
Instead, the draft is moved and replaced with a new, empty form;
you start over with a new draft.
There's more about folders in Section Folders.
- replace (or rep)
-
Deletes the draft and replaces it with a new, empty form.
You start fresh, as if the old draft were never there.
- use (or u)
-
Starts up your draft editor (by default, prompter)
to keep working on the existing draft.
You only have this choice if you're running comp.
Note that if you start repl, forw, or dist
before you get the disposition?
prompt, they won't let you use an existing draft -- you'll need to
quit and run comp.
You can also get here directly and skip the disposition?
prompt by starting with the command:
% comp -use
That's the normal way to re-edit an existing draft message.
NOTE:
If you're re-editing a draft that you started with
repl, forw, or dist and its -annotate
switch, the original message won't be annotated.
That's because there's no way for MH to find the original message number
just by looking at the leftover draft.
You can annotate the message yourself with
anno.
Instead of using a single draft file, you can set up an MH folder that
holds many drafts.
This has some great advantages:
-
You don't have to finish and send a draft before you start on another.
-
If you use job control, shell layers, or window systems, or if you're just
logging on to your account from more than one place at the same time, you
can work on several draft messages at once.
-
If you use:
What now? push
to send your messages, you don't have to wait to start a new message
until the previous draft has been sent.
This is because push doesn't process the draft right away -- it takes a
few seconds, especially on a busy computer.
Without a draft folder, with only one draft file, the draft exists until it's
been sent.
A draft folder avoids this problem by letting push
take its time sending a draft while you work on a new draft.
-
If several users share the same account, each user can work on a separate
message.
One disadvantage of a draft folder is that it can be easier for you
to forget about an old draft message.
To set up a draft folder, you may want to skip ahead
and read about folders.
Once you've set up a draft folder, though, you don't need to think about
folders much.
Here's how you do it:
-
Pick a name for the draft folder (xmh uses the name drafts;
that might be a good choice even if you don't use xmh).
-
Create the folder from a shell prompt, like this:
% folder -push +drafts
Folder /yourMHdir/drafts doesn't exist; create? y
drafts+ has no messages.
% folder -pop
[previousfolder+ now current.]
-
Add this entry to your MH profile:
Draft-folder: drafts
Try using your draft folder.
Type comp (or repl or...).
When you get to the What now? prompt, type quit.
You'll get a message that tells you where the draft message was left:
What now? q
whatnow: draft left on /yourMHdir/drafts/1
That shows that the draft message is number 1.
Then start another draft (with comp or repl or...).
Instead of the old prompt:
Draft '/yourMHdir/draft' exists; disposition?
MH will give you a fresh draft.
Then, if you type quit again, you'll see that this new draft
has the next higher message number in the draft folder:
What now? q
whatnow: draft left on /yourMHdir/drafts/2
How do you finish a draft that you've left in the draft folder?
An easy way is with the following command:
% comp -use n
where n is the draft message number that you want to resume.
Easier: if you want to re-edit the draft you started most recently,
that draft should still be the current message in the draft folder...
in which case you can omit the message number n.
If you're not sure which message you want, you can scan the draft folder
to get a summary of your draft messages:
% scan +drafts
Or, the recomp shell script
is probably the easiest way of all.
As explained in the Section
Single Draft Messages,
if you're re-editing a draft that
you started with repl, forw, or dist and its
-annotate switch, the original message won't be annotated.
After you send a draft, MH renames it with a leading comma (,)
or hash mark (#).
For instance, without a draft folder, your draft file could be renamed
,draft.
In a draft folder, draft number 3 would be "deleted" by changing its
name to ,3.
If you need to recover a draft message, just rename it without the comma
or hash mark.
The techniques are in the Section
Removing and Recovering Messages.
If you type quit -delete at a What now?
prompt -- or, if your editor program returns a nonzero exit status to
whatnow (see the Section
Aborted Draft Messages) --
whatnow will delete your draft as explained above.
When that happened, versions of MH before 6.7.2 just said that the draft
was "deleted."
MH 6.7.2 changed the message to a user-friendly:
whatnow: problems with edit -- draft left in /yourMHdir/drafts/,2
Here's one editing feature that isn't user-friendly.
Some editors return a nonzero exit status when the file they were
editing is perfectly fine.
(Versions of vi from AT&T and Sun have this "feature.")
whatnow will think that the editor failed -- and delete your draft.
If you use an editor like that, find out
whether your version of MH was
built with the [ATTVIBUG] configuration option.
If you can't use [ATTVIBUG], you can make a shell script like
the one below, myvi,
that edits the draft and always returns a zero exit status.
Example: Workaround for vi editor problem: myvi
#! /bin/sh
# myvi - workaround for "vi" that returns non-zero exit status
# and makes MH "whatnow" delete draft message.
# Usage (in MH profile) Editor: myvi
vi $*
exit 0
To install myvi, see the Section
Writing Shell Scripts for MH
and the Section Changing Default Editors.
The Section Writing Your Own Draft Message Editor(s)
explains more about writing draft editors.
When you type q at a What now? prompt, it
leaves the draft message without sending it.
If you have a draft folder, the command line you'd type to recompose
the draft is long.
Also, it can be hard to remember the draft number -- so you have to
scan the draft folder, then remember to change your folder back.
The recomp script helps with that.
If you give it a message number in the draft folder, it starts
comp -use on that message with your favorite editor program.
Without a message number, recomp scans the draft folder, then lets
you enter the number of the message you want to recompose, and then
starts comp -use. When you exit your editor, you get the usual
What now? prompt.
Another section shows how to
set up recomp.
The scandrafts script is nice when you're wondering what's in
your draft folder or you need to work in it.
-
By default, scandrafts shows a list of the messages you've
already sent (these messages are in files with a comma (,)
or hash mark (#) before their names).
Then, it scans your draft folder for drafts you're working
on and finally pops you back to your current folder.
-
If you use its -stay option,
scandrafts will start a shell with
both the current directory and current folder set to the draft folder.
That way, you can
restore one of the messages already sent
and/or refile the message to another folder (in case you
forgot to give yourself a copy when you sent it).
Or you can do extensive work on the drafts more directly than a
script like recomp will let you.
Here's a demonstration using -stay (without -stay, there
wouldn't be a scandrafts prompt):
$ scandrafts -stay
Draft message(s) you've already sent:
,1:Subject: Re: SC or GA islands
,5:Subject: Re: our previous message about banners dialups
,6:Subject: Re: Can you help?
,7:Subject: Out this morning
To get them back, use 'mv'.
===========================================================
Draft message(s) you haven't sent:
1 03/07*To:alison@mvus.cs Project status<<Alison, the
scan: message 2: empty
3+ 03/07*To:kx9cq@cornell. Scientific Visualization Dem
You'll be in a /bin/ksh shell in the +drafts folder
To quit, type control-d.
scandrafts> rmm 2
scandrafts> mv ,6 6
scandrafts> scan
1 03/07*To:alison@mvus.cs Project status<<Alison, the p
3+ 03/07*To:kx9cq@cornell. Scientific Visualization Demo
6 03/04*To:"Warren Z. Von Re: Can you help?<<Warren, yo
scandrafts> refile 6 +outbox
scandrafts> CTRL-D
[folder +inbox now current]
$
First, you see four messages that have already been sent.
The send program put commas at the beginnings of their names.
Next come the messages that haven't been sent.
One draft is empty (this can happen if you have trouble composing a message).
Then, because the -stay switch was used, scandrafts
starts the default shell (this person uses the Korn shell).
The shell prompt is set to scandrafts>.
The current folder and current directory are the draft folder, so rmm
removes the empty draft and mv takes the comma off message 6.
A scan shows the cleaned-up folder.
CTRL-D
ends the shell and the scandrafts script.
Another section explains how to set up
scandrafts.
mhn edits drafts that contain directives (there are examples in
the Sections
Sending MIME Mail,
mhn Directives, and many others).
It replaces the draft with an encoded MIME message, ready to send.
You can run mhn by hand, before you send the draft:
What now? edit mhn
but that step can be easy to forget.
If you forget, the recipient will get a message full of your
directives -- instead of the encoded
MIME message you meant to send.
If you want all the messages you send to be MIME messages, you can run
mhn automatically.
Add this entry to your MH profile:
automhnproc: mhn
Then, when you type send or push at the What now? prompt,
mhn will run automatically.
The automhnproc isn't right for everyone.
If you send drafts that have lines starting with a hash mark
(#) which aren't directives, mhn will complain about
an "unknown directive."
You'll have to edit the message and change the non-directive lines
starting with # to start with ## instead.
Also, after you have some MIME experience, you may not always agree with
the encoding that mhn chooses.
If you don't use the automhnproc, you can edit the encoded draft
and change the encoding.
In cases like those, you have a few choices.
One is to remember to run mhn by hand when you need it.
Another is to add this header field to your draft:
MIME-Version: 1.0
When send sees that field, it won't invoke the automhnproc.
But if you add that field, be sure that your message really is in
legal MIME format!
(There are too many bogus MIME messages already.)
When mhn reads the directives in your draft message and encodes
it, the original draft message file is also preserved for a while.
Recovering the original draft takes a little work, but it can be easier
than trying to undo what mhn did.
For instance, you might have given the wrong filename at the end of a
directive, and you don't want to re-enter the whole draft just to fix
that one mistake.
This section explains how to recover the draft with the original directives.
The end of this section describes a shell script that makes the job easier.
Let's start this example by sending a message:
What now? edit mhn
What now? list
...message appears; you see mistake...
Use these steps to recover the original directives:
-
Quit and leave the encoded draft there:
What now? quit
whatnow: draft left on /mh/jerry/drafts/3
-
Change your current directory to the directory where your draft message was.
whatnow will print the pathname of the draft (see above).
Here are examples with a
draft folder and without.
Use backquotes (`), not single quotes ('), in the
commands below.
The command ls -lt lists the most recently modified files first.
With a draft folder:
% cd `mhpath +drafts`
% ls -lt
total 357
...
-rw------- 1 jerry 86340 Oct 16 10:46 3
-rw------- 1 jerry 1419 Oct 16 10:43 ,3.orig
...
No draft folder:
% cd `mhpath +`
% ls -lt
total 289
...
-rw------- 1 jerry 86340 Oct 16 10:46 draft
-rw------- 1 jerry 1419 Oct 16 10:43 ,draft.orig
...
-
You should see your original draft in a file named ,n.orig (if
you use a draft folder) or ,draft.orig (if you don't).
The filename without the comma (,) and the .orig
is the encoded draft.
(Note: your MH may have been configured to use a character other than a
comma -- for example, #.)
If you want to read the drafts, you can use a pager like
more(1)
or
less(1).
If you need to save the encoded draft for some reason, do it now.
Otherwise, replace the encoded draft with the original draft:
% mv ,3.orig 3
-
Re-edit the recovered draft with the comp -use command
(if you have a draft folder, see the
Section Draft Folder;
otherwise, see the Section
Single Draft Messages).
You're done.
Now, think about installing the shell script named original from
this book's online archive.
It replaces all those steps with the simple command edit original.
For example, if you run mhn and then see you've made a mistake,
here's how you can replace the encoded draft with the original:
What now? edit mhn
What now? list
...oops...
What now? edit original
What now? edit vi
The original draft, with directives, will open inside your editor.
You can fix the problem, save the file, quit the editor, and then type
edit mhn again.
Here's how to install original.
|