~ubuntu-branches/ubuntu/trusty/xemacs21-packages/trusty

« back to all changes in this revision

Viewing changes to xemacs-packages/mh-e/mh-e.texi

  • Committer: Package Import Robot
  • Author(s): Mark Brown
  • Date: 2013-11-17 14:40:05 UTC
  • mfrom: (1.2.7) (2.1.6 sid)
  • Revision ID: package-import@ubuntu.com-20131117144005-53gvcz47wugzpp33
Tags: 2009.02.17.dfsg.2-1
* New maintainer, reupload to archive.  This is mostly the previous
  packaging with RC bug fixes - a bunch of additional work needs to
  be done to modernise this (closes: #729717).
* Remove yet more non-free docs (closes: #695799, #709501).
* Fix many build failures due to texinfo5.  Some of these fixes are
  far from ideal and will need to be revisited (closes: #712316).
* Convert to v3.0 (quilt).
* Delete some extra generated files in auctex on clean.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
\input texinfo   @c -*-texinfo-*-
2
 
@c $Id: mh-e.texi,v 1.6 2003-04-30 01:28:04 youngs Exp $
3
 
@c %**start of header
4
 
@setfilename ../info/mh-e
5
 
@settitle mh-e
6
 
@c %**end of header
7
 
 
8
 
@setchapternewpage odd
9
 
 
10
 
@dircategory Emacs
11
 
@direntry
12
 
* MH-E: (mh-e).         Emacs interface to the MH mail system.
13
 
@end direntry
14
 
 
15
 
@c Version variables.
16
 
@set EDITION 1.3
17
 
@set VERSION 5.0.2
18
 
@set UPDATED 18 February 2001
19
 
@set UPDATE-MONTH February 2001
20
 
 
21
 
@ifinfo
22
 
This is Edition @value{EDITION}, last updated @value{UPDATED}, of
23
 
@cite{mh-e, The Emacs Interface to MH}, for mh-e, Version
24
 
@value{VERSION}.
25
 
 
26
 
Copyright 1995, 2001 Free Software Foundation, Inc.
27
 
 
28
 
Permission is granted to copy, distribute and/or modify this document
29
 
under the terms of the GNU Free Documentation License, Version 1.1 or
30
 
any later version published by the Free Software Foundation; with no
31
 
Invariant Sections, with the Front-Cover texts being ``A GNU
32
 
Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
33
 
license is included in the section entitled ``GNU Free Documentation
34
 
License'' in the Emacs manual.
35
 
 
36
 
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
37
 
this GNU Manual, like GNU software.  Copies published by the Free
38
 
Software Foundation raise funds for GNU development.''
39
 
 
40
 
This document is part of a collection distributed under the GNU Free
41
 
Documentation License.  If you want to distribute this document
42
 
separately from the collection, you can do so by adding a copy of the
43
 
license to the document, as described in section 6 of the license.
44
 
@end ifinfo
45
 
 
46
 
@titlepage
47
 
@sp 10
48
 
@center @titlefont{mh-e}
49
 
@sp 2
50
 
@center The Emacs Interface to MH
51
 
@sp 2
52
 
@center by Bill Wohler
53
 
@sp 2
54
 
@center Edition @value{EDITION} for mh-e Version @value{VERSION}
55
 
@sp 2
56
 
@center @value{UPDATE-MONTH}
57
 
 
58
 
@page
59
 
@vskip 0pt plus 1filll
60
 
Copyright @copyright{} 1995, 2001 Free Software Foundation, Inc.
61
 
 
62
 
Permission is granted to copy, distribute and/or modify this document
63
 
under the terms of the GNU Free Documentation License, Version 1.1 or
64
 
any later version published by the Free Software Foundation; with no
65
 
Invariant Sections, with the Front-Cover texts being ``A GNU
66
 
Manual'', and with the Back-Cover Texts as in (a) below.  A copy of the
67
 
license is included in the section entitled ``GNU Free Documentation
68
 
License'' in the Emacs manual.
69
 
 
70
 
(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
71
 
this GNU Manual, like GNU software.  Copies published by the Free
72
 
Software Foundation raise funds for GNU development.''
73
 
 
74
 
This document is part of a collection distributed under the GNU Free
75
 
Documentation License.  If you want to distribute this document
76
 
separately from the collection, you can do so by adding a copy of the
77
 
license to the document, as described in section 6 of the license.
78
 
@end titlepage
79
 
 
80
 
@ifinfo
81
 
@node Top, Preface, (dir), (dir)
82
 
@top MH and Emacs
83
 
This is Edition @value{EDITION} of @cite{mh-e, The Emacs Interface to
84
 
MH}, last updated @value{UPDATED} for mh-e Version @value{VERSION}.
85
 
 
86
 
@menu
87
 
* Preface::                     Introduction to mh-e.
88
 
* Tour Through mh-e::           Use mh-e quickly!
89
 
* Using mh-e::                  Documentation for all commands.
90
 
* Customizing mh-e::            Documentation for all variables.
91
 
* Odds and Ends::               Getting mh-e, reporting bugs, mailing
92
 
                                list and FAQ.
93
 
* History::                     The authors speak up!
94
 
* Copying::                     The GNU General Public License
95
 
* Command Index::               
96
 
* Variable Index::              
97
 
* Concept Index::               
98
 
@end menu
99
 
@end ifinfo
100
 
 
101
 
@node Preface, Tour Through mh-e, Top, Top
102
 
@unnumbered Preface
103
 
 
104
 
@cindex Emacs
105
 
@cindex Unix commands, Emacs
106
 
 
107
 
These chapters introduce another interface to MH that is accessible
108
 
through the GNU Emacs editor, namely, @emph{mh-e}.  mh-e is easy to use.
109
 
I don't assume that you know GNU Emacs or even MH at this point, since I
110
 
didn't know either of them when I discovered mh-e.  However, mh-e was
111
 
the tip of the iceberg, and I discovered more and more niceties about
112
 
GNU Emacs and MH@.  Now I'm fully hooked on both of them.
113
 
 
114
 
@cindex history
115
 
 
116
 
The mh-e package is distributed with GNU Emacs, @footnote{Note that
117
 
mh-e is supported with MH 6 and @w{Emacs 18} through @w{Emacs 21}.
118
 
Reportedly, large parts of it work with @w{MH 5} and also with
119
 
Lucid/XEmacs and Epoch, but there are no guarantees. It is also
120
 
distributed with Lucid/XEmacs, as well as with MH itself.} so you
121
 
shouldn't have to do anything special to use it. But it's important to
122
 
note a brief history of mh-e. @w{Version 3} was prevalent through the
123
 
@w{Emacs 18} and early @w{Emacs 19} years. Then @w{Version 4} came out
124
 
(@w{Emacs 19.23}), which introduced several new and changed commands.
125
 
Finally, @w{Version 5.0} was released, which fixed some bugs and
126
 
incompatibilities, and was incorporated into @w{Emacs 19.29}. This is
127
 
the version covered by this manual. @ref{Getting Started} will help
128
 
you decide which version you have.
129
 
 
130
 
If you don't already use GNU Emacs but want to learn more, you can read
131
 
an online tutorial by starting GNU Emacs and typing @kbd{C-h t}
132
 
(@code{help-with-tutorial}).  (This notation is described in
133
 
@ref{Conventions}.)  If you want to take the plunge, consult the
134
 
@iftex
135
 
@cite{GNU Emacs Manual},
136
 
@end iftex
137
 
@ifinfo
138
 
@ref{top, , GNU Emacs Manual, emacs, The GNU Emacs Manual},
139
 
@end ifinfo
140
 
from the Free Software Foundation.
141
 
 
142
 
If more information is needed, you can go to the Unix manual pages of
143
 
the individual MH commands.  When the name is not obvious, I'll guide
144
 
you to a relevant MH manual page that describes the action more fully.
145
 
 
146
 
I hope you enjoy these chapters!  If you have any comments, or
147
 
suggestions for this document, please let me know.
148
 
 
149
 
@noindent
150
 
Bill Wohler <@i{wohler@@newt.com}>@*
151
 
8 February 1995
152
 
 
153
 
@node    Tour Through mh-e, Using mh-e, Preface, Top
154
 
@chapter Tour Through mh-e
155
 
 
156
 
This chapter introduces some of the terms you'll need to know and then
157
 
takes you on a tour of mh-e. @footnote{The keys mentioned in these
158
 
chapters refer to the default key bindings.  If you've changed the
159
 
bindings, refer to the command summaries at the beginning of each major
160
 
section in @ref{Using mh-e}, for a mapping between default key bindings
161
 
and function names.}  When you're done, you'll be able to send, read,
162
 
and file mail, which is all that a lot of people ever do.  But if you're
163
 
the curious type, you'll read @ref{Using mh-e} to be able to use all
164
 
the features of mh-e.  If you're the adventurous type, you'll read
165
 
@ref{Customizing mh-e} to make mh-e do what you want.  I suggest you
166
 
read this chapter first to get the big picture, and then you can read
167
 
the other two as you wish.
168
 
 
169
 
@menu
170
 
* Conventions::                 GNU Emacs Terms and Conventions
171
 
* Getting Started::             
172
 
* Sending Mail Tour::           
173
 
* Reading Mail Tour::           
174
 
* Processing Mail Tour::        
175
 
* Leaving mh-e::                
176
 
* More About mh-e::             
177
 
@end menu
178
 
 
179
 
@node Conventions, Getting Started, Tour Through mh-e, Tour Through mh-e
180
 
@section GNU Emacs Terms and Conventions
181
 
 
182
 
@cindex Emacs, terms and conventions
183
 
 
184
 
@cindex Emacs
185
 
@cindex Unix commands, Emacs
186
 
 
187
 
If you're an experienced Emacs user, you can skip the following
188
 
conventions and definition of terms and go directly to @ref{Getting
189
 
Started} below.  The conventions are as follows:
190
 
 
191
 
@table @kbd
192
 
@item C-x
193
 
Hold down the @key{CTRL} (Control) key and press the @kbd{x} key.
194
 
@item M-x
195
 
Hold down the @key{META} or @key{ALT} key and press the @kbd{x} key.
196
 
 
197
 
Since some keyboards don't have a @key{META} key, you can generate
198
 
@kbd{M-x}, for example, by pressing @key{ESC} (Escape), @emph{releasing
199
 
it}, @footnote{This is emphasized because pressing ESC twice or holding
200
 
it down a second too long so that it repeats gives you an error message.}
201
 
and then pressing the @kbd{x} key.
202
 
@item RET
203
 
Press the @key{RETURN} or @key{ENTER} key.  This is normally used to
204
 
complete a command.
205
 
@item SPC
206
 
Press the space bar.
207
 
@item TAB
208
 
Press the @key{TAB} key.
209
 
@item DEL
210
 
Press the @key{DELETE} key.
211
 
@item BS
212
 
Press the @key{BACKSPACE} key. @footnote{If you are using Version 20
213
 
or earlier of Emacs, you will need to use the @key{DEL} key.}
214
 
@end table
215
 
 
216
 
@cindex Emacs, prefix argument
217
 
@cindex prefix argument
218
 
 
219
 
A @dfn{prefix argument} allows you to pass an argument to any Emacs
220
 
function.  To pass an argument, type @kbd{C-u} before the Emacs command
221
 
or keystroke.  Numeric arguments can be passed as well.  For example, to
222
 
insert five f's, use @kbd{C-u 5 f}.  There is a default of four when
223
 
using @kbd{C-u}, and you can use multiple prefix arguments to provide
224
 
arguments of powers of four.  To continue our example, you could insert
225
 
four f's with @kbd{C-u f}, 16 f's with @kbd{C-u C-u f}, 64 f's with
226
 
@kbd{C-u C-u C-u f}, and so on.  Numeric and valueless negative
227
 
arguments can also be inserted with the @key{META} key.  Examples
228
 
include @kbd{M-5} to specify an argument of 5, or @kbd{M--} which
229
 
specifies a negative argument with no particular value.
230
 
 
231
 
@sp 2
232
 
@need 1000
233
 
@center @strong{NOTE}
234
 
 
235
 
@quotation
236
 
The prefix @kbd{C-u} or @kbd{M-} is not necessary in mh-e's MH-Folder
237
 
modes (@pxref{Reading Mail Tour}).  In these modes, simply enter the
238
 
numerical argument before entering the command.
239
 
@end quotation
240
 
 
241
 
@cindex point
242
 
@cindex Emacs, point
243
 
@cindex mark
244
 
@cindex Emacs, mark
245
 
@cindex region
246
 
@cindex Emacs, region
247
 
 
248
 
There are several other terms that are used in Emacs that you should
249
 
know.  The @dfn{point} is where the cursor currently is.  You can save
250
 
your current place in the file by setting a @dfn{mark}.  This operation
251
 
is useful in several ways.  The mark can be later used when defining a
252
 
@dfn{region}, which is the text between the point and mark.  Many
253
 
commands operate on regions, such as those for deleting text or filling
254
 
paragraphs.  A mark can be set with @kbd{C-@@} (or @kbd{C-SPC}).
255
 
 
256
 
@cindex minibuffer
257
 
@cindex Emacs, minibuffer
258
 
@cindex file completion
259
 
@cindex Emacs, file completion
260
 
 
261
 
The @dfn{minibuffer} is the bottom line of the Emacs window, where all
262
 
prompting and multiple-character input is directed.  If you are prompted
263
 
for information in the minibuffer, such as a filename, Emacs can help
264
 
you complete your answer if you type @key{SPC} or @key{TAB}.  A second
265
 
@key{SPC} or @key{TAB} will list all possibilities at that point.  The
266
 
minibuffer is also where you enter Emacs function names after typing
267
 
@kbd{M-x}.  For example, in the first paragraph, I mentioned that you
268
 
could obtain help with @kbd{C-h t} (@code{help-with-tutorial}).  What
269
 
this means is that you can get a tutorial by typing either @kbd{C-h t}
270
 
or @kbd{M-x help-with-tutorial}.  In the latter case, you are prompted
271
 
for @samp{help-with-tutorial} in the minibuffer after typing @kbd{M-x}.
272
 
 
273
 
@cindex interrupting
274
 
@cindex Emacs, interrupting
275
 
@cindex quitting
276
 
@cindex Emacs, quitting
277
 
 
278
 
@i{In case of trouble:} Emacs can be interrupted at any time with
279
 
@kbd{C-g}.  For example, if you've started a command that requests that
280
 
you enter something in the minibuffer, but then you change your mind,
281
 
type @kbd{C-g} and you'll be back where you started.  If you want to
282
 
exit Emacs entirely, use @kbd{C-x C-c}.
283
 
 
284
 
@node Getting Started, Sending Mail Tour, Conventions, Tour Through mh-e
285
 
@section Getting Started
286
 
 
287
 
Because there are many old versions of mh-e out there, it is important to
288
 
know which version you have.  I'll be talking about @w{Version 5} which
289
 
is similar to @w{Version 4} and vastly different from @w{Version 3}.
290
 
 
291
 
First, enter @kbd{M-x load-library @key{RET} mh-e
292
 
@key{RET}}. @footnote{You wouldn't ordinarily do this.}  The message,
293
 
@samp{Loading mh-e...done}, should be displayed in the minibuffer.  If
294
 
you get @samp{Cannot open load file: mh-e}, then your Emacs is very
295
 
badly configured, or mh-e is missing.  You may wish to have your system
296
 
administrator install a new Emacs or at least the latest mh-e files.
297
 
 
298
 
Having loaded mh-e successfully, enter @kbd{M-x mh-version @key{RET}}.
299
 
The version of mh-e should be displayed.  Hopefully it says that you're
300
 
running @w{Version @value{VERSION}} which is the latest version as of
301
 
this printing.  If instead Emacs beeps and says @samp{[No match]}, then
302
 
you're running an old version of mh-e.
303
 
 
304
 
If these tests reveal a non-existent or old version of mh-e, please
305
 
consider obtaining a new version.  You can have your system
306
 
administrator upgrade the system-wide version, or you can install your
307
 
own personal version.  It's really quite easy; instructions for getting
308
 
and installing mh-e are in @ref{Getting mh-e}.
309
 
 
310
 
@cindex @code{install-mh}
311
 
@cindex MH commands, @code{install-mh}
312
 
 
313
 
Also, older versions of mh-e assumed that you had already set up your MH
314
 
environment.  Newer versions set up a new MH environment for you by
315
 
running @code{install-mh} and notifying you of this fact with the
316
 
message in a temporary buffer:
317
 
 
318
 
@example
319
 
I'm going to create the standard MH path for you.
320
 
@end example
321
 
 
322
 
Therefore, if you've never run MH before and you're using an old version
323
 
of mh-e, you need to run @code{install-mh} from the shell before you
324
 
continue the tour.  If you don't, you'll be greeted with the error
325
 
message: @samp{Can't find MH profile}.
326
 
 
327
 
@cindex @file{.emacs}
328
 
@cindex files, @file{.emacs}
329
 
 
330
 
If, during the tour described in this chapter, you see a message like:
331
 
@samp{Searching for program: no such file or directory,
332
 
/usr/local/bin/mhpath}, it means that the MH programs and files are kept
333
 
in a nonstandard directory.  In this case, simply add the following to
334
 
@file{~/.emacs} and restart @code{emacs}.
335
 
 
336
 
@vindex @code{mh-progs}, example
337
 
@vindex @code{mh-lib}, example
338
 
 
339
 
@c XXX Real example for really naive user?
340
 
@example
341
 
@group
342
 
(setq mh-progs "@var{/path/to/MH/binary/directory/}")
343
 
(setq mh-lib "@var{/path/to/MH/library/directory/}")
344
 
@end group
345
 
@end example
346
 
 
347
 
@cindex ~
348
 
 
349
 
The @samp{~} notation used by @file{~/.emacs} above represents your home
350
 
directory.  This is used by the @code{bash} and @code{csh} shells.  If
351
 
your shell does not support this feature, you could use the environment
352
 
variable @samp{$HOME} (such as @file{$HOME/.emacs}) or the absolute path
353
 
(as in @file{/home/wohler/.emacs}) instead.
354
 
 
355
 
At this point, you should see something like the screen in the
356
 
figure in @ref{Reading Mail Tour}.  We're now ready to move on.
357
 
 
358
 
@node Sending Mail Tour, Reading Mail Tour, Getting Started, Tour Through mh-e
359
 
@section Sending Mail
360
 
 
361
 
@cindex sending mail
362
 
@findex @code{mh-smail}
363
 
 
364
 
Let's start our tour by sending ourselves a message which we can later
365
 
read and process.  Enter @kbd{M-x mh-smail} to invoke the mh-e program
366
 
to send messages.  You will be prompted in the minibuffer by @samp{To:}.
367
 
Enter your login name.  The next prompt is @samp{cc:}.  Hit @key{RET} to
368
 
indicate that no carbon copies are to be sent.  At the @samp{Subject:}
369
 
prompt, enter @kbd{Test} or anything else that comes to mind.
370
 
 
371
 
@cindex MH-Letter mode
372
 
@cindex modes, MH-Letter
373
 
@cindex mode
374
 
 
375
 
Once you've specified the recipients and subject, your message appears
376
 
in an Emacs buffer whose mode @footnote{A @dfn{mode} changes Emacs to
377
 
make it easier to edit a particular type of text.} is MH-Letter.
378
 
Enter some text in the body of the message, using normal Emacs commands.
379
 
You should now have something like this: @footnote{If you're running Emacs
380
 
under the X Window System, then you would also see a menubar.  I've left
381
 
out the menubar in all of the example screens.}
382
 
 
383
 
@example
384
 
@group
385
 
@cartouche
386
 
 
387
 
 
388
 
 
389
 
 
390
 
 
391
 
 
392
 
-----Emacs: *scratch*         (Lisp Interaction)--All---------------------
393
 
To: wohler
394
 
cc:
395
 
Subject: Test
396
 
--------
397
 
  This is a test message to get the wheels churning...#
398
 
 
399
 
 
400
 
--**-@{draft@}      (MH-Letter)--All----------------------------------------
401
 
 
402
 
@end cartouche
403
 
@i{mh-e message composition window}
404
 
@end group
405
 
@end example
406
 
 
407
 
@cindex MH-Letter mode
408
 
@cindex modes, MH-Letter
409
 
 
410
 
Note the line of dashes that separates the header and the body of the
411
 
message.  It is essential that these dashes (or a blank line) are
412
 
present or the body of your message will be considered to be part of
413
 
the header.
414
 
 
415
 
There are several commands specific to MH-Letter mode, but at
416
 
this time we'll only use @kbd{C-c C-c} to send your message.  Type
417
 
@kbd{C-c C-c} now.  That's all there is to it!
418
 
 
419
 
@node Reading Mail Tour, Processing Mail Tour, Sending Mail Tour, Tour Through mh-e
420
 
@section Receiving Mail
421
 
 
422
 
@cindex reading mail
423
 
@findex @code{mh-rmail}
424
 
@cindex @code{inc}
425
 
@cindex MH commands, @code{inc}
426
 
@cindex @code{scan}
427
 
@cindex MH commands, @code{scan}
428
 
@cindex MH-Folder mode
429
 
@cindex modes, MH-Folder
430
 
 
431
 
To read the mail you've just sent yourself, enter @kbd{M-x mh-rmail}.
432
 
This incorporates the new mail and put the output from @code{inc}
433
 
(called @dfn{scan lines} after the MH program @code{scan} which prints a
434
 
one-line summary of each message) into a buffer called @samp{+inbox}
435
 
whose major mode is MH-Folder.
436
 
 
437
 
@sp 2
438
 
@need 1000
439
 
@center @strong{NOTE}
440
 
 
441
 
@quotation
442
 
The @kbd{M-x mh-rmail} command will show you only new mail, not old
443
 
mail.  If you were to run this tour again, you would use @kbd{M-r} to
444
 
pull all your messages into mh-e.
445
 
@end quotation
446
 
 
447
 
You should see the scan line for your message, and perhaps others.  Use
448
 
@kbd{n} or @kbd{p} to move the cursor to your test message and type
449
 
@key{RET} to read your message.  You should see something like:
450
 
 
451
 
@example
452
 
@group
453
 
@cartouche
454
 
   3  24Aug  root       received fax files on Wed Aug 24 11:00:13 PDT 1994
455
 
#  4+ 24Aug  To:wohler  Test<<This is a test message to get the wheels chu
456
 
 
457
 
--%%-@{+inbox@} 4 msgs (1-4)      (MH-Folder Show)--Bot---------------------
458
 
To: wohler
459
 
Subject: Test
460
 
Date: Wed, 24 Aug 1994 13:01:13 -0700
461
 
From: Bill Wohler <wohler@@newt.com>
462
 
 
463
 
  This is a test message to get the wheels churning...
464
 
 
465
 
 
466
 
 
467
 
 
468
 
 
469
 
-----@{show-+inbox@} 4      (MH-Show)--Bot----------------------------------
470
 
 
471
 
@end cartouche
472
 
@i{After incorporating new messages}
473
 
@end group
474
 
@end example
475
 
 
476
 
If you typed a long message, you can view subsequent pages with @key{SPC}
477
 
and previous pages with @key{DEL}.
478
 
 
479
 
@node Processing Mail Tour, Leaving mh-e, Reading Mail Tour, Tour Through mh-e
480
 
@section Processing Mail
481
 
 
482
 
@cindex processing mail
483
 
 
484
 
The first thing we want to do is reply to the message that we sent
485
 
ourselves.  Ensure that the cursor is still on the same line as your
486
 
test message and type @kbd{r}.  You are prompted in the minibuffer with
487
 
@samp{Reply to whom:}.  Here mh-e is asking whether you'd like to reply
488
 
to the original sender only, to the sender and primary recipients, or to
489
 
the sender and all recipients.  If you simply hit @key{RET}, you'll
490
 
reply only to the sender.  Hit @key{RET} now.
491
 
 
492
 
You'll find yourself in an Emacs buffer similar to that when you were
493
 
sending the original message, like this:
494
 
 
495
 
@example
496
 
@group
497
 
@cartouche
498
 
To: wohler
499
 
Subject: Re: Test
500
 
In-reply-to: Bill Wohler's message of Wed, 24 Aug 1994 13:01:13 -0700
501
 
             <199408242001.NAA00505@@newt.com>
502
 
--------
503
 
#
504
 
 
505
 
--**-@{draft@}      (MH-Letter)--All----------------------------------------
506
 
To: wohler
507
 
Subject: Test
508
 
Date: Wed, 24 Aug 1994 13:01:13 -0700
509
 
From: Bill Wohler <wohler@@newt.com>
510
 
 
511
 
  This is a test message to get the wheels churning...
512
 
 
513
 
-----@{show-+inbox@} 4      (MH-Show)--Bot----------------------------------
514
 
Composing a reply...done
515
 
@end cartouche
516
 
@i{Composition window during reply}
517
 
@end group
518
 
@end example
519
 
 
520
 
By default, MH will not add you to the address list of your replies, so
521
 
if you find that the @samp{To:} header field is missing, don't worry.
522
 
In this case, type @kbd{C-c C-f C-t} to create and go to the @samp{To:}
523
 
field, where you can type your login name again.  You can move around
524
 
with the arrow keys or with @kbd{C-p} (@code{previous-line}), @kbd{C-n}
525
 
(@code{next-line}), @kbd{C-b} (@code{backward-char}), and @kbd{C-f}
526
 
(@code{forward-char}) and can delete the previous character with
527
 
@key{BS}.  When you're finished editing your message, send it with
528
 
@kbd{C-c C-c} as before.
529
 
 
530
 
@cindex folder
531
 
 
532
 
You'll often want to save messages that were sent to you in an organized
533
 
fashion.  This is done with @dfn{folders}.  You can use folders to keep
534
 
messages from your friends, or messages related to a particular topic.
535
 
With your cursor in the MH-Folder buffer and positioned on the message
536
 
you sent to yourself, type @kbd{o} to output (@code{refile} in MH
537
 
parlance) that message to a folder.  Enter @kbd{test} at the
538
 
@samp{Destination:} prompt and type @kbd{y} (or @key{SPC}) when mh-e
539
 
asks to create the folder @samp{+test}.  Note that a @samp{^} (caret)
540
 
appears next to the message number, which means that the message has
541
 
been marked for refiling but has not yet been refiled.  We'll talk about
542
 
how the refile is actually carried out in a moment.
543
 
 
544
 
@cindex MH-Folder mode
545
 
@cindex modes, MH-Folder
546
 
 
547
 
Your previous reply is now waiting in the system mailbox.  You
548
 
incorporate this mail into your MH-Folder buffer named @samp{+inbox}
549
 
with the @kbd{i} command.  Do this now.  After the mail is incorporated,
550
 
use @kbd{n} or @kbd{p} to move the cursor to the new message, and read
551
 
it with @key{RET}.  Let's delete this message by typing @kbd{d}.  Note
552
 
that a @samp{D} appears next to the message number.  This means that the
553
 
message is marked for deletion but is not yet deleted.  To perform the
554
 
deletion (and the refile we did previously), use the @kbd{x} command.
555
 
 
556
 
@findex @code{mh-smail}
557
 
 
558
 
If you want to send another message you can use @kbd{m} instead of
559
 
@kbd{M-x mh-smail}.  So go ahead, send some mail to your friends!
560
 
 
561
 
@node Leaving mh-e, More About mh-e, Processing Mail Tour, Tour Through mh-e
562
 
@section Leaving mh-e
563
 
 
564
 
@cindex Emacs, quitting
565
 
@cindex quitting
566
 
 
567
 
You may now wish to exit @code{emacs} entirely.  Use @kbd{C-x C-c} to
568
 
exit @code{emacs}.  If you exited without running @kbd{x} in the
569
 
@samp{+inbox} buffer, Emacs will offer to save it for you.  Type @kbd{y}
570
 
or @key{SPC} to save @samp{+inbox} changes, which means to perform any refiles
571
 
and deletes that you did there.
572
 
 
573
 
If you don't want to leave Emacs, you can type @kbd{q} to bury (hide)
574
 
the mh-e folder or delete them entirely with @kbd{C-x k}.  You can then
575
 
later recall them with @kbd{C-x b} or @kbd{M-x mh-rmail}.
576
 
 
577
 
@node More About mh-e,  , Leaving mh-e, Tour Through mh-e
578
 
@section More About mh-e
579
 
 
580
 
These are the basic commands to get you going, but there are plenty
581
 
more.  If you think that mh-e is for you, read @ref{Using mh-e} and
582
 
@ref{Customizing mh-e} to find out how you can:
583
 
 
584
 
@itemize @bullet
585
 
@item
586
 
Print your messages.  (@ref{Printing} and @ref{Customizing Printing}.)
587
 
@item
588
 
Edit messages and include your signature.  (@ref{Draft Editing}
589
 
and @ref{Customizing Draft Editing}.)
590
 
@item
591
 
Forward messages.  (@ref{Forwarding} and @ref{Customizing Forwarding}.)
592
 
@item
593
 
Read digests.  (@ref{Viewing}.)
594
 
@item
595
 
Edit bounced messages.  (@ref{Old Drafts} and @ref{Customizing Old Drafts}.)
596
 
@item
597
 
Send multimedia messages.  (@ref{Editing MIME} and @ref{Customizing Editing MIME}.)
598
 
@item
599
 
Process mail that was sent with @code{shar} or @code{uuencode}.
600
 
(@ref{Files and Pipes}.)
601
 
@item
602
 
Use sequences conveniently.  (@ref{Sequences}.)
603
 
@item
604
 
Show header fields in different fonts.  (@ref{Customizing Viewing}.)
605
 
@item
606
 
Find previously refiled messages.  (@ref{Searching}.)
607
 
@item
608
 
Place messages in a file.  (@ref{Files and Pipes}.)
609
 
@end itemize
610
 
 
611
 
Remember that you can also use MH commands when you're not running mh-e
612
 
(and when you are!).
613
 
 
614
 
@node    Using mh-e, Customizing mh-e, Tour Through mh-e, Top
615
 
@chapter Using mh-e
616
 
 
617
 
This chapter leaves the tutorial style and goes into more detail about
618
 
every mh-e command.  The default, or "out of the box," behavior is
619
 
documented.  If this is not to your liking (for instance, you print with
620
 
something other than @code{lpr)}, see the associated section in
621
 
@ref{Customizing mh-e} which is organized exactly like this chapter.
622
 
 
623
 
@cindex Emacs, functions; describe-mode
624
 
@cindex Emacs, online help
625
 
@cindex online help
626
 
 
627
 
There are many commands, but don't get intimidated.  There are command
628
 
summaries at the beginning of each section.  In case you have or would
629
 
like to rebind the keys, the command summaries also list the associated
630
 
Emacs Lisp function.  Furthermore, even if you're stranded on a desert
631
 
island with a laptop and are without your manuals, you can get a summary
632
 
of all these commands with GNU Emacs online help: use @kbd{C-h m}
633
 
(@code{describe-mode}) for a brief summary of commands or @kbd{C-h i} to
634
 
read this manual via Info.  The online help is quite good; try running
635
 
@kbd{C-h C-h C-h}.  This brings up a list of available help topics, one
636
 
of which displays the documentation for a given key (like @kbd{C-h k
637
 
C-n}).  In addition, review @ref{Conventions}, if any of the GNU Emacs
638
 
conventions are strange to you.
639
 
 
640
 
Let's get started!
641
 
 
642
 
@menu
643
 
* Reading Mail::                
644
 
* Sending Mail::                
645
 
* Draft Editing::               
646
 
* Moving Mail::                 
647
 
* Searching::                   
648
 
* Sequences::                   
649
 
* Miscellaneous::               
650
 
@end menu
651
 
 
652
 
@node Reading Mail, Sending Mail, Using mh-e, Using mh-e
653
 
@section Reading Your Mail
654
 
 
655
 
@cindex reading mail
656
 
@findex @code{mh-rmail}
657
 
@cindex MH-Folder mode
658
 
@cindex modes, MH-Folder
659
 
 
660
 
The mh-e entry point for reading mail is @kbd{M-x mh-rmail}.  This
661
 
command incorporates your mail and creates a buffer called @samp{+inbox}
662
 
in MH-Folder mode.  The @kbd{M-x mh-rmail} command shows you only new
663
 
mail, not old mail. @footnote{If you want to see your old mail as well,
664
 
use @kbd{M-r} to pull all your messages into mh-e.  Or, give a prefix
665
 
argument to @code{mh-rmail} so it will prompt you for folder to visit
666
 
like @kbd{M-f} (for example, @kbd{C-u M-x mh-rmail @key{RET} bob
667
 
@key{RET}}).  Both @kbd{M-r} and @kbd{M-f} are described in
668
 
@ref{Organizing}.}  The @samp{+inbox} buffer contains @dfn{scan lines},
669
 
which are one-line summaries of each incorporated message.  You can
670
 
perform most MH commands on these messages via one-letter commands
671
 
discussed in this chapter.  See @code{scan}(1) for a description of the
672
 
contents of the scan lines, and see the Figure in @ref{Reading Mail
673
 
Tour}, for an example.
674
 
 
675
 
@table @kbd
676
 
@item RET
677
 
Display a message (@code{mh-show}).
678
 
 
679
 
@item SPC
680
 
Go to next page in message (@code{mh-page-msg}).
681
 
 
682
 
@item BS
683
 
Go to previous page in message (@code{mh-previous-page}).
684
 
 
685
 
@item , (comma)
686
 
Display a message with all header fields (@code{mh-header-display}).
687
 
 
688
 
@item M-SPC
689
 
Go to next message in digest (@code{mh-page-digest}).
690
 
 
691
 
@item M-BS
692
 
Go to previous message in digest (@code{mh-page-digest-backwards}).
693
 
 
694
 
@item M-b
695
 
Break up digest into separate messages (@code{mh-burst-digest}).
696
 
 
697
 
@item n
698
 
Display next message (@code{mh-next-undeleted-msg}).
699
 
 
700
 
@item p
701
 
Display previous message (@code{mh-previous-undeleted-msg}).
702
 
 
703
 
@item g
704
 
Go to a message (@code{mh-goto-msg}).
705
 
 
706
 
@item M-<
707
 
Go to first message (@code{mh-first-msg}).
708
 
 
709
 
@item M->
710
 
Go to last message (@code{mh-last-msg}).
711
 
 
712
 
@item t
713
 
Toggle between MH-Folder and MH-Folder Show modes (@code{mh-toggle-showing}).
714
 
@end table
715
 
 
716
 
@menu
717
 
* Viewing::                     
718
 
* Moving Around::               
719
 
@end menu
720
 
 
721
 
@node Viewing, Moving Around, Reading Mail, Reading Mail
722
 
@subsection Viewing Your Mail
723
 
 
724
 
@findex @code{mh-show}
725
 
@findex @code{mh-page-msg}
726
 
@findex @code{mh-previous-page}
727
 
@findex @code{mh-header-display}
728
 
 
729
 
The @kbd{RET} (@code{mh-show}) command displays the message that the
730
 
cursor is on.  If the message is already displayed, it scrolls to the
731
 
beginning of the message.  Use @key{SPC} (@code{mh-page-msg}) and
732
 
@key{BS} (@code{mh-previous-page}) to move forwards and backwards one
733
 
page at a time through the message.  You can give either of these
734
 
commands a prefix argument that specifies the number of lines to scroll
735
 
(such as @kbd{10 SPC}).  mh-e normally hides a lot of the
736
 
superfluous header fields that mailers add to a message, but if you wish
737
 
to see all of them, use the @kbd{,} (comma; @code{mh-header-display})
738
 
command.
739
 
 
740
 
@menu
741
 
* Reading Digests::             
742
 
* Reading MIME::                
743
 
@end menu
744
 
 
745
 
@node Reading Digests, Reading MIME, Viewing, Viewing
746
 
@subsubsection Reading Digests
747
 
 
748
 
@cindex digests
749
 
@findex @code{mh-page-digest}
750
 
@findex @code{mh-page-digest-backwards}
751
 
 
752
 
A digest is a message that contains other messages.  Special mh-e
753
 
commands let you read digests conveniently.  You can use @key{SPC} and
754
 
@key{BS} to page through the digest as if it were a normal message, but
755
 
if you wish to skip to the next message in the digest, use @kbd{M-SPC}
756
 
(@code{mh-page-digest}).  To return to a previous message, use
757
 
@kbd{M-BS} (@code{mh-page-digest-backwards}).
758
 
 
759
 
@cindex @code{burst}
760
 
@cindex MH commands, @code{burst}
761
 
@cindex MH-Folder Show mode
762
 
@cindex modes, MH-Folder Show
763
 
@findex @code{mh-burst-digest}
764
 
 
765
 
@c There was a page break at the colon in the following paragraph which
766
 
@c broke the transition to the example.
767
 
@need 2000
768
 
 
769
 
Another handy command is @kbd{M-b} (@code{mh-burst-digest}).  This
770
 
command uses the MH command @code{burst} to break out each message in
771
 
the digest into its own message.  Using this command, you can quickly
772
 
delete unwanted messages, like this: Once the digest is split up, toggle
773
 
out of MH-Folder Show mode with @kbd{t} (@pxref{Moving Around}) so that
774
 
the scan lines fill the screen and messages aren't displayed.  Then use
775
 
@kbd{d} (@pxref{Deleting}) to quickly delete messages that you don't
776
 
want to read (based on the @samp{Subject:} header field).  You can also
777
 
burst the digest to reply directly to the people who posted the messages
778
 
in the digest.  One problem you may encounter is that the @samp{From:}
779
 
header fields are preceded with a @samp{>} so that your reply can't
780
 
create the @samp{To:} field correctly.  In this case, you must correct
781
 
the @samp{To:} field yourself.  This is described later in @ref{Editing
782
 
Textual}.
783
 
 
784
 
@node Reading MIME,  , Reading Digests, Viewing
785
 
@subsubsection Reading Multimedia Mail
786
 
 
787
 
@cindex multimedia mail
788
 
@cindex MIME
789
 
@cindex @code{show}
790
 
@cindex MH commands, @code{show}
791
 
@cindex @code{mhshow}
792
 
@cindex MH commands, @code{mhshow}
793
 
 
794
 
MH has the ability to read @dfn{@sc{mime}} (Multipurpose Internet Mail
795
 
Extensions) messages.  Unfortunately, mh-e does not yet have this
796
 
ability, so you have to use the MH commands @code{show} or @code{mhshow}
797
 
from the shell to read @sc{mime} messages.  @footnote{You can call them
798
 
directly from Emacs if you're running the X Window System: type @kbd{M-!
799
 
xterm -e mhshow @var{message-number}}.  You can leave out the @code{xterm
800
 
-e} if you use @code{mhlist} or @code{mhstore}.}
801
 
 
802
 
@node Moving Around,  , Viewing, Reading Mail
803
 
@subsection Moving Around
804
 
 
805
 
@cindex moving between messages
806
 
@findex @code{mh-next-undeleted-msg}
807
 
@findex @code{mh-previous-undeleted-msg}
808
 
@findex @code{mh-goto-msg}
809
 
@findex @code{mh-last-msg}
810
 
@findex @code{mh-first-msg}
811
 
 
812
 
To move on to the next message, use the @kbd{n}
813
 
(@code{mh-next-undeleted-msg}) command; use the @kbd{p}
814
 
(@code{mh-previous-undeleted-msg}) command to read the previous message.
815
 
Both of these commands can be given a prefix argument to specify how
816
 
many messages to skip (for example, @kbd{5 n}).  You can also move to a
817
 
specific message with @kbd{g} (@code{mh-goto-msg}).  You can enter the
818
 
message number either before or after typing @kbd{g}.  In the latter
819
 
case, Emacs prompts you.  Finally, you can go to the first or last
820
 
message with @kbd{M-<} (@code{mh-first-msg}) and @kbd{M->}
821
 
(@code{mh-last-msg}) respectively.
822
 
 
823
 
@cindex MH-Folder mode
824
 
@cindex modes, MH-Folder
825
 
 
826
 
You can also use the Emacs commands @kbd{C-p} (@code{previous-line}) and
827
 
@kbd{C-n} (@code{next-line}) to move up and down the scan lines in the
828
 
MH-Folder window.  These commands can be used in conjunction with
829
 
@kbd{RET} to look at deleted or refiled messages.
830
 
 
831
 
@cindex MH-Folder mode
832
 
@cindex modes, MH-Folder
833
 
@cindex MH-Folder Show mode
834
 
@cindex modes, MH-Folder Show
835
 
@cindex junk mail
836
 
@findex @code{mh-toggle-showing}
837
 
 
838
 
The command @kbd{t} (@code{mh-toggle-showing}) switches between
839
 
MH-Folder mode and MH-Folder Show mode.  @footnote{For you Emacs
840
 
wizards, this is implemented as an Emacs minor mode.} MH-Folder mode
841
 
turns off the associated show buffer so that you can perform operations
842
 
on the messages quickly without reading them.  This is an excellent way
843
 
to prune out your junk mail or to refile a group of messages to another
844
 
folder for later examination.
845
 
 
846
 
@node Sending Mail, Draft Editing, Reading Mail, Using mh-e
847
 
@section Sending Mail
848
 
 
849
 
@cindex sending mail
850
 
@findex @code{mh-smail}
851
 
 
852
 
You can send a mail message in several ways.  You can call @kbd{M-x
853
 
mh-smail} directly, or from the command line like this:
854
 
 
855
 
@cindex starting from command line
856
 
 
857
 
@example
858
 
% @kbd{emacs -f mh-smail}
859
 
@end example
860
 
 
861
 
From within mh-e's MH-Folder mode, other methods of sending mail
862
 
are available as well:
863
 
 
864
 
@table @kbd
865
 
@item m
866
 
Compose a message (@code{mh-send}).
867
 
 
868
 
@item r
869
 
Reply to a message (@code{mh-reply}).
870
 
 
871
 
@item f
872
 
Forward message(s) (@code{mh-forward}).
873
 
 
874
 
@item M-d
875
 
Redistribute a message (@code{mh-redistribute}).
876
 
 
877
 
@item M-e
878
 
Edit a message that was bounced by mailer (@code{mh-extract-rejected-mail}).
879
 
 
880
 
@item M-a
881
 
Edit a message to send it again (@code{mh-edit-again}).
882
 
@end table
883
 
 
884
 
@cindex MH-Folder mode
885
 
@cindex modes, MH-Folder
886
 
@cindex MH-Letter mode
887
 
@cindex modes, MH-Letter
888
 
@findex @code{mh-send}
889
 
 
890
 
From within a MH-Folder buffer, you can simply use the command @kbd{m}
891
 
(@code{mh-send}).  However you invoke @code{mh-send}, you are prompted
892
 
for the @samp{To:}, @samp{cc:}, and @samp{Subject:} header fields.  Once
893
 
you've specified the recipients and subject, your message appears in an
894
 
Emacs buffer whose mode is MH-Letter (see the Figure in @ref{Sending
895
 
Mail} to see what the buffer looks like).  MH-Letter mode allows you to
896
 
edit your message, to check the validity of the recipients, to insert
897
 
other messages into your message, and to send the message.  We'll go
898
 
more into depth about editing a @dfn{draft} @footnote{I highly recommend
899
 
that you use a @dfn{draft folder} so that you can edit several drafts in
900
 
parallel.  To do so, create a folder (e.g., @file{+drafts}), and add a
901
 
profile component called @samp{Draft-Folder:} which contains
902
 
@file{+drafts} (see @code{mh-profile}(5)).} (a message you're composing)
903
 
in just a moment.
904
 
 
905
 
@findex @code{mh-smail}
906
 
@findex @code{mh-smail-other-window}
907
 
 
908
 
@code{mh-smail} always creates a two-window layout with the current
909
 
buffer on top and the draft on the bottom.  If you would rather preserve
910
 
the window layout, use @kbd{M-x mh-smail-other-window}.
911
 
 
912
 
@menu
913
 
* Replying::                    
914
 
* Forwarding::                  
915
 
* Redistributing::              
916
 
* Old Drafts::                  
917
 
@end menu
918
 
 
919
 
@node Replying, Forwarding, Sending Mail, Sending Mail
920
 
@subsection Replying to Mail
921
 
 
922
 
@cindex replying
923
 
@cindex @code{mhl}
924
 
@cindex MH commands, @code{mhl}
925
 
@cindex @file{mhl.reply}
926
 
@cindex files, @file{mhl.reply}
927
 
@findex @code{mh-reply}
928
 
 
929
 
To compose a reply to a message, use the @kbd{r} (@code{mh-reply})
930
 
command.  If you supply a prefix argument (as in @kbd{C-u r}), the
931
 
message you are replying to is inserted in your reply after having first
932
 
been run through @code{mhl} with the format file @file{mhl.reply}.  See
933
 
@code{mhl}(1) to see how you can modify the default @file{mhl.reply}
934
 
file.
935
 
 
936
 
When you reply to a message, you are first prompted with @samp{Reply to
937
 
whom?}.  You have several choices here.
938
 
 
939
 
@example
940
 
@group
941
 
@b{Response}     @b{Reply Goes To}
942
 
 
943
 
@kbd{from}         @r{The person who sent the message.  This is the default,}
944
 
             @r{so @key{RET} is sufficient.}
945
 
 
946
 
@kbd{to}           @r{Replies to the sender, plus all recipients in the}
947
 
             @r{@samp{To:} header field.}
948
 
 
949
 
@kbd{all}
950
 
@kbd{cc}           @r{Forms a reply to the sender, plus all recipients.}
951
 
@end group
952
 
@end example
953
 
 
954
 
@cindex @code{repl}
955
 
@cindex MH commands, @code{repl}
956
 
 
957
 
Depending on your answer, @code{repl} is given a different argument to
958
 
form your reply.  Specifically, a choice of @kbd{from} or none at all
959
 
runs @code{repl -nocc all}, and a choice of @kbd{to} runs @code{repl -cc
960
 
to}.  Finally, either @kbd{cc} or @kbd{all} runs @code{repl -cc all
961
 
-nocc me}.
962
 
 
963
 
@cindex MH-Letter mode
964
 
@cindex modes, MH-Letter
965
 
 
966
 
Two windows are then created.  One window contains the message to which
967
 
you are replying.  Your draft, in MH-Letter mode (described in
968
 
@ref{Draft Editing}), is in the other window.
969
 
 
970
 
If you wish to customize the header or other parts of the reply draft,
971
 
please see @code{repl}(1) and @code{mh-format}(5).
972
 
 
973
 
@node Forwarding, Redistributing, Replying, Sending Mail
974
 
@subsection Forwarding Mail
975
 
 
976
 
@cindex forwarding
977
 
@cindex @code{forw}
978
 
@cindex MH commands, @code{forw}
979
 
@findex @code{mh-forward}
980
 
 
981
 
To forward a message, use the @kbd{f} (@code{mh-forward}) command.  You
982
 
are given a draft to edit that looks like it would if you had run the MH
983
 
command @code{forw}.  You are given a chance to add some text (see
984
 
@ref{Draft Editing}).
985
 
 
986
 
You can forward several messages by using a prefix argument; in this
987
 
case, you are prompted for the name of a @dfn{sequence}, a symbolic name
988
 
that represents a list or range of message numbers (for example,
989
 
@kbd{C-u f forbob @key{RET}}).  All of the messages in the sequence are
990
 
inserted into your draft.  By the way, although sequences are often
991
 
mentioned in this chapter, you don't have to worry about them for now;
992
 
the full description of sequences in mh-e is at the end in
993
 
@ref{Sequences}.  To learn more about sequences in general, please see
994
 
@code{mh-sequence}(5).
995
 
 
996
 
@node Redistributing, Old Drafts, Forwarding, Sending Mail
997
 
@subsection Redistributing Your Mail
998
 
 
999
 
@cindex redistributing
1000
 
@findex @code{mh-redistribute}
1001
 
 
1002
 
The command @kbd{M-d} (@code{mh-redistribute}) is similar in function to
1003
 
forwarding mail, but it does not allow you to edit the message, nor does
1004
 
it add your name to the @samp{From:} header field.  It appears to the
1005
 
recipient as if the message had come from the original sender.  For more
1006
 
information on redistributing messages, see @code{dist}(1).  Also
1007
 
investigate the @kbd{M-a} (@code{mh-edit-again}) command in @ref{Old
1008
 
Drafts}, for another way to redistribute messages.
1009
 
 
1010
 
@node Old Drafts,  , Redistributing, Sending Mail
1011
 
@subsection Editing Old Drafts and Bounced Messages
1012
 
 
1013
 
@cindex re-editing drafts
1014
 
@cindex @file{draft}
1015
 
@cindex files, @file{draft}
1016
 
@findex @code{mh-edit-again}
1017
 
 
1018
 
If you don't complete a draft for one reason or another, and if the
1019
 
draft buffer is no longer available, you can pick your draft up again
1020
 
with @kbd{M-a} (@code{mh-edit-again}).  If you don't use a draft folder,
1021
 
your last @file{draft} file will be used.  If you use draft folders,
1022
 
you'll need to visit the draft folder with @kbd{M-f drafts @key{RET}},
1023
 
use @kbd{n} to move to the appropriate message, and then use @kbd{M-a}
1024
 
to prepare the message for editing.
1025
 
 
1026
 
The @kbd{M-a} command can also be used to take messages that were sent
1027
 
to you and to send them to more people.
1028
 
 
1029
 
@cindex Mailer-Daemon
1030
 
@findex @code{mh-extract-rejected-mail}
1031
 
 
1032
 
Don't use @kbd{M-a} to re-edit a message from a @i{Mailer-Daemon} who
1033
 
complained that your mail wasn't posted for some reason or another.  In
1034
 
this case, use @kbd{M-e} (@code{mh-extract-rejected-mail}) to prepare
1035
 
the message for editing by removing the @i{Mailer-Daemon} envelope and
1036
 
unneeded header fields.  Fix whatever addressing problem you had, and
1037
 
send the message again with @kbd{C-c C-c}.
1038
 
 
1039
 
@node Draft Editing, Moving Mail, Sending Mail, Using mh-e
1040
 
@section Editing a Draft
1041
 
 
1042
 
@cindex editing draft
1043
 
@cindex MH-Letter mode
1044
 
@cindex modes, MH-Letter
1045
 
 
1046
 
When you edit a message that you want to send (called a @dfn{draft} in
1047
 
this case), the mode used is MH-Letter.  This mode provides
1048
 
several commands in addition to the normal Emacs editing commands to
1049
 
help you edit your draft.
1050
 
 
1051
 
@table @kbd
1052
 
@item C-c C-y
1053
 
Insert contents of message to which you're replying (@code{mh-yank-cur-msg}).
1054
 
 
1055
 
@item C-c C-i
1056
 
Insert a message from a folder (@code{mh-insert-letter}).
1057
 
 
1058
 
@item C-c C-f C-t
1059
 
Move to @samp{To:} header field (@code{mh-to-field}).
1060
 
 
1061
 
@item C-c C-f C-c
1062
 
Move to @samp{cc:} header field (@code{mh-to-field}).
1063
 
 
1064
 
@item C-c C-f C-s
1065
 
Move to @samp{Subject:} header field (@code{mh-to-field}).
1066
 
 
1067
 
@item C-c C-f C-f
1068
 
Move to @samp{From:} header field (@code{mh-to-field}).
1069
 
 
1070
 
@item C-c C-f C-b
1071
 
Move to @samp{Bcc:} header field (@code{mh-to-field}).
1072
 
 
1073
 
@item C-c C-f C-f
1074
 
Move to @samp{Fcc:} header field (@code{mh-to-fcc}).
1075
 
 
1076
 
@item C-c C-f C-d
1077
 
Move to @samp{Dcc:} header field (@code{mh-to-field}).
1078
 
 
1079
 
@item C-c C-w
1080
 
Display expanded recipient list (@code{mh-check-whom}).
1081
 
 
1082
 
@item C-c C-s
1083
 
Insert signature in message (@code{mh-insert-signature}).
1084
 
 
1085
 
@item C-c C-m C-f
1086
 
Include forwarded message (@sc{mime}) (@code{mh-mhn-compose-forw}).
1087
 
 
1088
 
@item C-c C-m C-e
1089
 
Include anonymous ftp reference (@sc{mime}) (@code{mh-mhn-compose-anon-ftp}).
1090
 
 
1091
 
@item C-c C-m C-t
1092
 
Include anonymous ftp reference to compressed tar file (@sc{mime})
1093
 
(@code{mh-mhn-compose-external-compressed-tar}).
1094
 
 
1095
 
@item C-c C-m C-i
1096
 
Include binary, image, sound, etc. (@sc{mime})
1097
 
(@code{mh-mhn-compose-insertion}).
1098
 
 
1099
 
@item C-c C-e
1100
 
Run through @code{mhn} before sending (@code{mh-edit-mhn}).
1101
 
 
1102
 
@item C-c C-m C-u
1103
 
Undo effects of @code{mhn} (@code{mh-revert-mhn-edit}).
1104
 
 
1105
 
@item C-c C-c
1106
 
Save draft and send message (@code{mh-send-letter}).
1107
 
 
1108
 
@item C-c C-q
1109
 
Quit editing and delete draft message (@code{mh-fully-kill-draft}).
1110
 
@end table
1111
 
 
1112
 
@menu
1113
 
* Editing Textual::             
1114
 
* Editing MIME::                
1115
 
* Sending Message::             
1116
 
* Killing Draft::               
1117
 
@end menu
1118
 
 
1119
 
@node Editing Textual, Editing MIME, Draft Editing, Draft Editing
1120
 
@subsection Editing Textual Messages
1121
 
 
1122
 
The following sections show you how to edit a draft.
1123
 
The commands described here are also applicable to messages that have
1124
 
multimedia components.
1125
 
 
1126
 
@menu
1127
 
* Inserting Letter::            
1128
 
* Inserting Messages::          
1129
 
* Header::                      
1130
 
* Recipients::                  
1131
 
* Signature::                   
1132
 
@end menu
1133
 
 
1134
 
@node Inserting Letter, Inserting Messages, Editing Textual, Editing Textual
1135
 
@subsubsection Inserting letter to which you're replying
1136
 
 
1137
 
@cindex inserting messages
1138
 
@findex @code{mh-yank-cur-msg}
1139
 
 
1140
 
It is often useful to insert a snippet of text from a letter that
1141
 
someone mailed to provide some context for your reply.  The command
1142
 
@kbd{C-c C-y} (@code{mh-yank-cur-msg}) does this by yanking a portion of
1143
 
text from the message to which you're replying and inserting @samp{> }
1144
 
before each line.
1145
 
 
1146
 
@cindex mark
1147
 
@cindex Emacs, mark
1148
 
@cindex point
1149
 
@cindex Emacs, point
1150
 
@cindex region
1151
 
@cindex Emacs, region
1152
 
 
1153
 
You can control how much text is included when you run this command.  If
1154
 
you run this command right away, without entering the buffer containing
1155
 
the message to you, this command will yank the entire message, as is,
1156
 
into your reply. @footnote{If you'd rather have the header cleaned up,
1157
 
use @kbd{C-u r} instead of @kbd{r} when replying (see @ref{Replying}).}
1158
 
If you enter the buffer containing the message sent to you and move the
1159
 
cursor to a certain point and return to your reply and run @kbd{C-c
1160
 
C-y}, then the text yanked will range from that point to the end of the
1161
 
message.  Finally, the most common action you'll perform is to enter the
1162
 
message sent to you, move the cursor to the beginning of a paragraph or
1163
 
phrase, set the @dfn{mark} with @kbd{C-SPC} or @kbd{C-@@}, and move the
1164
 
cursor to the end of the paragraph or phrase.  The cursor position is
1165
 
called the @dfn{point}, and the space between the mark and point is
1166
 
called the @dfn{region}.  Having done that, @kbd{C-c C-y} will insert
1167
 
the region you selected.
1168
 
 
1169
 
@node Inserting Messages, Header, Inserting Letter, Editing Textual
1170
 
@subsubsection Inserting messages
1171
 
 
1172
 
@cindex inserting messages
1173
 
@findex @code{mh-insert-letter}
1174
 
 
1175
 
Messages can be inserted with @kbd{C-c C-i} (@code{mh-insert-letter}).
1176
 
This command prompts you for the folder and message number and inserts
1177
 
the message, indented by @samp{> }.  Certain undesirable header fields
1178
 
are removed before insertion.  If given a prefix argument (like @kbd{C-u
1179
 
C-c C-i}), the header is left intact, the message is not indented, and
1180
 
@samp{> } is not inserted before each line.
1181
 
 
1182
 
@node Header, Recipients, Inserting Messages, Editing Textual
1183
 
@subsubsection Editing the header
1184
 
 
1185
 
@cindex editing header
1186
 
@findex @code{mh-to-field}
1187
 
 
1188
 
Because the header is part of the message, you can edit the header
1189
 
fields as you wish.  However, several convenience functions exist to
1190
 
help you create and edit them.  For example, the command @kbd{C-c C-f
1191
 
C-t} (@code{mh-to-field}; alternatively, @kbd{C-c C-f t}) moves the
1192
 
cursor to the @samp{To:} header field, creating it if necessary.  The
1193
 
functions to move to the @samp{cc:}, @samp{Subject:}, @samp{From:},
1194
 
@samp{Bcc:}, and @samp{Dcc:} header fields are similar.
1195
 
 
1196
 
@findex @code{mh-to-fcc}
1197
 
 
1198
 
One function behaves differently from the others, namely, @kbd{C-c C-f
1199
 
C-f} (@code{mh-to-fcc}; alternatively, @kbd{C-c C-f f}).  This function
1200
 
will prompt you for the folder name in which to file a copy of the draft.
1201
 
 
1202
 
Be sure to leave a row of dashes or a blank line between the header and
1203
 
the body of the message.
1204
 
 
1205
 
@node Recipients, Signature, Header, Editing Textual
1206
 
@subsubsection Checking recipients
1207
 
 
1208
 
@cindex checking recipients
1209
 
@cindex @code{whom}
1210
 
@cindex MH commands, @code{whom}
1211
 
@findex @code{mh-check-whom}
1212
 
 
1213
 
The @kbd{C-c C-w} (@code{mh-check-whom}) command expands aliases so you
1214
 
can check the actual address(es) in the alias.  A new buffer is created
1215
 
with the output of @code{whom}.
1216
 
 
1217
 
@node Signature,  , Recipients, Editing Textual
1218
 
@subsubsection Inserting your signature
1219
 
 
1220
 
@cindex inserting signature
1221
 
@cindex signature
1222
 
@cindex @file{.signature}
1223
 
@cindex files, @file{.signature}
1224
 
@findex @code{mh-insert-signature}
1225
 
 
1226
 
You can insert your signature at the current cursor location with the
1227
 
@kbd{C-c C-s} (@code{mh-insert-signature}) command.  The text of your
1228
 
signature is taken from the file @file{~/.signature}.
1229
 
 
1230
 
@node Editing MIME, Sending Message, Editing Textual, Draft Editing
1231
 
@subsection Editing Multimedia Messages
1232
 
 
1233
 
@cindex MIME
1234
 
@cindex multimedia mail
1235
 
@cindex @code{mhn}
1236
 
@cindex MH commands, @code{mhn}
1237
 
 
1238
 
mh-e has the capability to create multimedia messages.  It uses the
1239
 
@sc{mime} (Multipurpose Internet Mail Extensions) protocol.  The
1240
 
@sc{mime} protocol allows you to incorporate images, sound, video,
1241
 
binary files, and even commands that fetch a file with @samp{ftp} when
1242
 
your recipient reads the message!  If you were to create a multimedia
1243
 
message with plain MH commands, you would use @code{mhn}.  Indeed, the
1244
 
mh-e @sc{mime} commands merely insert @code{mhn} directives which are
1245
 
later expanded by @code{mhn}.
1246
 
 
1247
 
Each of the mh-e commands for editing multimedia messages or for
1248
 
incorporating multimedia objects is prefixed with @kbd{C-c C-m} .
1249
 
 
1250
 
@cindex content types
1251
 
@cindex MIME, content types
1252
 
 
1253
 
Several @sc{mime} objects are defined.  They are called @dfn{content
1254
 
types}.  The table in @ref{Customizing Draft Editing} contains a list of
1255
 
the content types that mh-e currently knows about.  Several of the mh-e
1256
 
commands fill in the content type for you, whereas others require you to
1257
 
enter one.  Most of the time, it should be obvious which one to use
1258
 
(e.g., use @kbd{image/jpeg} to include a @sc{jpeg} image).  If not, you
1259
 
can refer to @sc{rfc} 1521, 
1260
 
@c Footnotes are very fragile.  Hence the duplication.
1261
 
@c The line break in the footnote was necessary since TeX wasn't creating one.
1262
 
@ifclear html
1263
 
@footnote{This @sc{rfc} (Request For Comments) is
1264
 
available via the @sc{url} @*
1265
 
@file{ftp://ds.internic.net/rfc/rfc1521.txt}.}
1266
 
@end ifclear
1267
 
@ifset html
1268
 
@footnote{This @sc{rfc} (Request For Comments) is
1269
 
available via the @sc{url} @*
1270
 
@file{<A HREF="ftp://ds.internic.net/rfc/rfc1521.txt">ftp://ds.internic.net/rfc/rfc1521.txt</A>}.}
1271
 
@end ifset
1272
 
which defines the @sc{mime} protocol, for a list of valid content types.
1273
 
 
1274
 
@cindex content description
1275
 
@cindex MIME, content description
1276
 
 
1277
 
You are also sometimes asked for a @dfn{content description}.  This is
1278
 
simply an optional brief phrase, in your own words, that describes the
1279
 
object.  If you don't care to enter a content description, just press
1280
 
return and none will be included; however, a reader may skip over
1281
 
multimedia fields unless the content description is compelling.
1282
 
 
1283
 
Remember: you can always add @code{mhn} directives by hand.
1284
 
 
1285
 
@menu
1286
 
* Forwarding MIME::             
1287
 
* FTP::                         
1288
 
* Tar::                         
1289
 
* Other MIME Objects::          
1290
 
* Sending MIME::                
1291
 
@end menu
1292
 
 
1293
 
@node Forwarding MIME, FTP, Editing MIME, Editing MIME
1294
 
@subsubsection Forwarding multimedia messages
1295
 
 
1296
 
@findex @code{mh-mhn-compose-forw}
1297
 
 
1298
 
Mail may be forwarded with @sc{mime} using the command @kbd{C-c C-m C-f}
1299
 
(@code{mh-mhn-compose-forw}).  You are prompted for a content
1300
 
description, the name of the folder in which the messages to forward are
1301
 
located, and the messages' numbers.
1302
 
 
1303
 
@node FTP, Tar, Forwarding MIME, Editing MIME
1304
 
@subsubsection Including an ftp reference
1305
 
 
1306
 
@cindex @code{ftp}
1307
 
@cindex Unix commands, @code{ftp}
1308
 
@cindex MIME, @code{ftp}
1309
 
@findex @code{mh-mhn-compose-anon-ftp}
1310
 
 
1311
 
You can even have your message initiate an @code{ftp} transfer when the
1312
 
recipient reads the message.  To do this, use the @kbd{C-c C-m C-e}
1313
 
(@code{mh-mhn-compose-anon-ftp}) command.  You are prompted for the
1314
 
remote host and pathname, the content type, and the content description.
1315
 
 
1316
 
@node Tar, Other MIME Objects, FTP, Editing MIME
1317
 
@subsubsection Including tar files
1318
 
 
1319
 
@cindex @code{tar}
1320
 
@cindex Unix commands, @code{tar}
1321
 
@cindex MIME, @code{tar}
1322
 
@cindex @code{ftp}
1323
 
@cindex Unix commands, @code{ftp}
1324
 
@cindex MIME, @code{ftp}
1325
 
@findex @code{mh-mhn-compose-external-compressed-tar}
1326
 
 
1327
 
If the remote file (@pxref{FTP}) is a compressed tar file, you can use
1328
 
@kbd{C-c C-m C-t} (@code{mh-mhn-compose-external-compressed-tar}).
1329
 
Then, in addition to retrieving the file via anonymous @emph{ftp}, the
1330
 
file will also be uncompressed and untarred.  You are prompted for the
1331
 
remote host and pathname and the content description.  The pathname
1332
 
should contain at least one @samp{/} (slash), because the pathname is
1333
 
broken up into directory and name components.
1334
 
 
1335
 
@node Other MIME Objects, Sending MIME, Tar, Editing MIME
1336
 
@subsubsection Including other multimedia objects
1337
 
 
1338
 
@cindex images
1339
 
@cindex MIME, images
1340
 
@cindex sound
1341
 
@cindex MIME, sound
1342
 
@cindex video
1343
 
@cindex MIME, video
1344
 
@findex @code{mh-mhn-compose-insertion}
1345
 
 
1346
 
Images, sound, and video can be inserted in your message with the
1347
 
@kbd{C-c C-m C-i} (@code{mh-mhn-compose-insertion}) command.  You are
1348
 
prompted for the filename containing the object, the content type, and a
1349
 
content description of the object.
1350
 
 
1351
 
@node Sending MIME,  , Other MIME Objects, Editing MIME
1352
 
@subsubsection Readying multimedia messages for sending
1353
 
 
1354
 
When you are finished editing a @sc{mime} message, it might look like this:
1355
 
 
1356
 
@example
1357
 
@group
1358
 
@cartouche
1359
 
   3  24Aug  root               received fax files on Wed Aug 24 11:00:13
1360
 
   4+ 24Aug  To:wohler          Test<<This is a test message to get the wh
1361
 
 
1362
 
 
1363
 
 
1364
 
 
1365
 
 
1366
 
--%%-@{+inbox@} 4 msgs (1-4)      (MH-Folder Show)--Bot-------------------
1367
 
To: wohler
1368
 
cc:
1369
 
Subject: Test of MIME
1370
 
--------
1371
 
#@@application/octet-stream [Nonexistent ftp test file] \
1372
 
access-type=anon-ftp; site=berzerk.com; name=panacea.tar.gz; \
1373
 
directory="/pub/"
1374
 
#audio/basic [Test sound bite] /tmp/noise.au
1375
 
--**-@{draft@}      (MH-Letter)--All--------------------------------------
1376
 
 
1377
 
@end cartouche
1378
 
@i{mh-e @sc{mime} draft}
1379
 
@end group
1380
 
@end example
1381
 
 
1382
 
@cindex @code{mhn}
1383
 
@cindex MH commands, @code{mhn}
1384
 
@findex @code{mh-edit-mhn}
1385
 
 
1386
 
The lines added by the previous commands are @code{mhn} directives and
1387
 
need to be converted to @sc{mime} directives before sending.  This is
1388
 
accomplished by the command @kbd{C-c C-e} (@code{mh-edit-mhn}), which
1389
 
runs @code{mhn} on the message.  The following screen shows what those
1390
 
commands look like in full @sc{mime} format.  You can see why mail user
1391
 
agents are usually built to hide these details from the user.
1392
 
 
1393
 
@example
1394
 
@group
1395
 
@cartouche
1396
 
To: wohler
1397
 
cc:
1398
 
Subject: Test of MIME
1399
 
MIME-Version: 1.0
1400
 
Content-Type: multipart/mixed; boundary="----- =_aaaaaaaaaa0"
1401
 
Content-ID: <1623.777796162.0@@newt.com>
1402
 
 
1403
 
------- =_aaaaaaaaaa0
1404
 
Content-Type: message/external-body; access-type="anon-ftp";
1405
 
        site="berzerk.com"; name="panacea.tar.gz"; directory="/pub/"
1406
 
 
1407
 
Content-Type: application/octet-stream
1408
 
Content-ID: <1623.777796162.1@@newt.com>
1409
 
Content-Description: Nonexistent ftp test file
1410
 
 
1411
 
------- =_aaaaaaaaaa0
1412
 
Content-Type: audio/basic
1413
 
Content-ID: <1623.777796162.2@@newt.com>
1414
 
Content-Description: Test sound bite
1415
 
Content-Transfer-Encoding: base64
1416
 
 
1417
 
Q3JlYXRpdmUgVm9pY2UgRmlsZRoaAAoBKREBQh8AgwCAgH9/f35+fn59fX5+fn5+f39/f39/f3
1418
 
f4B/f39/f39/f39/f39/f39+f39+f39/f39/f4B/f39/fn5/f39/f3+Af39/f39/gH9/f39/fn
1419
 
-----@{draft@}      (MH-Letter)--Top--------------------------------------
1420
 
 
1421
 
@end cartouche
1422
 
@i{mh-e @sc{mime} draft ready to send}
1423
 
@end group
1424
 
@end example
1425
 
 
1426
 
@findex @code{mh-revert-mhn-edit}
1427
 
 
1428
 
This action can be undone by running @kbd{C-c C-m C-u}
1429
 
(@code{mh-revert-mhn-edit}).  It does this by reverting to a backup
1430
 
file.  You are prompted to confirm this action, but you can avoid the
1431
 
confirmation by adding an argument (for example, @kbd{C-u C-c C-m C-u}).
1432
 
 
1433
 
@node Sending Message, Killing Draft, Editing MIME, Draft Editing
1434
 
@subsection Sending a Message
1435
 
 
1436
 
@cindex sending mail
1437
 
@findex @code{mh-send-letter}
1438
 
 
1439
 
When you are all through editing a message, you send it with the
1440
 
@kbd{C-c C-c} (@code{mh-send-letter}) command.  You can give an argument
1441
 
(as in @kbd{C-u C-c C-c}) to monitor the first stage of the delivery.
1442
 
 
1443
 
@node Killing Draft,  , Sending Message, Draft Editing
1444
 
@subsection Killing the Draft
1445
 
 
1446
 
@cindex killing draft
1447
 
@findex @code{mh-fully-kill-draft}
1448
 
 
1449
 
If for some reason you are not happy with the draft, you can kill it
1450
 
instead with @kbd{C-c C-q} (@code{mh-fully-kill-draft}).  Emacs then
1451
 
kills the draft buffer and deletes the draft message.
1452
 
 
1453
 
@node Moving Mail, Searching, Draft Editing, Using mh-e
1454
 
@section Moving Your Mail Around
1455
 
 
1456
 
@cindex processing mail
1457
 
 
1458
 
This section covers how messages and folders can be moved about or
1459
 
manipulated.  Messages may be incorporated into your @file{+inbox},
1460
 
deleted, and refiled.  Messages containing @code{shar} or
1461
 
@code{uuencode} output can be stored.  Folders can be visited, sorted,
1462
 
packed, or deleted.  Here's a list of the available commands to do these
1463
 
things:
1464
 
 
1465
 
@c Stephen thinks that ? should be documented here, since it also shows
1466
 
@c which folders a message will be refiled to. XXX
1467
 
 
1468
 
@table @kbd
1469
 
@item i
1470
 
Incorporate new mail into folder (@code{mh-inc-folder}).
1471
 
 
1472
 
@item d
1473
 
Delete message (@code{mh-delete-msg}).
1474
 
 
1475
 
@item C-d
1476
 
Delete message, don't move to next message (@code{mh-delete-msg-no-motion}).
1477
 
 
1478
 
@item M-s
1479
 
Find messages that meet search criteria (@code{mh-search-folder}).
1480
 
 
1481
 
@item o
1482
 
Output (refile) message to folder (@code{mh-refile-msg}).
1483
 
 
1484
 
@item c
1485
 
Copy message to folder (@code{mh-copy-msg}).
1486
 
 
1487
 
@item C-o
1488
 
Output (write) message to file (@code{mh-write-msg-to-file}).
1489
 
 
1490
 
@item !
1491
 
Repeat last output command (@code{mh-refile-or-write-again}).
1492
 
 
1493
 
@item l
1494
 
Print message with @code{lpr} (@code{mh-print-msg}).
1495
 
 
1496
 
@item |
1497
 
Pipe message through shell command (@code{mh-pipe-msg}).
1498
 
 
1499
 
@item M-n
1500
 
Unpack message created with @code{uudecode} or @code{shar}
1501
 
(@code{mh-store-msg}).
1502
 
 
1503
 
@item M-l
1504
 
List all folders (@code{mh-list-folders}).
1505
 
 
1506
 
@item M-f
1507
 
Visit folder (@code{mh-visit-folder}).
1508
 
 
1509
 
@item M-r
1510
 
Regenerate scan lines (@code{mh-rescan-folder}).
1511
 
 
1512
 
@item M-x mh-sort-folder
1513
 
Sort folder.
1514
 
 
1515
 
@item M-p
1516
 
Pack folder (@code{mh-pack-folder}).
1517
 
 
1518
 
@item M-k
1519
 
Remove folder (@code{mh-kill-folder}).
1520
 
 
1521
 
@item x
1522
 
Execute pending refiles and deletes (@code{mh-execute-commands}).
1523
 
 
1524
 
@item u
1525
 
Undo pending refile or delete (@code{mh-undo}).
1526
 
 
1527
 
@item M-u
1528
 
Undo all pending refiles and deletes (@code{mh-undo-folder}).
1529
 
 
1530
 
@item q
1531
 
Quit (@code{mh-quit}).
1532
 
@end table
1533
 
 
1534
 
@menu
1535
 
* Incorporating::               
1536
 
* Deleting::                    
1537
 
* Organizing::                  
1538
 
* Printing::                    
1539
 
* Files and Pipes::             
1540
 
* Finishing Up::                
1541
 
@end menu
1542
 
 
1543
 
@node Incorporating, Deleting, Moving Mail, Moving Mail
1544
 
@subsection Incorporating Your Mail
1545
 
 
1546
 
@cindex incorporating
1547
 
@findex @code{mh-inc-folder}
1548
 
 
1549
 
If at any time you receive new mail, incorporate the new mail into your
1550
 
@samp{+inbox} buffer with @kbd{i} (@code{mh-inc-folder}).  Note that
1551
 
@kbd{i} will display the @samp{+inbox} buffer, even if there isn't any
1552
 
new mail.  You can incorporate mail from any file into the current
1553
 
folder by specifying a prefix argument; you'll be prompted for the name
1554
 
of the file to use (for example, @kbd{C-u i ~/mbox @key{RET}}).
1555
 
 
1556
 
@cindex Emacs, notification of new mail
1557
 
@cindex notification of new mail
1558
 
@cindex new mail
1559
 
@cindex @file{.emacs}
1560
 
@cindex files, @file{.emacs}
1561
 
 
1562
 
Emacs can notify you when you have new mail by displaying @samp{Mail} in
1563
 
the mode line.  To enable this behavior, and to have a clock in the mode
1564
 
line besides, add the following to @file{~/.emacs}:
1565
 
 
1566
 
@findex @code{display-time}
1567
 
 
1568
 
@lisp
1569
 
(display-time)
1570
 
@end lisp
1571
 
 
1572
 
@node Deleting, Organizing, Incorporating, Moving Mail
1573
 
@subsection Deleting Your Mail
1574
 
 
1575
 
@cindex deleting
1576
 
@findex @code{mh-delete-msg}
1577
 
@findex @code{mh-delete-msg-no-motion}
1578
 
 
1579
 
To mark a message for deletion, use the @kbd{d} (@code{mh-delete-msg})
1580
 
command.  A @samp{D} is placed by the message in the scan window, and
1581
 
the next message is displayed.  If the previous command had been
1582
 
@kbd{p}, then the next message displayed is the message previous to the
1583
 
message just deleted.  If you specify a prefix argument, you will be
1584
 
prompted for a sequence (@pxref{Sequences}) to delete (for example,
1585
 
@kbd{C-u d frombob RET}).  The @kbd{x} command actually carries out the
1586
 
deletion (@pxref{Finishing Up}).  @kbd{C-d}
1587
 
(@code{mh-delete-msg-no-motion}) marks the message for deletion but
1588
 
leaves the cursor at the current message in case you wish to perform
1589
 
other operations on the message.
1590
 
 
1591
 
@node Organizing, Printing, Deleting, Moving Mail
1592
 
@subsection Organizing Your Mail with Folders
1593
 
 
1594
 
@cindex using folders
1595
 
@cindex @code{folder}
1596
 
@cindex MH commands, @code{folder}
1597
 
@cindex @code{refile}
1598
 
@cindex MH commands, @code{refile}
1599
 
@findex @code{mh-refile-msg}
1600
 
 
1601
 
mh-e has analogies for each of the MH @code{folder} and @code{refile}
1602
 
commands.  To refile a message in another folder, use the @kbd{o}
1603
 
(@code{mh-refile-msg}) (mnemonic: ``output'') command.  You are prompted
1604
 
for the folder name.
1605
 
 
1606
 
@findex @code{mh-refile-or-write-again}
1607
 
 
1608
 
If you are refiling several messages into the same folder, you can use
1609
 
the @kbd{!} (@code{mh-refile-or-write-again}) command to repeat the last
1610
 
refile or write (see the description of @kbd{C-o} in @ref{Files and
1611
 
Pipes}).  Or, place the messages into a sequence (@ref{Sequences}) and
1612
 
specify a prefix argument to @kbd{o}, in which case you'll be prompted
1613
 
for the name of the sequence (for example, @kbd{C-u o search RET}).
1614
 
 
1615
 
@findex @code{mh-copy-msg}
1616
 
 
1617
 
If you wish to copy a message to another folder, you can use the @kbd{c}
1618
 
(@code{mh-copy-msg}) command (see the @code{-link} argument to
1619
 
@code{refile}(1)).  You are prompted for a folder, and you can specify a
1620
 
prefix argument if you want to copy a sequence into another folder.  In
1621
 
this case, you are then prompted for the sequence.  Note that unlike the
1622
 
@kbd{o} command, the copy takes place immediately.  The original copy
1623
 
remains in the current folder.
1624
 
 
1625
 
@findex @code{mh-visit-folder}
1626
 
 
1627
 
When you want to read the messages that you have refiled into folders,
1628
 
use the @kbd{M-f} (@code{mh-visit-folder}) command to visit the folder.
1629
 
You are prompted for the folder name.
1630
 
 
1631
 
@findex @code{mh-list-folders}
1632
 
@findex @code{mh-kill-folder}
1633
 
@findex @code{mh-visit-folder}
1634
 
@findex @code{mh-sort-folder}
1635
 
@findex @code{mh-pack-folder}
1636
 
@findex @code{mh-rescan-folder}
1637
 
 
1638
 
Other commands you can perform on folders include: @kbd{M-l}
1639
 
(@code{mh-list-folders}), to list all the folders in your mail
1640
 
directory; @kbd{M-k} (@code{mh-kill-folder}), to remove a folder;
1641
 
@kbd{M-x mh-sort-folder}, to sort the messages by date (see
1642
 
@code{sortm}(1) to see how to sort by other criteria); @kbd{M-p}
1643
 
(@code{mh-pack-folder}), to pack a folder, removing gaps from the
1644
 
numbering sequence; and @kbd{M-r} (@code{mh-rescan-folder}), to rescan
1645
 
the folder, which is useful to grab all messages in your @file{+inbox}
1646
 
after processing your new mail for the first time.  If you don't want to
1647
 
rescan the entire folder, give @kbd{M-r} or @kbd{M-p} a prefix argument
1648
 
and you'll be prompted for a range of messages to display (for instance,
1649
 
@kbd{C-u M-r last:50 RET}).
1650
 
 
1651
 
@node Printing, Files and Pipes, Organizing, Moving Mail
1652
 
@subsection Printing Your Mail
1653
 
 
1654
 
@cindex printing
1655
 
@cindex @code{mhl}
1656
 
@cindex MH commands, @code{mhl}
1657
 
@cindex @code{lpr}
1658
 
@cindex Unix commands, @code{lpr}
1659
 
@findex @code{mh-print-msg}
1660
 
 
1661
 
Printing mail is simple.  Enter @kbd{l} (@code{mh-print-msg}) (for
1662
 
@i{l}ine printer or @i{l}pr).  The message is formatted with @code{mhl}
1663
 
and printed with the @code{lpr} command.  You can print all the messages
1664
 
in a sequence by specifying a prefix argument, in which case you are
1665
 
prompted for the name of the sequence (as in @kbd{C-u l frombob RET}).
1666
 
 
1667
 
@node Files and Pipes, Finishing Up, Printing, Moving Mail
1668
 
@subsection Files and Pipes
1669
 
 
1670
 
@cindex using files
1671
 
@cindex using pipes
1672
 
@findex @code{mh-write-msg-to-file}
1673
 
 
1674
 
mh-e does offer a couple of commands that are not a part of MH@.  The
1675
 
first one, @kbd{C-o} (@code{mh-write-msg-to-file}), writes a message to
1676
 
a file (think of the @kbd{o} as in "output").  You are prompted for the
1677
 
filename.  If the file already exists, the message is appended to it.
1678
 
You can also write the message to the file without the header by
1679
 
specifying a prefix argument (such as @kbd{C-u C-o /tmp/foobar RET}).
1680
 
Subsequent writes to the same file can be made with the @kbd{!}
1681
 
command.
1682
 
 
1683
 
@findex @code{mh-pipe-msg}
1684
 
 
1685
 
You can also pipe the message through a Unix shell command with the
1686
 
@kbd{|} (@code{mh-pipe-msg}) command.  You are prompted for the
1687
 
Unix command through which you wish to run your message.  If you
1688
 
give an argument to this command, the message header is included in the
1689
 
text passed to the command (the contrived example @kbd{C-u | lpr}
1690
 
would be done with the @kbd{l} command instead).
1691
 
 
1692
 
@cindex @code{shar}
1693
 
@cindex Unix commands, @code{shar}
1694
 
@cindex @code{uuencode}
1695
 
@cindex Unix commands, @code{uuencode}
1696
 
@findex @code{mh-store-msg}
1697
 
 
1698
 
If the message is a shell archive @code{shar} or has been run through
1699
 
@code{uuencode} use @kbd{M-n} (@code{mh-store-msg}) to extract the body
1700
 
of the message.  The default directory for extraction is the current
1701
 
directory, and you have a chance to specify a different extraction
1702
 
directory.  The next time you use this command, the default directory is
1703
 
the last directory you used.
1704
 
 
1705
 
@node Finishing Up,  , Files and Pipes, Moving Mail
1706
 
@subsection Finishing Up
1707
 
 
1708
 
@cindex expunging refiles and deletes
1709
 
@findex @code{mh-undo}
1710
 
@findex @code{mh-undo-folder}
1711
 
 
1712
 
If you've deleted a message or refiled it, but changed your mind, you
1713
 
can cancel the action before you've executed it.  Use @kbd{u}
1714
 
(@code{mh-undo}) to undo a refile on or deletion of a single message.
1715
 
You can also undo refiles and deletes for messages that belong to a
1716
 
given sequence by specifying a prefix argument.  You'll be prompted for
1717
 
the name of the sequence (as in @kbd{C-u u frombob RET}).
1718
 
Alternatively, you can use @kbd{M-u} (@code{mh-undo-folder}) to undo all
1719
 
refiles or deletes in the current folder.
1720
 
 
1721
 
@findex @code{mh-execute-commands}
1722
 
 
1723
 
If you've marked messages to be deleted or refiled and you want to go
1724
 
ahead and delete or refile the messages, use @kbd{x}
1725
 
(@code{mh-execute-commands}).  Many mh-e commands that may affect the
1726
 
numbering of the messages (such as @kbd{M-r} or @kbd{M-p}) will ask if you
1727
 
want to process refiles or deletes first and then either run @kbd{x} for
1728
 
you or undo the pending refiles and deletes, which are lost.
1729
 
 
1730
 
@findex @code{mh-rmail}
1731
 
@findex @code{mh-quit}
1732
 
 
1733
 
When you want to quit using mh-e and go back to editing, you can use the
1734
 
@kbd{q} (@code{mh-quit}) command.  This buries the buffers of the
1735
 
current mh-e folder and restores the buffers that were present when you
1736
 
first ran @kbd{M-x mh-rmail}.  You can later restore your mh-e session
1737
 
by selecting the @samp{+inbox} buffer or by running @kbd{M-x mh-rmail}
1738
 
again.
1739
 
 
1740
 
@node Searching, Sequences, Moving Mail, Using mh-e
1741
 
@section Searching Through Messages
1742
 
 
1743
 
@cindex searching
1744
 
@findex @code{mh-search-folder}
1745
 
 
1746
 
You can search a folder for messages to or from a particular person or
1747
 
about a particular subject.  In fact, you can also search for messages
1748
 
containing selected strings in any arbitrary header field or any string
1749
 
found within the messages.  Use the @kbd{M-s} (@code{mh-search-folder})
1750
 
command.  You are first prompted for the name of the folder to search
1751
 
and then placed in the following buffer in MH-Pick mode:
1752
 
 
1753
 
@example
1754
 
@group
1755
 
@cartouche
1756
 
From: #
1757
 
To:
1758
 
Cc:
1759
 
Date:
1760
 
Subject:
1761
 
--------
1762
 
 
1763
 
 
1764
 
 
1765
 
 
1766
 
 
1767
 
 
1768
 
 
1769
 
 
1770
 
 
1771
 
--**-Emacs: pick-pattern    (MH-Pick)------All----------------------------
1772
 
 
1773
 
@end cartouche
1774
 
@i{Pick window}
1775
 
@end group
1776
 
@end example
1777
 
 
1778
 
@cindex @code{pick}
1779
 
@cindex MH commands, @code{pick}
1780
 
 
1781
 
Edit this template by entering your search criteria in an appropriate
1782
 
header field that is already there, or create a new field yourself.  If
1783
 
the string you're looking for could be anywhere in a message, then place
1784
 
the string underneath the row of dashes.  The @kbd{M-s} command uses the
1785
 
MH command @code{pick} to do the real work, so read @code{pick}(1) to
1786
 
find out more about how to enter the criteria.
1787
 
 
1788
 
There are no semantics associated with the search criteria---they are
1789
 
simply treated as strings.  Case is ignored when all lowercase is used,
1790
 
and regular expressions (a la @code{ed}) are available.  It is all right
1791
 
to specify several search criteria.  What happens then is that a logical
1792
 
@emph{and} of the various fields is performed.  If you prefer a logical
1793
 
@emph{or} operation, run @kbd{M-s} multiple times.
1794
 
 
1795
 
As an example, let's say that we want to find messages from Ginnean
1796
 
about horseback riding in the Kosciusko National Park (Australia) during
1797
 
January, 1994.  Normally we would start with a broad search and narrow
1798
 
it down if necessary to produce a manageable amount of data, but we'll
1799
 
cut to the chase and create a fairly restrictive set of criteria as
1800
 
follows:
1801
 
 
1802
 
@example
1803
 
@group
1804
 
From: ginnean
1805
 
To:
1806
 
Cc:
1807
 
Date: Jan 1994
1808
 
Subject: horse.*kosciusko
1809
 
--------
1810
 
@end group
1811
 
@end example
1812
 
 
1813
 
@findex @code{mh-to-field}
1814
 
 
1815
 
As with MH-Letter mode, MH-Pick provides commands like
1816
 
@kbd{C-c C-f C-t} to help you fill in the blanks.
1817
 
 
1818
 
@table @kbd
1819
 
@item C-c C-f C-t
1820
 
Move to @samp{To:} header field (@code{mh-to-field}).
1821
 
 
1822
 
@item C-c C-f C-c
1823
 
Move to @samp{cc:} header field (@code{mh-to-field}).
1824
 
 
1825
 
@item C-c C-f C-s
1826
 
Move to @samp{Subject:} header field (@code{mh-to-field}).
1827
 
 
1828
 
@item C-c C-f C-f
1829
 
Move to @samp{From:} header field (@code{mh-to-field}).
1830
 
 
1831
 
@item C-c C-f C-b
1832
 
Move to @samp{Bcc:} header field (@code{mh-to-field}).
1833
 
 
1834
 
@item C-c C-f C-f
1835
 
Move to @samp{Fcc:} header field (@code{mh-to-field}).
1836
 
 
1837
 
@item C-c C-f C-d
1838
 
Move to @samp{Dcc:} header field (@code{mh-to-field}).
1839
 
 
1840
 
@item C-c C-c
1841
 
Execute the search (@code{mh-do-pick-search}).
1842
 
@end table
1843
 
 
1844
 
@findex @code{mh-do-pick-search}
1845
 
 
1846
 
To perform the search, type @kbd{C-c C-c} (@code{mh-do-pick-search}).
1847
 
The selected messages are placed in the @i{search} sequence, which you
1848
 
can use later in forwarding (@pxref{Forwarding}), printing
1849
 
(@pxref{Printing}), or narrowing your field of view (@pxref{Sequences}).
1850
 
Subsequent searches are appended to the @i{search} sequence.  If,
1851
 
however, you wish to start with a clean slate, first delete the
1852
 
@i{search} sequence (how to do this is discussed in @ref{Sequences}).
1853
 
 
1854
 
@cindex MH-Folder mode
1855
 
@cindex modes, MH-Folder
1856
 
 
1857
 
If you're searching in a folder that is already displayed in a
1858
 
MH-Folder buffer, only those messages contained in the buffer are
1859
 
used for the search.  Therefore, if you want to search in all messages,
1860
 
first kill the folder's buffer with @kbd{C-x k} or scan the entire
1861
 
folder with @kbd{M-r}.
1862
 
 
1863
 
@node Sequences, Miscellaneous, Searching, Using mh-e
1864
 
@section Using Sequences
1865
 
 
1866
 
@cindex sequences
1867
 
 
1868
 
For the whole scoop on MH sequences, refer to @code{mh-sequence}(5).  As
1869
 
you've read, several of the mh-e commands can operate on a sequence,
1870
 
which is a shorthand for a range or group of messages.  For example, you
1871
 
might want to forward several messages to a friend or colleague.  Here's
1872
 
how to manipulate sequences.
1873
 
 
1874
 
@table @kbd
1875
 
@item %
1876
 
Put message in a sequence (@code{mh-put-msg-in-seq}).
1877
 
 
1878
 
@item ?
1879
 
Display sequences that message belongs to (@code{mh-msg-is-in-seq}).
1880
 
 
1881
 
@item M-q
1882
 
List all sequences in folder (@code{mh-list-sequences}).
1883
 
 
1884
 
@item M-%
1885
 
Remove message from sequence (@code{mh-delete-msg-from-seq}).
1886
 
 
1887
 
@item M-#
1888
 
Delete sequence (@code{mh-delete-seq}).
1889
 
 
1890
 
@item C-x n
1891
 
Restrict display to messages in sequence (@code{mh-narrow-to-seq}).
1892
 
 
1893
 
@item C-x w
1894
 
Remove restriction; display all messages (@code{mh-widen}).
1895
 
 
1896
 
@item M-x mh-update-sequences
1897
 
Push mh-e's state out to MH@.
1898
 
@end table
1899
 
 
1900
 
@cindex @code{pick}
1901
 
@cindex MH commands, @code{pick}
1902
 
@findex @code{mh-put-msg-in-seq}
1903
 
 
1904
 
To place a message in a sequence, use @kbd{%} (@code{mh-put-msg-in-seq})
1905
 
to do it manually, or use the MH command @code{pick} or the mh-e version
1906
 
of @code{pick} (@ref{Searching}) which create a sequence automatically.
1907
 
Give @kbd{%} a prefix argument and you can add all the messages in one
1908
 
sequence to another sequence (for example, @kbd{C-u % SourceSequence
1909
 
RET}).
1910
 
 
1911
 
@cindex MH-Folder mode
1912
 
@cindex modes, MH-Folder
1913
 
@findex @code{mh-narrow-to-seq}
1914
 
@findex @code{mh-widen}
1915
 
 
1916
 
Once you've placed some messages in a sequence, you may wish to narrow
1917
 
the field of view to just those messages in the sequence you've created.
1918
 
To do this, use @kbd{C-x n} (@code{mh-narrow-to-seq}).  You are prompted
1919
 
for the name of the sequence.  What this does is show only those
1920
 
messages that are in the selected sequence in the MH-Folder buffer.  In
1921
 
addition, it limits further mh-e searches to just those messages.  When
1922
 
you want to widen the view to all your messages again, use @kbd{C-x w}
1923
 
(@code{mh-widen}).
1924
 
 
1925
 
@findex @code{mh-msg-is-in-seq}
1926
 
@findex @code{mh-list-sequences}
1927
 
 
1928
 
You can see which sequences a message is in with the @kbd{?}
1929
 
(@code{mh-msg-is-in-seq}) command.
1930
 
@c Doesn't work:
1931
 
@c use a prefix argument to query a
1932
 
@c message other than the current one (as in @kbd{C-u ? 42 RET}). XXX
1933
 
Or, you can list all sequences in a selected folder (default is current
1934
 
folder) with @kbd{M-q} (@code{mh-list-sequences}).
1935
 
 
1936
 
@findex @code{mh-delete-msg-from-seq}
1937
 
@findex @code{mh-delete-seq}
1938
 
 
1939
 
If you want to remove a message from a sequence, use @kbd{M-%}
1940
 
(@code{mh-delete-msg-from-seq}), and if you want to delete an entire
1941
 
sequence, use @kbd{M-#} (@code{mh-delete-seq}).  In the latter case you
1942
 
are prompted for the sequence to delete.  Note that this deletes only
1943
 
the sequence, not the messages in the sequence.  If you want to delete
1944
 
the messages, use @kbd{C-u d} (see @ref{Deleting} above).
1945
 
 
1946
 
@cindex @code{mark}
1947
 
@cindex MH commands, @code{mark}
1948
 
 
1949
 
@findex @code{mh-update-sequences}
1950
 
 
1951
 
Two sequences are maintained internally by mh-e and pushed out to MH
1952
 
when you type either the @kbd{x} or @kbd{q} command.  They are the
1953
 
sequence specified by your @samp{Unseen-Sequence:} profile entry and
1954
 
@i{cur}.  However, you can also just update MH's state with the command
1955
 
@kbd{M-x mh-update-sequences}.  See @ref{Customizing Viewing} for an
1956
 
example of how this command might be used.
1957
 
 
1958
 
With the exceptions of @kbd{C-x n} and @kbd{C-x w}, the underlying MH
1959
 
command dealing with sequences is @code{mark}.
1960
 
 
1961
 
@node Miscellaneous,  , Sequences, Using mh-e
1962
 
@section Miscellaneous Commands
1963
 
 
1964
 
@findex @code{mh-version}
1965
 
 
1966
 
One other command worth noting is @kbd{M-x mh-version}. You can
1967
 
compare the version this command prints to the latest release
1968
 
(@pxref{Getting mh-e}). The output of @kbd{M-x mh-version} should
1969
 
always be included with any bug report you submit (@pxref{Bug Reports}).
1970
 
 
1971
 
@node    Customizing mh-e, Odds and Ends, Using mh-e, Top
1972
 
@chapter Customizing mh-e
1973
 
 
1974
 
Until now, we've talked about the mh-e commands as they work ``out of the
1975
 
box.''  Of course, it is also possible to reconfigure mh-e 
1976
 
to fit the needs of even the most demanding user.
1977
 
The following sections describe all of the
1978
 
customization variables, show the defaults, and make recommendations for
1979
 
customization.  The outline of this chapter is identical to that of
1980
 
@ref{Using mh-e}, to make it easier to find the variables you'd need to
1981
 
modify to affect a particular command.
1982
 
 
1983
 
However, when customizing your mail environment, first try to change
1984
 
what you want in MH, and only change mh-e if changing MH is not
1985
 
possible.  That way you will get the same behavior inside and outside
1986
 
GNU Emacs.  Note that mh-e does not provide hooks for customizations
1987
 
that can be done in MH; this omission is intentional.
1988
 
 
1989
 
@cindex @file{.emacs}
1990
 
@cindex files, @file{.emacs}
1991
 
 
1992
 
Many string or integer variables are easy enough to modify using Emacs
1993
 
Lisp.  Any such modifications should be placed in a file called
1994
 
@file{.emacs} in your home directory (that is, @file{~/.emacs}).  For
1995
 
example, to modify the variable that controls printing, you could add:
1996
 
 
1997
 
@vindex @code{mh-lpr-command-format}, example
1998
 
 
1999
 
@lisp
2000
 
(setq mh-lpr-command-format "nenscript -G -r -2 -i'%s'")
2001
 
@end lisp
2002
 
 
2003
 
@ref{Customizing Printing} talks more about this variable.
2004
 
 
2005
 
@cindex setting variables
2006
 
@cindex Emacs, setting variables
2007
 
 
2008
 
Variables can also hold Boolean values.  In Emacs Lisp, the Boolean
2009
 
values are @code{nil}, which means false, and @code{t}, which means true.
2010
 
Usually, variables are turned off by setting their value to @code{nil}, as
2011
 
in
2012
 
 
2013
 
@vindex @code{mh-bury-show-buffer}, example
2014
 
 
2015
 
@lisp
2016
 
(setq mh-bury-show-buffer nil)
2017
 
@end lisp
2018
 
 
2019
 
which keeps the MH-Show buffer at the top of the buffer stack.
2020
 
To turn a variable on, you use
2021
 
 
2022
 
@lisp
2023
 
(setq mh-bury-show-buffer t)
2024
 
@end lisp
2025
 
 
2026
 
which places the MH-Show buffer at the bottom of the buffer
2027
 
stack.  However, the text says to turn on a variable by setting it to a
2028
 
@emph{non-@code{nil}} value, because sometimes values other than @code{t} are
2029
 
meaningful (for example, see @code{mhl-formfile}, described in
2030
 
@ref{Customizing Viewing}).  Other variables, such as hooks, involve a
2031
 
little more Emacs Lisp programming expertise.
2032
 
 
2033
 
You can also ``preview'' the effects of changing variables before
2034
 
committing the changes to @file{~/.emacs}.  Variables can be changed in
2035
 
the current Emacs session by using @kbd{M-x set-variable}.
2036
 
 
2037
 
@c XXX Stephen says: would be easier to just call them functions, which
2038
 
@c you mostly do.
2039
 
In general, @dfn{commands} in this text refer to Emacs Lisp functions.
2040
 
Programs outside of Emacs are specifically called MH commands, shell
2041
 
commands, or Unix commands.
2042
 
 
2043
 
@cindex Emacs, Emacs Lisp manual
2044
 
@cindex Emacs, online help
2045
 
@cindex online help
2046
 
@cindex Emacs, info
2047
 
@cindex info
2048
 
 
2049
 
I hope I've included enough examples here to get you well on your way.
2050
 
If you want to explore Emacs Lisp further, a programming manual does
2051
 
exist,
2052
 
@c Yes, some of the stuff in the following sections is redundant, but
2053
 
@c TeX barfs if the @ifs are inside the @footnote.
2054
 
@iftex
2055
 
@footnote{The @cite{GNU Emacs Lisp Reference Manual} may be available
2056
 
online in the Info system by typing @kbd{C-h i m Emacs Lisp RET}.  If
2057
 
not, you can order a printed manual, which has the desirable side-effect
2058
 
of helping to support the Free Software Foundation which made all this
2059
 
great software available.  You can find an order form by running
2060
 
@kbd{C-h C-d}, or you can request an order form from
2061
 
@i{gnu@@gnu.org}.}
2062
 
@end iftex
2063
 
@ifinfo
2064
 
@footnote{Perhaps you can find the online version of @ref{Top, The GNU
2065
 
Emacs Lisp Reference Manual, , elisp, GNU Emacs Lisp Reference Manual}.
2066
 
If not, you can order a printed manual, which has the desirable
2067
 
side-effect of helping to support the Free Software Foundation which
2068
 
made all this great software available.  You can find an order form by
2069
 
running @kbd{C-h C-d}, or you can request an order form from
2070
 
@i{gnu@@gnu.org}.}
2071
 
@end ifinfo
2072
 
and you can look at the code itself for examples.  Look in the Emacs
2073
 
Lisp directory on your system (such as @file{/usr/local/lib/emacs/lisp})
2074
 
and find all the @file{mh-*.el} files there.  When calling mh-e and
2075
 
other Emacs Lisp functions directly from Emacs Lisp code, you'll need to
2076
 
know the correct arguments.  Use the online help for this.  For example,
2077
 
try @kbd{C-h f mh-execute-commands RET}.  If you write your own
2078
 
functions, please do not prefix your symbols (variables and functions)
2079
 
with @code{mh-}.  This prefix is reserved for the mh-e package.  To
2080
 
avoid conflicts with existing mh-e symbols, use a prefix like @code{my-}
2081
 
or your initials.
2082
 
 
2083
 
@menu
2084
 
* Customizing Reading::         
2085
 
* Customizing Sending::         
2086
 
* Customizing Draft Editing::   
2087
 
* Customizing Moving Mail::     
2088
 
* Customizing Searching::       
2089
 
@end menu
2090
 
 
2091
 
@node Customizing Reading, Customizing Sending, Customizing mh-e, Customizing mh-e
2092
 
@section Reading Your Mail
2093
 
 
2094
 
@cindex reading mail
2095
 
@cindex @file{.emacs}
2096
 
@cindex files, @file{.emacs}
2097
 
 
2098
 
I'll start out by including a function that I use as a front end to
2099
 
mh-e.  @footnote{Stephen Gildea's favorite binding is
2100
 
@kbd{(global-set-key "\C-cr" 'mh-rmail)}.} It toggles between your
2101
 
working window configuration, which may be quite involved---windows
2102
 
filled with source, compilation output, man pages, and other
2103
 
documentation---and your mh-e window configuration.  Like the rest of
2104
 
the customization described in this chapter, simply add the following
2105
 
code to @file{~/.emacs}.  Don't be intimidated by the size of this
2106
 
example; most customizations are only one line.
2107
 
 
2108
 
@iftex
2109
 
@filbreak
2110
 
@end iftex
2111
 
 
2112
 
@findex @code{mh-rmail}, example
2113
 
 
2114
 
@lisp
2115
 
@group
2116
 
@i{Starting mh-e}
2117
 
 
2118
 
(defvar my-mh-screen-saved nil
2119
 
  "Set to non-@code{nil} when mh-e window configuration shown.")
2120
 
(defvar my-normal-screen nil "Normal window configuration.")
2121
 
(defvar my-mh-screen nil "mh-e window configuration.")
2122
 
 
2123
 
(defun my-mh-rmail (&optional arg)
2124
 
  "Toggle between mh-e and normal screen configurations.
2125
 
With non-@code{nil} or prefix argument, @i{inc} mailbox as well
2126
 
when going into mail."
2127
 
  (interactive "P")                 ; @r{user callable function, P=prefix arg}
2128
 
  (setq my-mh-screen-saved          ; @r{save state}
2129
 
        (cond
2130
 
         ;; @r{Bring up mh-e screen if arg or normal window configuration.}
2131
 
         ;; @r{If arg or +inbox buffer doesn't exist, run mh-rmail.}
2132
 
         ((or arg (null my-mh-screen-saved))
2133
 
          (setq my-normal-screen (current-window-configuration))
2134
 
          (if (or arg (null (get-buffer "+inbox")))
2135
 
              (mh-rmail)
2136
 
            (set-window-configuration my-mh-screen))
2137
 
          t)                        ; @r{set my-mh-screen-saved to @code{t}}
2138
 
         ;; @r{Otherwise, save mh-e screen and restore normal screen.}
2139
 
         (t
2140
 
          (setq my-mh-screen (current-window-configuration))
2141
 
          (set-window-configuration my-normal-screen)
2142
 
          nil))))                   ; @r{set my-mh-screen-saved to nil}
2143
 
 
2144
 
(global-set-key "\C-x\r" 'my-mh-rmail)  ;@r{ call with C-x RET}
2145
 
@end group
2146
 
@end lisp
2147
 
 
2148
 
If you type an argument (@kbd{C-u}) or if @code{my-mh-screen-saved}
2149
 
is @code{nil} (meaning a non-mh-e window configuration), the current window
2150
 
configuration is saved, either +inbox is displayed or @code{mh-rmail} is
2151
 
run, and the mh-e window configuration is shown.  Otherwise, the mh-e
2152
 
window configuration is saved and the original configuration is
2153
 
displayed.
2154
 
 
2155
 
Now to configure mh-e.  The following table lists general mh-e variables
2156
 
and variables that are used while reading mail.
2157
 
@c XXX Seth wishes the descriptions to be more parallel.  That is,
2158
 
@c some are actions, and some are objects. Hmmm.
2159
 
 
2160
 
@table @code
2161
 
@item mh-progs
2162
 
Directory containing MH programs (default: dynamic).
2163
 
 
2164
 
@item mh-lib
2165
 
Directory containing MH support files and programs (default: dynamic).
2166
 
 
2167
 
@item mh-do-not-confirm
2168
 
Don't confirm on non-reversible commands (default: @code{nil}).
2169
 
 
2170
 
@item mh-summary-height
2171
 
Number of scan lines to show (includes mode line) (default: 4).
2172
 
 
2173
 
@item mh-folder-mode-hook
2174
 
Functions to run in MH-Folder mode (default: @code{nil}).
2175
 
 
2176
 
@item mh-clean-message-header
2177
 
Remove extraneous headers (default: @code{nil}).
2178
 
 
2179
 
@item mh-invisible-headers
2180
 
Headers to hide (default: @samp{"^Received: \\| ^Message-Id: \\|
2181
 
^Remailed-\\| ^Via: \\| ^Mail-from: \\| ^Return-Path: \\| ^In-Reply-To:
2182
 
\\| ^Resent-"}).
2183
 
 
2184
 
@item mh-visible-headers
2185
 
Headers to display (default: @code{nil}).
2186
 
 
2187
 
@item mhl-formfile
2188
 
Format file for @code{mhl} (default: @code{nil}).
2189
 
 
2190
 
@item mh-show-hook
2191
 
Functions to run when showing message (default: @code{nil}).
2192
 
 
2193
 
@item mh-show-mode-hook
2194
 
Functions to run when showing message (default: @code{nil}).
2195
 
 
2196
 
@item mh-bury-show-buffer
2197
 
Leave show buffer at bottom of stack (default: @code{t}).
2198
 
 
2199
 
@item mh-show-buffer-mode-line-buffer-id
2200
 
Name of show buffer in mode line (default: @samp{"@{show-%s@} %d"}).
2201
 
@end table
2202
 
 
2203
 
@vindex @code{mh-progs}
2204
 
@vindex @code{mh-lib}
2205
 
 
2206
 
The two variables @code{mh-progs} and @code{mh-lib} are used to tell
2207
 
mh-e where the MH programs and supporting files are kept, respectively.
2208
 
mh-e does try to figure out where they are kept for itself by looking in
2209
 
common places and in the user's @samp{PATH} environment variable, but if
2210
 
it cannot find the directories, or finds the wrong ones, you should set
2211
 
these variables.  The name of the directory should be placed in double
2212
 
quotes, and there should be a
2213
 
trailing slash (@samp{/}).  See the example in @ref{Getting Started}.
2214
 
 
2215
 
@vindex @code{mh-do-not-confirm}
2216
 
@findex @code{mh-kill-folder}
2217
 
 
2218
 
If you never make mistakes, and you do not like confirmations for your
2219
 
actions, you can set @code{mh-do-not-confirm} to a non-@code{nil} value to
2220
 
disable confirmation for unrecoverable commands such as @kbd{M-k}
2221
 
(@code{mh-kill-folder}) and @kbd{M-u} (@code{mh-undo-folder}).  Here's
2222
 
how you set boolean values:
2223
 
 
2224
 
@lisp
2225
 
(setq mh-do-not-confirm t)
2226
 
@end lisp
2227
 
 
2228
 
@vindex @code{mh-summary-height}
2229
 
@cindex MH-Folder mode
2230
 
@cindex modes, MH-Folder
2231
 
 
2232
 
@c Prevent page break between paragraph and example.
2233
 
@need 2000
2234
 
The variable @code{mh-summary-height} controls the number of scan lines
2235
 
displayed in the MH-Folder window, including the mode line.  The
2236
 
default value of 4 means that 3 scan lines are displayed.  Here's how
2237
 
you set numerical values:
2238
 
 
2239
 
@lisp
2240
 
(setq mh-summary-height 2)              ; @r{only show the current scan line}
2241
 
@end lisp
2242
 
 
2243
 
@vindex @code{mh-bury-show-buffer}
2244
 
@cindex MH-Folder mode
2245
 
@cindex modes, MH-Folder
2246
 
 
2247
 
Normally the buffer for displaying messages is buried at the bottom at
2248
 
the buffer stack.  You may wish to disable this feature by setting
2249
 
@code{mh-bury-show-buffer} to @code{nil}.  One advantage of not burying the
2250
 
show buffer is that one can delete the show buffer more easily in an
2251
 
electric buffer list because of its proximity to its associated
2252
 
MH-Folder buffer.  Try running @kbd{M-x electric-buffer-list} to
2253
 
see what I mean.
2254
 
 
2255
 
@vindex @code{mh-folder-mode-hook}
2256
 
@cindex MH-Folder mode
2257
 
@cindex modes, MH-Folder
2258
 
 
2259
 
The hook @code{mh-folder-mode-hook} is called when a new folder is
2260
 
created with MH-Folder mode.  This could be used to set your own
2261
 
key bindings, for example:
2262
 
 
2263
 
@vindex @code{mh-folder-mode-hook}, example
2264
 
 
2265
 
@lisp
2266
 
@group
2267
 
@i{Create additional key bindings via mh-folder-mode-hook}
2268
 
 
2269
 
(defvar my-mh-init-done nil "Non-@code{nil} when one-time mh-e settings made.")
2270
 
 
2271
 
(defun my-mh-folder-mode-hook ()
2272
 
  "Hook to set key bindings in MH-Folder mode."
2273
 
  (if (not my-mh-init-done)             ; @r{only need to bind the keys once }
2274
 
      (progn
2275
 
        (local-set-key "/" 'search-msg)
2276
 
        (local-set-key "b" 'mh-burst-digest)    ; @r{better use of @kbd{b}}
2277
 
        (setq my-mh-init-done t))))
2278
 
 
2279
 
;;; @r{Emacs 19}
2280
 
(add-hook 'mh-folder-mode-hook 'my-mh-folder-mode-hook)
2281
 
;;; @r{Emacs 18}
2282
 
;;;   @r{(setq mh-folder-mode-hook (cons 'my-mh-folder-mode-hook}
2283
 
;;;                               @r{mh-folder-mode-hook))}
2284
 
 
2285
 
(defun search-msg ()
2286
 
  "Search for a regexp in the current message."
2287
 
  (interactive)                         ; @r{user function}
2288
 
  (save-window-excursion
2289
 
    (other-window 1)                    ; @r{go to next window}
2290
 
    (isearch-forward-regexp)))          ; @r{string search; hit return (ESC}
2291
 
                                        ;   @r{in Emacs 18) when done}
2292
 
@end group
2293
 
@end lisp
2294
 
 
2295
 
@menu
2296
 
* Customizing Viewing::         
2297
 
* Customizing Moving Around::   
2298
 
@end menu
2299
 
 
2300
 
@node Customizing Viewing, Customizing Moving Around, Customizing Reading, Customizing Reading
2301
 
@subsection Viewing Your Mail
2302
 
 
2303
 
@vindex @code{mh-clean-message-header}
2304
 
@vindex @code{mh-invisible-headers}
2305
 
@vindex @code{mh-visible-headers}
2306
 
 
2307
 
Several variables control what displayed messages look like.  Normally
2308
 
messages are delivered with a handful of uninteresting header fields.
2309
 
You can make them go away by setting @code{mh-clean-message-header} to a
2310
 
non-@code{nil} value.  The header can then be cleaned up in two ways.  By
2311
 
default, the header fields in @code{mh-invisible-headers} are removed.
2312
 
On the other hand, you could set @code{mh-visible-headers} to the fields
2313
 
that you would like to see.  If this variable is set,
2314
 
@code{mh-invisible-headers} is ignored.  I suggest that you not set
2315
 
@code{mh-visible-headers} since if you use this variable, you might miss
2316
 
a lot of header fields that you'd rather not miss.  As an example of how
2317
 
to set a string variable, @code{mh-visible-headers} can be set to show a
2318
 
minimum set of header fields (see (@ref{Regexps, , Syntax of Regular
2319
 
Expressions, emacs, The GNU Emacs Manual}, for a description of the
2320
 
special characters in this string):
2321
 
 
2322
 
@lisp
2323
 
(setq mh-visible-headers "^From: \\|^Subject: \\|^Date: ")
2324
 
@end lisp
2325
 
 
2326
 
@cindex @code{mhl}
2327
 
@cindex MH commands, @code{mhl}
2328
 
@vindex @code{mhl-formfile}
2329
 
 
2330
 
Normally mh-e takes care of displaying messages itself (rather than
2331
 
calling an MH program to do the work).  If you'd rather have @code{mhl}
2332
 
display the message (within mh-e), set the variable @code{mhl-formfile}
2333
 
to a non-@code{nil} value.  You can set this variable either to @code{t}
2334
 
to use the default format file or to a filename if you have your own
2335
 
format file (@code{mhl}(1) tells you how to write one).  When writing
2336
 
your own format file, use a nonzero value for @code{overflowoffset} to
2337
 
ensure the header is RFC 822 compliant and parsable by mh-e.
2338
 
@code{mhl} is always used for printing and forwarding; in this case, the
2339
 
value of @code{mhl-formfile} is consulted if it is a filename.
2340
 
 
2341
 
@vindex @code{mh-show-mode-hook}
2342
 
 
2343
 
Two hooks can be used to control how messages are displayed.  The first
2344
 
hook, @code{mh-show-mode-hook}, is called early on in the process of
2345
 
displaying of messages.  It is used to perform some actions on the
2346
 
contents of messages, such as highlighting the header fields.  If you're
2347
 
running Emacs 19 under the X Window System, the following example will
2348
 
highlight the @samp{From:} and @samp{Subject:} header fields.  This is a
2349
 
very nice feature indeed.
2350
 
 
2351
 
@vindex @code{mh-show-mode-hook}, example
2352
 
 
2353
 
@lisp
2354
 
@group
2355
 
@i{Emphasize header fields in different fonts via mh-show-mode-hook}
2356
 
 
2357
 
(defvar my-mh-keywords
2358
 
   '(("^From: \\(.*\\)" 1 'bold t)
2359
 
     ("^Subject: \\(.*\\)" 1 'highlight t))
2360
 
  "mh-e additions for font-lock-keywords.")
2361
 
 
2362
 
(defun my-mh-show-mode-hook ()
2363
 
  "Hook to turn on and customize fonts."
2364
 
  (font-lock-add-keywords nil my-mh-keywords))
2365
 
 
2366
 
(add-hook 'mh-show-mode-hook 'my-mh-show-mode-hook))
2367
 
@end group
2368
 
@end lisp
2369
 
 
2370
 
@vindex @code{mh-show-hook}
2371
 
 
2372
 
The second hook, @code{mh-show-hook}, is the last thing called after
2373
 
messages are displayed.  It's used to affect the behavior of mh-e in
2374
 
general or when @code{mh-show-mode-hook} is too early.  For example, if
2375
 
you wanted to keep mh-e in sync with MH, you could use
2376
 
@code{mh-show-hook} as follows:
2377
 
 
2378
 
@vindex @code{mh-show-hook}, example
2379
 
 
2380
 
@lisp
2381
 
(add-hook 'mh-show-hook 'mh-update-sequences)
2382
 
@end lisp
2383
 
 
2384
 
@vindex @code{mh-show-buffer-mode-line-buffer-id}
2385
 
@cindex MH-Show mode
2386
 
@cindex modes, MH-Show
2387
 
 
2388
 
The function @code{mh-update-sequences} is documented in @ref{Finishing
2389
 
Up}.  For those who like to modify their mode lines, use
2390
 
@code{mh-show-buffer-mode-line-buffer-id} to modify the mode line in the
2391
 
MH-Show buffers.  Place the two escape strings @samp{%s} and @samp{%d},
2392
 
which will display the folder name and the message number, respectively,
2393
 
somewhere in the string in that order.  The default value of
2394
 
@samp{"@{show-%s@} %d"} yields a mode line of
2395
 
 
2396
 
@example
2397
 
-----@{show-+inbox@} 4      (MH-Show)--Bot----------------------------------
2398
 
@end example
2399
 
 
2400
 
@node Customizing Moving Around,  , Customizing Viewing, Customizing Reading
2401
 
@subsection Moving Around
2402
 
 
2403
 
@cindex moving between messages
2404
 
@cindex MH-Show mode
2405
 
@cindex modes, MH-Show
2406
 
@cindex MH-Folder mode
2407
 
@cindex modes, MH-Folder
2408
 
@vindex @code{mh-recenter-summary-p}
2409
 
 
2410
 
When you use @kbd{t} (@code{mh-toggle-showing}) to toggle between show
2411
 
mode and scan mode, the MH-Show buffer is hidden and the
2412
 
MH-Folder buffer is left alone.  Setting
2413
 
@code{mh-recenter-summary-p} to a non-@code{nil} value causes the toggle to
2414
 
display as many scan lines as possible, with the cursor at the middle.
2415
 
The effect of @code{mh-recenter-summary-p} is rather useful, but it can
2416
 
be annoying on a slow network connection.
2417
 
 
2418
 
@node Customizing Sending, Customizing Draft Editing, Customizing Reading, Customizing mh-e
2419
 
@section Sending Mail
2420
 
 
2421
 
@cindex sending mail
2422
 
 
2423
 
You may wish to start off by adding the following useful key bindings to
2424
 
your @file{.emacs} file:
2425
 
 
2426
 
@lisp
2427
 
(global-set-key "\C-xm" 'mh-smail)
2428
 
(global-set-key "\C-x4m" 'mh-smail-other-window)
2429
 
@end lisp
2430
 
 
2431
 
In addition, several variables are useful when sending mail or replying
2432
 
to mail.  They are summarized in the following table.
2433
 
 
2434
 
@table @code
2435
 
@item mh-comp-formfile
2436
 
Format file for drafts (default: @samp{"components"}).
2437
 
 
2438
 
@item mh-repl-formfile
2439
 
Format file for replies (default: @samp{"replcomps"}).
2440
 
 
2441
 
@item mh-letter-mode-hook
2442
 
Functions to run in MH-Letter mode (default: @code{nil}).
2443
 
 
2444
 
@item mh-compose-letter-function
2445
 
Functions to run when starting a new draft (default: @code{nil}).
2446
 
 
2447
 
@item mh-reply-default-reply-to
2448
 
Whom reply goes to (default: @code{nil}).
2449
 
 
2450
 
@item mh-forward-subject-format
2451
 
Format string for forwarded message subject (default: @samp{"%s: %s"}).
2452
 
 
2453
 
@item mh-redist-full-contents
2454
 
@code{send} requires entire message (default: @code{nil}).
2455
 
 
2456
 
@item mh-new-draft-cleaned-headers
2457
 
Remove these header fields from re-edited draft (default:
2458
 
@samp{"^Date:\\| ^Received:\\| ^Message-Id:\\| ^From:\\| ^Sender:\\|
2459
 
^Delivery-Date:\\| ^Return-Path:"}).
2460
 
@end table
2461
 
 
2462
 
@cindex @code{comp}
2463
 
@cindex MH commands, @code{comp}
2464
 
@vindex @code{mh-comp-formfile}
2465
 
@cindex @file{components}
2466
 
@cindex files, @file{components}
2467
 
@cindex @code{repl}
2468
 
@cindex MH commands, @code{repl}
2469
 
@cindex @file{replcomps}
2470
 
@cindex files, @file{replcomps}
2471
 
@vindex @code{mh-repl-formfile}
2472
 
 
2473
 
Since mh-e does not use @code{comp} to create the initial draft, you
2474
 
need to set @code{mh-comp-formfile} to the name of your components file
2475
 
if it isn't @file{components}.  This is the name of the file that
2476
 
contains the form for composing messages.  If it does not contain an
2477
 
absolute pathname, mh-e searches for the file first in your MH directory
2478
 
and then in the system MH library directory (such as
2479
 
@file{/usr/local/lib/mh}).  Replies, on the other hand, are built using
2480
 
@code{repl}.  You can change the location of the field file from the
2481
 
default of @file{replcomps} by modifying @code{mh-repl-formfile}.
2482
 
 
2483
 
@vindex @code{mh-letter-mode-hook}
2484
 
@cindex @code{repl}
2485
 
@cindex MH commands, @code{repl}
2486
 
@cindex @file{components}
2487
 
@cindex files, @file{components}
2488
 
 
2489
 
Two hooks are provided to run commands on your freshly created draft.
2490
 
The first hook, @code{mh-letter-mode-hook}, allows you to do some
2491
 
processing before editing a letter.  For example, you may wish to modify
2492
 
the header after @code{repl} has done its work, or you may have a
2493
 
complicated @file{components} file and need to tell mh-e where the
2494
 
cursor should go.  Here's an example of how you would use this hook---all
2495
 
of the other hooks are set in this fashion as well.
2496
 
 
2497
 
@findex @code{mh-insert-signature}, example
2498
 
 
2499
 
@lisp
2500
 
@group
2501
 
@i{Prepare draft for editing via mh-letter-mode-hook}
2502
 
 
2503
 
(defvar letter-mode-init-done nil
2504
 
  "Non-@code{nil} when one-time mh-e settings have made.")
2505
 
 
2506
 
(defun my-mh-letter-mode-hook ()
2507
 
  "Hook to prepare letter for editing."
2508
 
  (if (not letter-mode-init-done)    ; @r{only need to bind the keys once}
2509
 
      (progn
2510
 
        (local-set-key "\C-ctb" 'add-enriched-text)
2511
 
        (local-set-key "\C-cti" 'add-enriched-text)
2512
 
        (local-set-key "\C-ctf" 'add-enriched-text)
2513
 
        (local-set-key "\C-cts" 'add-enriched-text)
2514
 
        (local-set-key "\C-ctB" 'add-enriched-text)
2515
 
        (local-set-key "\C-ctu" 'add-enriched-text)
2516
 
        (local-set-key "\C-ctc" 'add-enriched-text)
2517
 
        (setq letter-mode-init-done t)))
2518
 
  (setq fill-prefix "  ")            ; @r{I find indented text easier to read}
2519
 
  (save-excursion
2520
 
    (goto-char (point-max))          ; @r{go to end of message to}
2521
 
    (mh-insert-signature)))          ;   @r{insert signature}
2522
 
 
2523
 
(add-hook 'mh-letter-mode-hook 'my-mh-letter-mode-hook)
2524
 
@end group
2525
 
@end lisp
2526
 
 
2527
 
The function, @code{add-enriched-text} is defined in the example in
2528
 
@ref{Customizing Editing MIME}.
2529
 
 
2530
 
@vindex @code{mh-compose-letter-function}
2531
 
 
2532
 
The second hook, a function really, is
2533
 
@code{mh-compose-letter-function}.  Like @code{mh-letter-mode-hook}, it
2534
 
is called just before editing a new message; however, it is the last
2535
 
function called before you edit your message.  The consequence of this
2536
 
is that you can write a function to write and send the message for you.
2537
 
This function is passed three arguments: the contents of the @samp{To:},
2538
 
@samp{Subject:}, and @samp{cc:} header fields.
2539
 
 
2540
 
@menu
2541
 
* Customizing Replying::        
2542
 
* Customizing Forwarding::      
2543
 
* Customizing Redistributing::  
2544
 
* Customizing Old Drafts::      
2545
 
@end menu
2546
 
 
2547
 
@node Customizing Replying, Customizing Forwarding, Customizing Sending, Customizing Sending
2548
 
@subsection Replying to Mail
2549
 
 
2550
 
@cindex replying
2551
 
@vindex @code{mh-reply-default-reply-to}
2552
 
 
2553
 
If you find that most of the time that you specify @kbd{cc} when you
2554
 
reply to a message, set @code{mh-reply-default-reply-to} to @samp{cc}.
2555
 
This variable is normally set to @code{nil} so that you are prompted for
2556
 
the recipient of a reply.  It can be set to one of @samp{from},
2557
 
@samp{to}, or @samp{cc}; you are then no longer prompted for the
2558
 
recipient(s) of your reply.
2559
 
 
2560
 
@node Customizing Forwarding, Customizing Redistributing, Customizing Replying, Customizing Sending
2561
 
@subsection Forwarding Mail
2562
 
 
2563
 
@cindex forwarding
2564
 
@vindex @code{mh-forward-subject-format}
2565
 
 
2566
 
When forwarding a message, the format of the @samp{Subject:} header
2567
 
field can be modified by the variable @code{mh-forward-subject-format}.
2568
 
This variable is a string which includes two escapes (@samp{%s}).  The
2569
 
first @samp{%s} is replaced with the sender of the original message, and
2570
 
the second one is replaced with the original @samp{Subject:}.  The
2571
 
default value of @samp{"%s: %s"} takes a message with the header:
2572
 
 
2573
 
@example
2574
 
@group
2575
 
To: Bill Wohler <wohler@@newt.com>
2576
 
Subject: Re: 49er football
2577
 
From: Greg DesBrisay <gd@@cellnet.com>
2578
 
@end group
2579
 
@end example
2580
 
 
2581
 
and creates a subject header field of:
2582
 
 
2583
 
@example
2584
 
Subject: Greg DesBrisay: Re: 49er football
2585
 
@end example
2586
 
 
2587
 
@node Customizing Redistributing, Customizing Old Drafts, Customizing Forwarding, Customizing Sending
2588
 
@subsection Redistributing Your Mail
2589
 
 
2590
 
@cindex redistributing
2591
 
@vindex @code{mh-redist-full-contents}
2592
 
@cindex @code{dist}
2593
 
@cindex MH commands, @code{dist}
2594
 
@cindex @code{send}
2595
 
@cindex MH commands, @code{send}
2596
 
 
2597
 
The variable @code{mh-redist-full-contents} must be set to non-@code{nil} if
2598
 
@code{dist} requires the whole letter for redistribution, which is the
2599
 
case if @code{send} is compiled with the @sc{berk} @footnote{To see which
2600
 
options your copy of MH was compiled with, use @kbd{M-x mh-version}
2601
 
(@ref{Miscellaneous}).}  option (which many people abhor).  If you find
2602
 
that MH will not allow you to redistribute a message that has been
2603
 
redistributed before, this variable should be set to @code{nil}.
2604
 
 
2605
 
@node Customizing Old Drafts,  , Customizing Redistributing, Customizing Sending
2606
 
@subsection Editing Old Drafts and Bounced Messages
2607
 
 
2608
 
@cindex re-editing drafts
2609
 
@vindex @code{mh-new-draft-cleaned-headers}
2610
 
 
2611
 
The header fields specified by @code{mh-new-draft-cleaned-headers} are
2612
 
removed from an old draft that has been recreated with @kbd{M-e}
2613
 
(@code{mh-extract-rejected-mail}) or @kbd{M-a} (@code{mh-edit-again}).
2614
 
If when you edit an old draft with these commands you find that there
2615
 
are header fields that you don't want included, you can append them to
2616
 
this variable.  For example,
2617
 
 
2618
 
@vindex @code{mh-new-draft-cleaned-headers}, example
2619
 
 
2620
 
@lisp
2621
 
(setq mh-new-draft-cleaned-headers
2622
 
      (concat mh-new-draft-cleaned-headers "\\|^Some-Field:"))
2623
 
@end lisp
2624
 
 
2625
 
@cindex regular expressions
2626
 
 
2627
 
This appends the regular expression @samp{\\|^Some-Field:} to the
2628
 
variable (@pxref{Regexps, , Syntax of Regular Expressions, emacs, The
2629
 
GNU Emacs Manual}).  The @samp{\\|} means @emph{or}, and the @samp{^}
2630
 
(caret) matches the beginning of the line.  This is done to be very
2631
 
specific about which fields match.  The literal @samp{:} is appended for
2632
 
the same reason.
2633
 
 
2634
 
@node Customizing Draft Editing, Customizing Moving Mail, Customizing Sending, Customizing mh-e
2635
 
@section Editing a Draft
2636
 
 
2637
 
@cindex editing draft
2638
 
 
2639
 
There are several variables used during the draft editing phase.
2640
 
Examples include changing the name of the file that holds your signature
2641
 
or telling mh-e about new multimedia types.  They are:
2642
 
 
2643
 
@table @code
2644
 
@item mh-yank-from-start-of-msg
2645
 
How to yank when region not set (default: @code{t}).
2646
 
 
2647
 
@item mh-ins-buf-prefix
2648
 
Indent for yanked messages (default: @samp{"> "}).
2649
 
 
2650
 
@item mail-citation-hook
2651
 
Functions to run on yanked messages (default: @code{nil}).
2652
 
 
2653
 
@item mh-delete-yanked-msg-window
2654
 
Delete message window on yank (default: @code{nil}).
2655
 
 
2656
 
@c Need the @* because otherwise TeX fills it wrong and complains
2657
 
@c about overfull hbox.
2658
 
@item mh-mime-content-types
2659
 
List of valid content types (default: @samp{'(("text/plain")@*
2660
 
("text/richtext") ("multipart/mixed") ("multipart/alternative")@*
2661
 
("multipart/digest") ("multipart/parallel") ("message/rfc822")@*
2662
 
("message/partial") ("message/external-body")@*
2663
 
("application/octet-stream") ("application/postscript")@*
2664
 
("image/jpeg") ("image/gif") ("audio/basic") ("video/mpeg"))}).
2665
 
 
2666
 
@item mh-mhn-args
2667
 
Additional arguments for @code{mhn} (default: @code{nil}).
2668
 
 
2669
 
@item mh-signature-file-name
2670
 
File containing signature (default: @samp{"~/.signature"}).
2671
 
 
2672
 
@item mh-before-send-letter-hook
2673
 
Functions to run before sending draft (default: @code{nil}).
2674
 
 
2675
 
@item mh-send-prog
2676
 
MH program used to send messages (default: @samp{"send"}).
2677
 
@end table
2678
 
 
2679
 
@menu
2680
 
* Customizing Editing Textual::  
2681
 
* Customizing Editing MIME::    
2682
 
* Customizing Sending Message::  
2683
 
@end menu
2684
 
 
2685
 
@node Customizing Editing Textual, Customizing Editing MIME, Customizing Draft Editing, Customizing Draft Editing
2686
 
@subsection Editing Textual Messages
2687
 
 
2688
 
The following two sections include variables that customize the way you
2689
 
edit a draft.  The discussion here applies to editing multimedia
2690
 
messages as well.
2691
 
 
2692
 
@menu
2693
 
* Customizing Inserting Letter::  
2694
 
* Customizing Signature::       
2695
 
@end menu
2696
 
 
2697
 
@node Customizing Inserting Letter, Customizing Signature, Customizing Editing Textual, Customizing Editing Textual
2698
 
@subsubsection Inserting letter to which you're replying
2699
 
 
2700
 
@cindex inserting messages
2701
 
@vindex @code{mh-yank-from-start-of-msg}
2702
 
@vindex @code{mh-ins-buf-prefix}
2703
 
@vindex @code{mail-citation-hook}
2704
 
@vindex @code{mh-ins-buf-prefix}
2705
 
@vindex @code{mh-delete-yanked-msg-window}
2706
 
 
2707
 
To control how much of the message to which you are replying is yanked
2708
 
by @kbd{C-c C-y} (@code{mh-yank-cur-msg}) into your reply, modify
2709
 
@code{mh-yank-from-start-of-msg}.  The default value of @code{t} means
2710
 
that the entire message is copied.  If it is set to @code{'body} (don't
2711
 
forget the apostrophe), then only the message body is copied.  If it is
2712
 
set to @code{nil}, only the part of the message following point (the
2713
 
current cursor position in the message's buffer) is copied.  In any
2714
 
case, this variable is ignored if a region is set in the message you are
2715
 
replying to.  The string contained in @code{mh-ins-buf-prefix} is
2716
 
inserted before each line of a message that is inserted into a draft
2717
 
with @kbd{C-c C-y} (@code{mh-yank-cur-msg}).  I suggest that you not
2718
 
modify this variable.  The default value of @samp{"> "} is the default
2719
 
string for many mailers and news readers: messages are far easier to
2720
 
read if several included messages have all been indented by the same
2721
 
string.  The variable @code{mail-citation-hook} is @code{nil} by
2722
 
default, which means that when a message is inserted into the letter,
2723
 
each line is prefixed by @code{mh-ins-buf-prefix}.  Otherwise, it can be
2724
 
set to a function that modifies an included
2725
 
@cindex Emacs, packages, supercite
2726
 
citation. 
2727
 
@c Footnotes are fragile; hence the redundancy.
2728
 
@c TeX not inserting a line break; hence the @*
2729
 
@ifclear html
2730
 
@footnote{@emph{Supercite} is an example of a full-bodied, full-featured
2731
 
citation package.  It is in Emacs versions 19.15 and later, and can be
2732
 
found via anonymous @code{ftp} on @samp{archive.cis.ohio-state.edu} in
2733
 
@* @file{/pub/gnu/emacs/elisp-archive/packages/sc3.1.tar.Z}}
2734
 
@end ifclear
2735
 
@ifset html
2736
 
@footnote{@emph{Supercite} is an example of a full-bodied,
2737
 
full-featured citation package.  It is in Emacs versions 19.15 and
2738
 
later, and its @sc{url} is @*
2739
 
@file{<A HREF="ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/packages/sc3.1.tar.Z">ftp://archive.cis.ohio-state.edu/pub/gnu/emacs/elisp-archive/packages/sc3.1.tar.Z</A>}}
2740
 
@end ifset
2741
 
If you like to yank all the text from the message you're replying to in
2742
 
one go, set @code{mh-delete-yanked-msg-window} to non-@code{nil} to delete
2743
 
the window containing the original message after yanking it to make more
2744
 
room on your screen for your reply.
2745
 
 
2746
 
@node Customizing Signature,  , Customizing Inserting Letter, Customizing Editing Textual
2747
 
@subsubsection Inserting your signature
2748
 
 
2749
 
@cindex inserting signature
2750
 
@cindex signature
2751
 
@vindex @code{mh-signature-file-name}
2752
 
@cindex @file{.signature}
2753
 
@cindex files, @file{.signature}
2754
 
 
2755
 
You can change the name of the file inserted with @kbd{C-c C-s}
2756
 
(@code{mh-insert-signature}) by changing @code{mh-signature-file-name}
2757
 
(default: @file{"~/.signature"}).
2758
 
 
2759
 
@node Customizing Editing MIME, Customizing Sending Message, Customizing Editing Textual, Customizing Draft Editing
2760
 
@subsection Editing Multimedia Messages
2761
 
 
2762
 
@cindex MIME
2763
 
@cindex multimedia mail
2764
 
@vindex @code{mh-mime-content-types}
2765
 
 
2766
 
The variable @code{mh-mime-content-types} contains a list of the
2767
 
currently valid content types.  They are listed in the table in
2768
 
@ref{Customizing Draft Editing}.  If you encounter a new content type,
2769
 
you can add it like this:
2770
 
 
2771
 
@vindex @code{mh-mime-content-types}, example
2772
 
 
2773
 
@lisp
2774
 
(setq mh-mime-content-types (append mh-mime-content-types
2775
 
                                    '(("@var{new/type}"))))
2776
 
@end lisp
2777
 
 
2778
 
Emacs macros can be used to insert enriched text directives like
2779
 
@samp{<bold>}.  The following code will make, for example, @kbd{C-c t
2780
 
b} insert the @samp{<bold>} directive.
2781
 
 
2782
 
@lisp
2783
 
@group
2784
 
@i{Emacs macros for entering enriched text}
2785
 
 
2786
 
(defvar enriched-text-types '(("b" . "bold") ("i" . "italic") ("f" . "fixed")
2787
 
                              ("s" . "smaller") ("B" . "bigger")
2788
 
                              ("u" . "underline") ("c" . "center"))
2789
 
  "Alist of (final-character . directive) choices for add-enriched-text.
2790
 
Additional types can be found in RFC 1563.")
2791
 
 
2792
 
(defun add-enriched-text (begin end)
2793
 
  "Add enriched text directives around region.
2794
 
The directive used comes from the list enriched-text-types and is
2795
 
specified by the last keystroke of the command.  When called from Lisp,
2796
 
arguments are BEGIN and END@."
2797
 
  (interactive "r")
2798
 
  ;; @r{Set type to the directive indicated by the last keystroke.}
2799
 
  (let ((type (cdr (assoc (char-to-string (logior last-input-char ?@w{`}))
2800
 
                          enriched-text-types))))
2801
 
    (save-restriction              ; @r{restores state from narrow-to-region}
2802
 
      (narrow-to-region begin end) ; @r{narrow view to region}
2803
 
      (goto-char (point-min))      ; @r{move to beginning of text}
2804
 
      (insert "<" type ">")        ; @r{insert beginning directive}
2805
 
      (goto-char (point-max))      ; @r{move to end of text}
2806
 
      (insert "</" type ">"))))    ; @r{insert terminating directive}
2807
 
@end group
2808
 
@end lisp
2809
 
 
2810
 
To use the function @code{add-enriched-text}, first create keybindings
2811
 
for it (@pxref{Customizing Sending}).  Then, set the mark with
2812
 
@kbd{C-@@} or @kbd{C-SPC}, type in the text to be highlighted, and type
2813
 
@kbd{C-c t b}.  This adds @samp{<bold>} where you set the mark and
2814
 
adds @samp{</bold>} at the location of your cursor, giving you something
2815
 
like: @samp{You should be <bold>very</bold>}.  You may also be
2816
 
interested in investigating @code{sgml-mode}.
2817
 
 
2818
 
@menu
2819
 
* Customizing Sending MIME::    
2820
 
@end menu
2821
 
 
2822
 
@node Customizing Sending MIME,  , Customizing Editing MIME, Customizing Editing MIME
2823
 
@subsubsection Readying multimedia messages for sending
2824
 
 
2825
 
@vindex @code{mh-mhn-args}
2826
 
 
2827
 
If you wish to pass additional arguments to @code{mhn} to affect how it
2828
 
builds your message, use the variable @code{mh-mhn-args}.  For example,
2829
 
you can build a consistency check into the message by setting
2830
 
@code{mh-mhn-args} to @code{-check}.  The recipient of your message can
2831
 
then run @code{mhn -check} on the message---@code{mhn} will complain if
2832
 
the message has been corrupted on the way.  The @kbd{C-c C-e}
2833
 
(@code{mh-mhn-edit}) command only consults this variable when given a
2834
 
prefix argument.
2835
 
 
2836
 
@node Customizing Sending Message,  , Customizing Editing MIME, Customizing Draft Editing
2837
 
@subsection Sending a Message
2838
 
 
2839
 
@cindex sending mail
2840
 
@cindex spell check
2841
 
@vindex @code{mh-before-send-letter-hook}
2842
 
 
2843
 
If you want to check your spelling in your message before sending, use
2844
 
@code{mh-before-send-letter-hook} like this:
2845
 
 
2846
 
@i{Spell-check message via mh-before-send-letter-hook}
2847
 
 
2848
 
@vindex @code{mh-before-send-letter-hook}, example
2849
 
 
2850
 
@lisp
2851
 
(add-hook 'mh-before-send-letter-hook 'ispell-message)
2852
 
@end lisp
2853
 
 
2854
 
@cindex @code{send}
2855
 
@cindex MH commands, @code{send}
2856
 
@vindex @code{mh-send-prog}
2857
 
 
2858
 
In case the MH @code{send} program is installed under a different name,
2859
 
use @code{mh-send-prog} to tell mh-e the name.
2860
 
 
2861
 
@node Customizing Moving Mail, Customizing Searching, Customizing Draft Editing, Customizing mh-e
2862
 
@section Moving Your Mail Around
2863
 
 
2864
 
@cindex processing mail
2865
 
 
2866
 
If you change the name of some of the MH programs or have your own
2867
 
printing programs, the following variables can help you.
2868
 
They are described in detail in the subsequent sections.
2869
 
 
2870
 
@table @code
2871
 
@item mh-inc-prog
2872
 
Program to incorporate mail (default: @samp{"inc"}).
2873
 
 
2874
 
@item mh-inc-folder-hook
2875
 
Functions to run when incorporating mail (default: @code{nil}).
2876
 
 
2877
 
@item mh-delete-msg-hook
2878
 
Functions to run when deleting messages (default: @code{nil}).
2879
 
 
2880
 
@item mh-print-background
2881
 
Print in foreground or background (default: @code{nil}).
2882
 
 
2883
 
@item mh-lpr-command-format
2884
 
Command used to print (default: @samp{"lpr -J '%s'"}).
2885
 
 
2886
 
@item mh-default-folder-for-message-function
2887
 
Function to generate a default folder (default: @code{nil}).
2888
 
 
2889
 
@item mh-auto-folder-collect
2890
 
Collect folder names in background at startup (default: @code{t}).
2891
 
 
2892
 
@item mh-recursive-folders
2893
 
Collect nested folders (default: @code{nil}).
2894
 
 
2895
 
@item mh-refile-msg-hook
2896
 
Functions to run when refiling message (default: @code{nil}).
2897
 
 
2898
 
@item mh-store-default-directory
2899
 
Default directory for storing files created by @code{uuencode} or @code{shar}
2900
 
(default: @code{nil}).
2901
 
 
2902
 
@item mh-sortm-args
2903
 
Additional arguments for @code{sortm} (default: @code{nil}).
2904
 
 
2905
 
@item mh-scan-prog
2906
 
Program to scan messages (default: @samp{"scan"}).
2907
 
 
2908
 
@item mh-before-quit-hook
2909
 
Functions to run before quitting (default: @code{nil}).  See also
2910
 
@code{mh-quit-hook}. 
2911
 
 
2912
 
@item mh-quit-hook
2913
 
Functions to run after quitting (default: @code{nil}). See also
2914
 
@code{mh-before-quit-hook}.
2915
 
@end table
2916
 
 
2917
 
@menu
2918
 
* Customizing Incorporating::   
2919
 
* Customizing Deleting::        
2920
 
* Customizing Organizing::      
2921
 
* Customizing Printing::        
2922
 
* Customizing Files and Pipes::  
2923
 
* Customizing Finishing Up::    
2924
 
@end menu
2925
 
 
2926
 
@node Customizing Incorporating, Customizing Deleting, Customizing Moving Mail, Customizing Moving Mail
2927
 
@subsection Incorporating Your Mail
2928
 
 
2929
 
@cindex incorporating
2930
 
@vindex @code{mh-inc-prog}
2931
 
@cindex @code{inc}
2932
 
@cindex MH commands, @code{inc}
2933
 
@vindex @code{mh-progs}
2934
 
@vindex @code{mh-scan-prog}
2935
 
@vindex @code{mh-inc-folder-hook}
2936
 
 
2937
 
The name of the program that incorporates new mail is stored in
2938
 
@code{mh-inc-prog}; it is @samp{"inc"} by default.  This program
2939
 
generates a one-line summary for each of the new messages.  Unless it is
2940
 
an absolute pathname, the file is assumed to be in the @code{mh-progs}
2941
 
directory.  You may also link a file to @code{inc} that uses a different
2942
 
format (see @code{mh-profile}(5)).  You'll then need to modify several
2943
 
variables appropriately; see @code{mh-scan-prog} below.  You can set the
2944
 
hook @code{mh-inc-folder-hook}, which is called after new mail is
2945
 
incorporated by the @kbd{i} (@code{mh-inc-folder}) command.  A good use
2946
 
of this hook is to rescan the whole folder either after running @kbd{M-x
2947
 
mh-rmail} the first time or when you've changed the message numbers from
2948
 
outside of mh-e.
2949
 
 
2950
 
@findex @code{mh-execute-commands}
2951
 
@findex @code{mh-rescan-folder}, example
2952
 
@findex @code{mh-show}, example
2953
 
@vindex @code{mh-inc-folder-hook}, example
2954
 
 
2955
 
@lisp
2956
 
@group
2957
 
@i{Rescan folder after incorporating new mail via mh-inc-folder-hook}
2958
 
 
2959
 
(defun my-mh-inc-folder-hook ()
2960
 
  "Hook to rescan folder after incorporating mail."
2961
 
  (if (buffer-modified-p)            ; @r{if outstanding refiles and deletes,}
2962
 
      (mh-execute-commands))         ;   @r{carry them out}
2963
 
  (mh-rescan-folder)                 ; @r{synchronize with +inbox}
2964
 
  (mh-show))                         ; @r{show the current message}
2965
 
 
2966
 
(add-hook 'mh-inc-folder-hook 'my-mh-inc-folder-hook)
2967
 
@end group
2968
 
@end lisp
2969
 
 
2970
 
@node Customizing Deleting, Customizing Organizing, Customizing Incorporating, Customizing Moving Mail
2971
 
@subsection Deleting Your Mail
2972
 
 
2973
 
@cindex deleting
2974
 
@vindex @code{mh-delete-msg-hook}
2975
 
 
2976
 
The hook @code{mh-delete-msg-hook} is called after you mark a message
2977
 
for deletion.  For example, the current maintainer of mh-e used this
2978
 
once when he kept statistics on his mail usage.
2979
 
 
2980
 
@node Customizing Organizing, Customizing Printing, Customizing Deleting, Customizing Moving Mail
2981
 
@subsection Organizing Your Mail with Folders
2982
 
 
2983
 
@cindex using folders
2984
 
@vindex @code{mh-recursive-folders}
2985
 
@vindex @code{mh-auto-folder-collect}
2986
 
 
2987
 
By default, operations on folders work only one level at a time.  Set
2988
 
@code{mh-recursive-folders} to non-@code{nil} to operate on all folders.
2989
 
This mostly means that you'll be able to see all your folders when you
2990
 
press @key{TAB} when prompted for a folder name.  The variable
2991
 
@code{mh-auto-folder-collect} is normally turned on to generate a list
2992
 
of folder names in the background as soon as mh-e is loaded.  Otherwise,
2993
 
the list is generated when you need a folder name the first time (as
2994
 
with @kbd{o} (@code{mh-refile-msg})).  If you have a lot of folders and
2995
 
you have @code{mh-recursive-folders} set, this could take a while, which
2996
 
is why it's nice to do the folder collection in the background.
2997
 
 
2998
 
@vindex @code{mh-default-folder-for-message-function}
2999
 
@findex @code{mh-refile-msg}
3000
 
@findex @code{mh-to-fcc}
3001
 
@cindex @file{.emacs}
3002
 
@cindex files, @file{.emacs}
3003
 
 
3004
 
The function @code{mh-default-folder-for-message-function} is used by
3005
 
@kbd{o} (@code{mh-refile-msg}) and @kbd{C-c C-f C-f} (@code{mh-to-fcc})
3006
 
to generate a default folder.  The generated folder name should be a
3007
 
string with a @samp{+} before it.  For each of my correspondents, I use the
3008
 
same name for both an alias and a folder.  So, I wrote a function that
3009
 
takes the address in the @samp{From:} header field, finds it in my alias
3010
 
file, and returns the alias, which is used as a default folder name.
3011
 
This is the most complicated example given here, and it demonstrates
3012
 
several features of Emacs Lisp programming.  You should be able to drop
3013
 
this into @file{~/.emacs}, however.  If you use this to store messages
3014
 
in a subfolder of your Mail directory, you can modify the line that
3015
 
starts @samp{(format +%s...}  and insert your subfolder after the folder
3016
 
symbol @samp{+}.
3017
 
@c Note for me: if I insert a new version, don't forget to remove the
3018
 
@c "a/" from the folder name.
3019
 
 
3020
 
@iftex
3021
 
@filbreak
3022
 
@end iftex
3023
 
 
3024
 
@vindex @code{mh-default-folder-for-message-function}, example
3025
 
@vindex @code{mh-user-path}, example
3026
 
 
3027
 
@lisp
3028
 
@group
3029
 
@i{Creating useful default folder for refiling via mh-default-folder-for-message-function}
3030
 
 
3031
 
(defun my-mh-folder-from-address ()
3032
 
  "Determine folder name from address.
3033
 
Takes the address in the From: header field, and returns its corresponding
3034
 
alias from the user's personal aliases file. Returns @code{nil} if the address
3035
 
was not found."
3036
 
  (require 'rfc822)                         ; @r{for the rfc822 functions}
3037
 
  (search-forward-regexp "^From: \\(.*\\)") ; @r{grab header field contents}
3038
 
  (save-excursion                     ; @r{save state}
3039
 
    (let ((addr (car (rfc822-addresses  ; @r{get address}
3040
 
                      (buffer-substring (match-beginning 1)
3041
 
                                        (match-end 1)))))
3042
 
          (buffer (get-buffer-create " *temp*")) ; @r{set local variables}
3043
 
          folder)
3044
 
      (set-buffer buffer)             ; @r{jump to temporary buffer}
3045
 
      (unwind-protect                 ; @r{run kill-buffer when done}
3046
 
          (progn                      ; @r{function grouping construct}
3047
 
            (insert-file-contents (expand-file-name "aliases"
3048
 
                                                    mh-user-path))
3049
 
            (goto-char (point-min))   ; @r{grab aliases file and go to start}
3050
 
            (setq folder
3051
 
                  ;; @r{Search for the given address, even commented-out}
3052
 
                  ;; @r{addresses are found!}
3053
 
                  ;; @r{The function search-forward-regexp sets values that are}
3054
 
                  ;; @r{later used by match-beginning and match-end.}
3055
 
                  (if (search-forward-regexp (format "^;*\\(.*\\):.*%s"
3056
 
                                                     addr) nil t)
3057
 
                      ;; @r{NOTE WELL: this is what the return value looks like.}
3058
 
                      ;; @r{You can modify the format string to match your own}
3059
 
                      ;; @r{Mail hierarchy.}
3060
 
                      (format "+%s" (buffer-substring (match-beginning 1)
3061
 
                                                      (match-end 1))))))
3062
 
        (kill-buffer buffer))          ; @r{get rid of our temporary buffer}
3063
 
      folder)))                        ; @r{function's return value}
3064
 
 
3065
 
(setq mh-default-folder-for-message-function 'my-mh-folder-from-address)
3066
 
@end group
3067
 
@end lisp
3068
 
 
3069
 
@vindex @code{mh-refile-msg-hook}
3070
 
 
3071
 
The hook @code{mh-refile-msg-hook} is called after a message is marked
3072
 
to be refiled.
3073
 
 
3074
 
@vindex @code{mh-sortm-args}
3075
 
@cindex @code{sortm}
3076
 
@cindex MH commands, @code{sortm}
3077
 
@findex @code{mh-sort-folder}
3078
 
@cindex MH profile components, @code{sortm}
3079
 
@cindex @file{.mh_profile}
3080
 
@cindex files, @file{.mh_profile}
3081
 
 
3082
 
The variable @code{mh-sortm-args} holds extra arguments to pass on to
3083
 
the @code{sortm} command.  Note: this variable is only consulted when a
3084
 
prefix argument is given to @kbd{M-x mh-sort-folder}.  It is used to
3085
 
override any arguments given in a @code{sortm:} entry in your MH profile
3086
 
(@file{~/.mh_profile}).
3087
 
 
3088
 
@menu
3089
 
* Customizing Scan Line Formats::  
3090
 
@end menu
3091
 
 
3092
 
@node Customizing Scan Line Formats,  , Customizing Organizing, Customizing Organizing
3093
 
@subsubsection Scan line formatting
3094
 
 
3095
 
@vindex @code{mh-scan-prog}
3096
 
@cindex @code{scan}
3097
 
@cindex MH commands, @code{scan}
3098
 
@vindex @code{mh-progs}
3099
 
 
3100
 
The name of the program that generates a listing of one line per message
3101
 
is held in @code{mh-scan-prog} (default: @samp{"scan"}).  Unless this
3102
 
variable contains an absolute pathname, it is assumed to be in the
3103
 
@code{mh-progs} directory.  You may link another program to @code{scan}
3104
 
(see @code{mh-profile}(5)) to produce a different type of listing.
3105
 
 
3106
 
If you change the format of the scan lines you'll need to tell mh-e how
3107
 
to parse the new format.  As you see, quite a lot of variables are
3108
 
involved to do that.  The first variable has to do with pruning out
3109
 
garbage.
3110
 
 
3111
 
@table @code
3112
 
@item mh-valid-scan-line
3113
 
@vindex @code{mh-valid-scan-line}
3114
 
@cindex @code{inc}
3115
 
@cindex MH commands, @code{inc}
3116
 
@cindex @code{scan}
3117
 
@cindex MH commands, @code{scan}
3118
 
This regular expression describes a valid scan line.  This is used to
3119
 
eliminate error messages that are occasionally produced by @code{inc} or
3120
 
@code{scan} (default: @samp{"^ *[0-9]"}).
3121
 
@end table
3122
 
 
3123
 
Next, two variables control how the message numbers are parsed.
3124
 
 
3125
 
@table @code
3126
 
 
3127
 
@item mh-msg-number-regexp
3128
 
@vindex @code{mh-msg-number-regexp}
3129
 
This regular expression is used to extract the message number from a
3130
 
scan line.  Note that the message number must be placed in quoted
3131
 
parentheses, (\\(...\\)), as in the default of @w{@samp{"^
3132
 
*\\([0-9]+\\)"}}.
3133
 
 
3134
 
@item mh-msg-search-regexp
3135
 
@vindex @code{mh-msg-search-regexp}
3136
 
Given a message number (which is inserted in @samp{%d}), this regular
3137
 
expression will match the scan line that it represents (default:
3138
 
@samp{"^[^0-9]*%d[^0-9]"}).
3139
 
@end table
3140
 
 
3141
 
Finally, there are a slew of variables that control how mh-e marks up
3142
 
the scan lines.
3143
 
 
3144
 
@table @code
3145
 
@item mh-cmd-note
3146
 
@vindex @code{mh-cmd-note}
3147
 
Number of characters to skip over before inserting notation (default:
3148
 
4).  Note how it relates to the following regular expressions.
3149
 
 
3150
 
@item mh-deleted-msg-regexp
3151
 
@vindex @code{mh-deleted-msg-regexp}
3152
 
This regular expression describes deleted messages (default:
3153
 
@samp{"^....D"}).  See also @code{mh-note-deleted}.
3154
 
 
3155
 
@item mh-refiled-msg-regexp
3156
 
@vindex @code{mh-refiled-msg-regexp}
3157
 
This regular expression describes refiled messages (default:
3158
 
@samp{"^....\\^"}).  See also @code{mh-note-refiled}.
3159
 
 
3160
 
@item mh-cur-scan-msg-regexp
3161
 
@vindex @code{mh-cur-scan-msg-regexp}
3162
 
This regular expression matches the current message (default:
3163
 
@samp{"^....\\+"}).  See also @code{mh-note-cur}.
3164
 
 
3165
 
@item mh-good-msg-regexp
3166
 
@vindex @code{mh-good-msg-regexp}
3167
 
This regular expression describes which messages should be shown when
3168
 
mh-e goes to the next or previous message.  Normally, deleted or refiled
3169
 
messages are skipped over (default: @samp{"^....[^D^]"}).
3170
 
 
3171
 
@item mh-note-deleted
3172
 
@vindex @code{mh-note-deleted}
3173
 
Messages that have been deleted to are marked by this string (default:
3174
 
@samp{"D"}).  See also @code{mh-deleted-msg-regexp}.
3175
 
 
3176
 
@item mh-note-refiled
3177
 
@vindex @code{mh-note-refiled}
3178
 
Messages that have been refiled are marked by this string (default:
3179
 
@samp{"^"}).  See also @code{mh-refiled-msg-regexp}.
3180
 
 
3181
 
@item mh-note-copied
3182
 
@vindex @code{mh-note-copied}
3183
 
Messages that have been copied are marked by this string (default:
3184
 
@samp{"C"}).
3185
 
 
3186
 
@item mh-note-cur
3187
 
@vindex @code{mh-note-cur}
3188
 
The current message (in MH, not in mh-e) is marked by this string
3189
 
(default: @samp{"+"}).  See also @code{mh-cur-scan-msg-regexp}.
3190
 
 
3191
 
@item mh-note-repl
3192
 
@vindex @code{mh-note-repl}
3193
 
Messages that have been replied to are marked by this string (default:
3194
 
@samp{"-"}).
3195
 
 
3196
 
@item mh-note-forw
3197
 
@vindex @code{mh-note-forw}
3198
 
Messages that have been forwarded are marked by this string (default:
3199
 
@samp{"F"}).
3200
 
 
3201
 
@item mh-note-dist
3202
 
@vindex @code{mh-note-dist}
3203
 
Messages that have been redistributed are marked by this string
3204
 
(default: @samp{"R"}).
3205
 
 
3206
 
@item mh-note-printed
3207
 
@vindex @code{mh-note-printed}
3208
 
Messages that have been printed are marked by this string (default:
3209
 
@samp{"P"}).
3210
 
 
3211
 
@item mh-note-seq
3212
 
@vindex @code{mh-note-seq}
3213
 
Messages in a sequence are marked by this string (default: @samp{"%"}).
3214
 
@end table
3215
 
 
3216
 
@node Customizing Printing, Customizing Files and Pipes, Customizing Organizing, Customizing Moving Mail
3217
 
@subsection Printing Your Mail
3218
 
 
3219
 
@cindex printing
3220
 
@vindex @code{mh-print-background}
3221
 
@vindex @code{mh-lpr-command-format}
3222
 
@cindex @code{lpr}
3223
 
@cindex Unix commands, @code{lpr}
3224
 
 
3225
 
Normally messages are printed in the foreground.  If this is slow on
3226
 
your system, you may elect to set @code{mh-print-background} to
3227
 
non-@code{nil} to print in the background.  If you do this, do not delete
3228
 
the message until it is printed or else the output may be truncated.
3229
 
The variable @code{mh-lpr-command-format} controls how the printing is
3230
 
actually done.  The string can contain one escape, @samp{%s}, which is
3231
 
filled with the name of the folder and the message number and is useful
3232
 
for print job names.  As an example, the default is @samp{"lpr -J
3233
 
'%s'"}.
3234
 
 
3235
 
@node Customizing Files and Pipes, Customizing Finishing Up, Customizing Printing, Customizing Moving Mail
3236
 
@subsection Files and Pipes
3237
 
 
3238
 
@cindex using files
3239
 
@cindex using pipes
3240
 
@findex @code{mh-store-msg}
3241
 
@vindex @code{mh-store-default-directory}
3242
 
 
3243
 
The initial directory for the @code{mh-store-msg} command is held in
3244
 
@code{mh-store-default-directory}.  Since I almost always run
3245
 
@code{mh-store-msg} on sources, I set it to my personal source directory
3246
 
like this:
3247
 
 
3248
 
@vindex @code{mh-store-default-directory}, example
3249
 
 
3250
 
@lisp
3251
 
(setq mh-store-default-directory (expand-file-name "~/src/"))
3252
 
@end lisp
3253
 
 
3254
 
@findex @code{mh-store-buffer}
3255
 
@cindex @code{uuencode}
3256
 
@cindex Unix commands, @code{uuencode}
3257
 
@cindex @code{shar}
3258
 
@cindex Unix commands, @code{shar}
3259
 
 
3260
 
Subsequent incarnations of @code{mh-store-msg} offer the last directory
3261
 
used as the default.  By the way, @code{mh-store-msg} calls the Emacs
3262
 
Lisp function @code{mh-store-buffer}.  I mention this because you can use
3263
 
it directly if you're editing a buffer that contains a file that has
3264
 
been run through @code{uuencode} or @code{shar}.  For example, you can
3265
 
extract the contents of the current buffer in your home directory by
3266
 
typing @kbd{M-x mh-store-buffer @key{RET} ~ @key{RET}}.
3267
 
 
3268
 
@node Customizing Finishing Up,  , Customizing Files and Pipes, Customizing Moving Mail
3269
 
@subsection Finishing Up
3270
 
 
3271
 
@cindex quitting
3272
 
@vindex @code{mh-before-quit-hook}
3273
 
@vindex @code{mh-quit-hook}
3274
 
@findex @code{mh-execute-commands}
3275
 
 
3276
 
The two variables @code{mh-before-quit-hook} and @code{mh-quit-hook} are
3277
 
called by @kbd{q} (@code{mh-quit}).  The former one is called before the
3278
 
quit occurs, so you might use it to perform any mh-e operations; you
3279
 
could perform some query and abort the quit or call
3280
 
@code{mh-execute-commands}, for example.  The latter is not run in an
3281
 
mh-e context, so you might use it to modify the window setup.
3282
 
 
3283
 
@node Customizing Searching,  , Customizing Moving Mail, Customizing mh-e
3284
 
@section Searching Through Messages
3285
 
 
3286
 
@cindex searching
3287
 
@vindex @code{mh-pick-mode-hook}
3288
 
@vindex @code{mh-partial-folder-mode-line-annotation}
3289
 
 
3290
 
If you find that you do the same thing over and over when editing the
3291
 
search template, you may wish to bind some shortcuts to keys.  This can
3292
 
be done with the variable @code{mh-pick-mode-hook}, which is called when
3293
 
@kbd{M-s} (@code{mh-search-folder}) is run on a new pattern.  
3294
 
 
3295
 
The string
3296
 
@code{mh-partial-folder-mode-line-annotation} is used to annotate the
3297
 
mode line when only a portion of the folder is shown.  For example, this
3298
 
will be displayed after running @kbd{M-s} (@code{mh-search-folder}) to
3299
 
list messages based on some search criteria (see @ref{Searching}).  The
3300
 
default annotation of @samp{"select"} yields a mode line that looks
3301
 
like:
3302
 
 
3303
 
@example
3304
 
--%%-@{+inbox/select@} 2 msgs (2-3)      (MH-Folder)--All-----------------
3305
 
@end example
3306
 
 
3307
 
@node Odds and Ends, History, Customizing mh-e, Top
3308
 
@appendix Odds and Ends
3309
 
 
3310
 
This appendix covers a few topics that don't fit elsewhere.  Here I tell
3311
 
you how to report bugs and how to get on the mh-e mailing list.  I also
3312
 
point out some additional sources of information.
3313
 
 
3314
 
@menu
3315
 
* Bug Reports::                 
3316
 
* Mailing List::                
3317
 
* MH FAQ::                      
3318
 
* Getting mh-e::                
3319
 
@end menu
3320
 
 
3321
 
@node Bug Reports, Mailing List, Odds and Ends, Odds and Ends
3322
 
@appendixsec Bug Reports
3323
 
 
3324
 
@cindex bugs
3325
 
@cindex Wohler, Bill
3326
 
@cindex SourceForge
3327
 
 
3328
 
The current maintainer of mh-e is Bill Wohler
3329
 
<@i{wohler@@newt.com}>. Bug reports should be filed at
3330
 
@uref{https://sourceforge.net/bugs/?group_id=13357, SourceForge}.
3331
 
Please include the output of
3332
 
@kbd{M-x mh-version} (@pxref{Miscellaneous}) in any bug report you send.
3333
 
 
3334
 
@node Mailing List, MH FAQ, Bug Reports, Odds and Ends
3335
 
@appendixsec mh-e Mailing List
3336
 
 
3337
 
@cindex mailing list
3338
 
@cindex SourceForge
3339
 
 
3340
 
There are actually several mailing lists for mh-e. They are
3341
 
@i{mh-e-users@@lists.sourceforge.net},
3342
 
@i{mh-e-announce@@lists.sourceforge.net}, and
3343
 
@i{mh-e-devel@@lists.sourceforge.net}. You can subscribe or view the
3344
 
archives at @uref{https://sourceforge.net/mail/?group_id=13357,
3345
 
SourceForge}. Do not report bugs on these lists; please submit them
3346
 
via SourceForge (@pxref{Bug Reports}).
3347
 
 
3348
 
@node MH FAQ, Getting mh-e, Mailing List, Odds and Ends
3349
 
@appendixsec MH FAQ
3350
 
 
3351
 
@cindex MH FAQ
3352
 
@cindex FAQ
3353
 
 
3354
 
An FAQ appears monthly in the newsgroup @samp{comp.mail.mh}.  While very
3355
 
little is there that deals with mh-e specifically, there is an
3356
 
incredible wealth of material about MH itself which you will find
3357
 
useful.  The subject of the FAQ is @cite{MH Frequently Asked Questions
3358
 
(FAQ) with Answers}.
3359
 
 
3360
 
The FAQ is available via the World Wide Web (WWW) at
3361
 
@uref{http://www.faqs.org/faqs/mail/mh-faq/part1/preamble.html, faqs.org}.
3362
 
 
3363
 
@node Getting mh-e,  , MH FAQ, Odds and Ends
3364
 
@appendixsec Getting mh-e
3365
 
 
3366
 
@cindex obtaining mh-e
3367
 
 
3368
 
The version of mh-e in the current version of Emacs should be up to
3369
 
date. It is most likely to be more up to date than the copy that comes
3370
 
with the the MH distribution in @file{miscellany/mh-e}.
3371
 
 
3372
 
New mh-e releases will appear at
3373
 
@uref{https://sourceforge.net/project/showfiles.php?group_id=13357,
3374
 
SourceForge} before they appear in an Emacs release. You can read the
3375
 
release notes on that page to determine if the given release of mh-e
3376
 
is already installed in your version of Emacs.
3377
 
 
3378
 
If you go this route, I suggest that you extract the files from
3379
 
@file{mh-e-@var{m.n}.tgz} in the following fashion:
3380
 
 
3381
 
@example
3382
 
@group
3383
 
% @kbd{cd}                                  # @r{Start in your home directory}
3384
 
% @kbd{mkdir lib lib/emacs}                 # @r{Create directory for mh-e}
3385
 
% @kbd{cd lib/emacs}
3386
 
% @kbd{zcat @var{path/to/}mh-e-@var{m.n}.tgz | tar xvf -}    # @r{Extract files}
3387
 
@end group
3388
 
@end example
3389
 
 
3390
 
@cindex @file{.emacs}
3391
 
@cindex files, @file{.emacs}
3392
 
 
3393
 
To use these new files, add the following to @file{~/.emacs}:
3394
 
 
3395
 
@lisp
3396
 
(setq load-path (cons (expand-file-name "~/lib/emacs") load-path))
3397
 
@end lisp
3398
 
 
3399
 
@cindex news
3400
 
@cindex files, @samp{MH-E-NEWS}
3401
 
 
3402
 
That's it!  If you're already running Emacs, please quit that session
3403
 
and start again to load in the new mh-e.  Check that you're running the
3404
 
new version with the command @kbd{M-x mh-version} after running any mh-e
3405
 
command.  The distribution comes with a file called @file{MH-E-NEWS} so
3406
 
you can see what's new.
3407
 
 
3408
 
@node    History, Copying, Odds and Ends, Top
3409
 
@appendix History of mh-e
3410
 
 
3411
 
@cindex Gildea, Stephen
3412
 
@cindex Larus, Jim
3413
 
@cindex Reid, Brian
3414
 
@cindex SourceForge
3415
 
@cindex history of mh-e
3416
 
 
3417
 
mh-e was originally written by Brian Reid in 1983 and has changed
3418
 
hands several times since then. Jim Larus wanted to do something
3419
 
similar for GNU Emacs, and ended up completely rewriting it that same
3420
 
year. In 1989, Stephen Gildea picked it up and added many improvements.
3421
 
Bill Wohler then took over in 2000 and moved its development to
3422
 
@uref{http://sourceforge.net/, SourceForge}.
3423
 
 
3424
 
@menu
3425
 
* From Brian Reid::             
3426
 
* From Jim Larus::              
3427
 
* From Stephen Gildea::         
3428
 
@end menu
3429
 
 
3430
 
@node From Brian Reid, From Jim Larus, History, History
3431
 
@appendixsec From Brian Reid
3432
 
 
3433
 
@cindex Reid, Brian
3434
 
 
3435
 
One day in 1983 I got the flu and had to stay home from work for three
3436
 
days with nothing to do.  I used that time to write MHE@.  The
3437
 
fundamental idea behind MHE was that it was a ``puppeteer'' driving the MH
3438
 
programs underneath it.  MH had a model that the editor was supposed to
3439
 
run as a subprocess of the mailer, which seemed to me at the time to be
3440
 
the tail wagging the dog.  So I turned it around and made the editor
3441
 
drive the MH programs.  I made sure that the UCI people (who were
3442
 
maintaining MH at the time) took in my changes and made them stick.
3443
 
 
3444
 
Today, I still use my own version of MHE because I don't at all like the
3445
 
way that GNU mh-e works and I've never gotten to be good enough at
3446
 
hacking Emacs Lisp to make GNU mh-e do what I want.  The Gosling-emacs
3447
 
version of MHE and the GNU Emacs version of mh-e have almost nothing in
3448
 
common except similar names.  They work differently, have different
3449
 
conceptual models, and have different key bindings.  @footnote{After
3450
 
reading this article, I questioned Brian about his version of MHE, and
3451
 
received some great ideas for improving mh-e such as a dired-like method
3452
 
of selecting folders; and removing the prompting when sending mail,
3453
 
filling in the blanks in the draft buffer instead.  I passed them on to
3454
 
Stephen Gildea, the current maintainer, and he was excited about the
3455
 
ideas as well.  Perhaps one day, mh-e will again resemble MHE, although
3456
 
none of these ideas are manifest in Version 5.0.}
3457
 
 
3458
 
Brian Reid, June 1994
3459
 
 
3460
 
@node From Jim Larus, From Stephen Gildea, From Brian Reid, History
3461
 
@appendixsec From Jim Larus
3462
 
 
3463
 
@cindex Larus, Jim
3464
 
 
3465
 
Brian Reid, while at CMU or shortly after going to Stanford wrote a mail
3466
 
reading program called MHE for Gosling Emacs.  It had much the same
3467
 
structure as mh-e (i.e., invoked MH programs), though it was simpler and
3468
 
the commands were slightly different.  Unfortunately, I no longer have a
3469
 
copy so the differences are lost in the mists of time.
3470
 
 
3471
 
In '82-83, I was working at BBN and wrote a lot of mlisp code in Gosling
3472
 
Emacs to make it look more like Tennex Emacs.  One of the packages that
3473
 
I picked up and improved was Reid's mail system.  In '83, I went back to
3474
 
Berkeley.  About that time, Stallman's first version of GNU Emacs came
3475
 
out and people started to move to it from Gosling Emacs (as I recall,
3476
 
the transition took a year or two).  I decided to port Reid's MHE and
3477
 
used the mlisp to Emacs Lisp translator that came with GNU Emacs.  It
3478
 
did a lousy job and the resulting code didn't work, so I bit the bullet
3479
 
and rewrote the code by hand (it was a lot smaller and simpler then, so
3480
 
it took only a day or two).
3481
 
 
3482
 
Soon after that, mh-e became part of the standard Emacs distribution and
3483
 
suggestions kept dribbling in for improvements.  mh-e soon reached
3484
 
sufficient functionality to keep me happy, but I kept on improving it
3485
 
because I was a graduate student with plenty of time on my hands and it
3486
 
was more fun than my dissertation.  In retrospect, the one thing that I
3487
 
regret is not writing any documentation, which seriously limited the use
3488
 
and appeal of the package.
3489
 
 
3490
 
@cindex @code{xmh}, in mh-e history
3491
 
 
3492
 
In '89, I came to Wisconsin as a professor and decided not to work on
3493
 
mh-e.  It was stable, except for minor bugs, and had enough
3494
 
functionality, so I let it be for a few years.  Stephen Gildea of BBN
3495
 
began to pester me about the bugs, but I ignored them.  In 1990, he went
3496
 
off to the X Consortium, said good bye, and said that he would now be
3497
 
using @code{xmh}.  A few months later, he came back and said that he
3498
 
couldn't stand @code{xmh} and could I put a few more bug fixes into
3499
 
mh-e.  At that point, I had no interest in fixing mh-e, so I gave the
3500
 
responsibility of maintenance to him and he has done a fine job since
3501
 
then.
3502
 
 
3503
 
Jim Larus, June 1994
3504
 
 
3505
 
@node From Stephen Gildea,  , From Jim Larus, History
3506
 
@appendixsec From Stephen Gildea
3507
 
 
3508
 
@cindex Gildea, Stephen
3509
 
 
3510
 
In 1987 I went to work for Bolt Beranek and Newman, as Jim had before
3511
 
me.  In my previous job, I had been using RMAIL, but as my folders tend
3512
 
to run large, I was frustrated with the speed of RMAIL@.  However, I
3513
 
stuck with it because I wanted the GNU Emacs interface.  I am very
3514
 
familiar and comfortable with the Emacs interface (with just a few
3515
 
modifications of my own) and dislike having to use applications with
3516
 
embedded editors; they never live up to Emacs.
3517
 
 
3518
 
MH is the mail reader of choice at BBN, so I converted to it.  Since I
3519
 
didn't want to give up using an Emacs interface, I started using mh-e.
3520
 
As is my wont, I started hacking on it almost immediately.  I first used
3521
 
version 3.4m.  One of the first features I added was to treat the folder
3522
 
buffer as a file-visiting buffer: you could lock it, save it, and be
3523
 
warned of unsaved changes when killing it.  I also worked to bring its
3524
 
functionality a little closer to RMAIL@.  Jim Larus was very cooperative
3525
 
about merging in my changes, and my efforts first appeared in version
3526
 
3.6, distributed with Emacs 18.52 in 1988.  Next I decided mh-e was too
3527
 
slow and optimized it a lot.  Version, 3.7, distributed with Emacs 18.56
3528
 
in 1990, was noticeably faster.
3529
 
 
3530
 
When I moved to the X Consortium I became the first person there to not
3531
 
use xmh.  (There is now one other engineer there using mh-e.)  About
3532
 
this point I took over maintenance of mh-e from Jim and was finally able
3533
 
to add some features Jim hadn't accepted, such as the backward searching
3534
 
undo.  My first release was 3.8 (Emacs 18.58) in 1992.
3535
 
 
3536
 
Now, in 1994, we see a flurry of releases, with both 4.0 and 5.0.
3537
 
Version 4.0 added many new features, including background folder
3538
 
collection and support for composing @sc{mime} messages.  (Reading
3539
 
@sc{mime} messages remains to be done, alas.)  While writing this book,
3540
 
Bill Wohler gave mh-e its closest examination ever, uncovering bugs and
3541
 
inconsistencies that required a new major version to fix, and so version
3542
 
5 was released.
3543
 
 
3544
 
Stephen Gildea, June 1994
3545
 
 
3546
 
@node Copying, Command Index, History, Top
3547
 
@appendix GNU GENERAL PUBLIC LICENSE
3548
 
 
3549
 
@center Version 2, June 1991
3550
 
 
3551
 
@display
3552
 
Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
3553
 
59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
3554
 
 
3555
 
Everyone is permitted to copy and distribute verbatim copies
3556
 
of this license document, but changing it is not allowed.
3557
 
@end display
3558
 
 
3559
 
@appendixsec Preamble
3560
 
 
3561
 
  The licenses for most software are designed to take away your
3562
 
freedom to share and change it.  By contrast, the GNU General Public
3563
 
License is intended to guarantee your freedom to share and change free
3564
 
software---to make sure the software is free for all its users.  This
3565
 
General Public License applies to most of the Free Software
3566
 
Foundation's software and to any other program whose authors commit to
3567
 
using it.  (Some other Free Software Foundation software is covered by
3568
 
the GNU Library General Public License instead.)  You can apply it to
3569
 
your programs, too.
3570
 
 
3571
 
  When we speak of free software, we are referring to freedom, not
3572
 
price.  Our General Public Licenses are designed to make sure that you
3573
 
have the freedom to distribute copies of free software (and charge for
3574
 
this service if you wish), that you receive source code or can get it
3575
 
if you want it, that you can change the software or use pieces of it
3576
 
in new free programs; and that you know you can do these things.
3577
 
 
3578
 
  To protect your rights, we need to make restrictions that forbid
3579
 
anyone to deny you these rights or to ask you to surrender the rights.
3580
 
These restrictions translate to certain responsibilities for you if you
3581
 
distribute copies of the software, or if you modify it.
3582
 
 
3583
 
  For example, if you distribute copies of such a program, whether
3584
 
gratis or for a fee, you must give the recipients all the rights that
3585
 
you have.  You must make sure that they, too, receive or can get the
3586
 
source code.  And you must show them these terms so they know their
3587
 
rights.
3588
 
 
3589
 
  We protect your rights with two steps: (1) copyright the software, and
3590
 
(2) offer you this license which gives you legal permission to copy,
3591
 
distribute and/or modify the software.
3592
 
 
3593
 
  Also, for each author's protection and ours, we want to make certain
3594
 
that everyone understands that there is no warranty for this free
3595
 
software.  If the software is modified by someone else and passed on, we
3596
 
want its recipients to know that what they have is not the original, so
3597
 
that any problems introduced by others will not reflect on the original
3598
 
authors' reputations.
3599
 
 
3600
 
  Finally, any free program is threatened constantly by software
3601
 
patents.  We wish to avoid the danger that redistributors of a free
3602
 
program will individually obtain patent licenses, in effect making the
3603
 
program proprietary.  To prevent this, we have made it clear that any
3604
 
patent must be licensed for everyone's free use or not licensed at all.
3605
 
 
3606
 
  The precise terms and conditions for copying, distribution and
3607
 
modification follow.
3608
 
 
3609
 
@iftex
3610
 
@appendixsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
3611
 
@end iftex
3612
 
@ifinfo
3613
 
@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
3614
 
@end ifinfo
3615
 
 
3616
 
@enumerate 0
3617
 
@item
3618
 
This License applies to any program or other work which contains
3619
 
a notice placed by the copyright holder saying it may be distributed
3620
 
under the terms of this General Public License.  The ``Program,'' below,
3621
 
refers to any such program or work, and a ``work based on the Program''
3622
 
means either the Program or any derivative work under copyright law:
3623
 
that is to say, a work containing the Program or a portion of it,
3624
 
either verbatim or with modifications and/or translated into another
3625
 
language.  (Hereinafter, translation is included without limitation in
3626
 
the term ``modification.'')  Each licensee is addressed as ``you.''
3627
 
 
3628
 
Activities other than copying, distribution and modification are not
3629
 
covered by this License; they are outside its scope.  The act of
3630
 
running the Program is not restricted, and the output from the Program
3631
 
is covered only if its contents constitute a work based on the
3632
 
Program (independent of having been made by running the Program).
3633
 
Whether that is true depends on what the Program does.
3634
 
 
3635
 
@item
3636
 
You may copy and distribute verbatim copies of the Program's
3637
 
source code as you receive it, in any medium, provided that you
3638
 
conspicuously and appropriately publish on each copy an appropriate
3639
 
copyright notice and disclaimer of warranty; keep intact all the
3640
 
notices that refer to this License and to the absence of any warranty;
3641
 
and give any other recipients of the Program a copy of this License
3642
 
along with the Program.
3643
 
 
3644
 
You may charge a fee for the physical act of transferring a copy, and
3645
 
you may at your option offer warranty protection in exchange for a fee.
3646
 
 
3647
 
@item
3648
 
You may modify your copy or copies of the Program or any portion
3649
 
of it, thus forming a work based on the Program, and copy and
3650
 
distribute such modifications or work under the terms of Section 1
3651
 
above, provided that you also meet all of these conditions:
3652
 
 
3653
 
@enumerate a
3654
 
@item
3655
 
You must cause the modified files to carry prominent notices
3656
 
stating that you changed the files and the date of any change.
3657
 
 
3658
 
@item
3659
 
You must cause any work that you distribute or publish, that in
3660
 
whole or in part contains or is derived from the Program or any
3661
 
part thereof, to be licensed as a whole at no charge to all third
3662
 
parties under the terms of this License.
3663
 
 
3664
 
@item
3665
 
If the modified program normally reads commands interactively
3666
 
when run, you must cause it, when started running for such
3667
 
interactive use in the most ordinary way, to print or display an
3668
 
announcement including an appropriate copyright notice and a
3669
 
notice that there is no warranty (or else, saying that you provide
3670
 
a warranty) and that users may redistribute the program under
3671
 
these conditions, and telling the user how to view a copy of this
3672
 
License.  (Exception: if the Program itself is interactive but
3673
 
does not normally print such an announcement, your work based on
3674
 
the Program is not required to print an announcement.)
3675
 
@end enumerate
3676
 
 
3677
 
These requirements apply to the modified work as a whole.  If
3678
 
identifiable sections of that work are not derived from the Program,
3679
 
and can be reasonably considered independent and separate works in
3680
 
themselves, then this License, and its terms, do not apply to those
3681
 
sections when you distribute them as separate works.  But when you
3682
 
distribute the same sections as part of a whole which is a work based
3683
 
on the Program, the distribution of the whole must be on the terms of
3684
 
this License, whose permissions for other licensees extend to the
3685
 
entire whole, and thus to each and every part regardless of who wrote it.
3686
 
 
3687
 
Thus, it is not the intent of this section to claim rights or contest
3688
 
your rights to work written entirely by you; rather, the intent is to
3689
 
exercise the right to control the distribution of derivative or
3690
 
collective works based on the Program.
3691
 
 
3692
 
In addition, mere aggregation of another work not based on the Program
3693
 
with the Program (or with a work based on the Program) on a volume of
3694
 
a storage or distribution medium does not bring the other work under
3695
 
the scope of this License.
3696
 
 
3697
 
@item
3698
 
You may copy and distribute the Program (or a work based on it,
3699
 
under Section 2) in object code or executable form under the terms of
3700
 
Sections 1 and 2 above provided that you also do one of the following:
3701
 
 
3702
 
@enumerate a
3703
 
@item
3704
 
Accompany it with the complete corresponding machine-readable
3705
 
source code, which must be distributed under the terms of Sections
3706
 
1 and 2 above on a medium customarily used for software interchange; or,
3707
 
 
3708
 
@item
3709
 
Accompany it with a written offer, valid for at least three
3710
 
years, to give any third party, for a charge no more than your
3711
 
cost of physically performing source distribution, a complete
3712
 
machine-readable copy of the corresponding source code, to be
3713
 
distributed under the terms of Sections 1 and 2 above on a medium
3714
 
customarily used for software interchange; or,
3715
 
 
3716
 
@item
3717
 
Accompany it with the information you received as to the offer
3718
 
to distribute corresponding source code.  (This alternative is
3719
 
allowed only for noncommercial distribution and only if you
3720
 
received the program in object code or executable form with such
3721
 
an offer, in accord with Subsection b above.)
3722
 
@end enumerate
3723
 
 
3724
 
The source code for a work means the preferred form of the work for
3725
 
making modifications to it.  For an executable work, complete source
3726
 
code means all the source code for all modules it contains, plus any
3727
 
associated interface definition files, plus the scripts used to
3728
 
control compilation and installation of the executable.  However, as a
3729
 
special exception, the source code distributed need not include
3730
 
anything that is normally distributed (in either source or binary
3731
 
form) with the major components (compiler, kernel, and so on) of the
3732
 
operating system on which the executable runs, unless that component
3733
 
itself accompanies the executable.
3734
 
 
3735
 
If distribution of executable or object code is made by offering
3736
 
access to copy from a designated place, then offering equivalent
3737
 
access to copy the source code from the same place counts as
3738
 
distribution of the source code, even though third parties are not
3739
 
compelled to copy the source along with the object code.
3740
 
 
3741
 
@item
3742
 
You may not copy, modify, sublicense, or distribute the Program
3743
 
except as expressly provided under this License.  Any attempt
3744
 
otherwise to copy, modify, sublicense or distribute the Program is
3745
 
void, and will automatically terminate your rights under this License.
3746
 
However, parties who have received copies, or rights, from you under
3747
 
this License will not have their licenses terminated so long as such
3748
 
parties remain in full compliance.
3749
 
 
3750
 
@item
3751
 
You are not required to accept this License, since you have not
3752
 
signed it.  However, nothing else grants you permission to modify or
3753
 
distribute the Program or its derivative works.  These actions are
3754
 
prohibited by law if you do not accept this License.  Therefore, by
3755
 
modifying or distributing the Program (or any work based on the
3756
 
Program), you indicate your acceptance of this License to do so, and
3757
 
all its terms and conditions for copying, distributing or modifying
3758
 
the Program or works based on it.
3759
 
 
3760
 
@item
3761
 
Each time you redistribute the Program (or any work based on the
3762
 
Program), the recipient automatically receives a license from the
3763
 
original licensor to copy, distribute or modify the Program subject to
3764
 
these terms and conditions.  You may not impose any further
3765
 
restrictions on the recipients' exercise of the rights granted herein.
3766
 
You are not responsible for enforcing compliance by third parties to
3767
 
this License.
3768
 
 
3769
 
@item
3770
 
If, as a consequence of a court judgment or allegation of patent
3771
 
infringement or for any other reason (not limited to patent issues),
3772
 
conditions are imposed on you (whether by court order, agreement or
3773
 
otherwise) that contradict the conditions of this License, they do not
3774
 
excuse you from the conditions of this License.  If you cannot
3775
 
distribute so as to satisfy simultaneously your obligations under this
3776
 
License and any other pertinent obligations, then as a consequence you
3777
 
may not distribute the Program at all.  For example, if a patent
3778
 
license would not permit royalty-free redistribution of the Program by
3779
 
all those who receive copies directly or indirectly through you, then
3780
 
the only way you could satisfy both it and this License would be to
3781
 
refrain entirely from distribution of the Program.
3782
 
 
3783
 
If any portion of this section is held invalid or unenforceable under
3784
 
any particular circumstance, the balance of the section is intended to
3785
 
apply and the section as a whole is intended to apply in other
3786
 
circumstances.
3787
 
 
3788
 
It is not the purpose of this section to induce you to infringe any
3789
 
patents or other property right claims or to contest validity of any
3790
 
such claims; this section has the sole purpose of protecting the
3791
 
integrity of the free software distribution system, which is
3792
 
implemented by public license practices.  Many people have made
3793
 
generous contributions to the wide range of software distributed
3794
 
through that system in reliance on consistent application of that
3795
 
system; it is up to the author/donor to decide if he or she is willing
3796
 
to distribute software through any other system and a licensee cannot
3797
 
impose that choice.
3798
 
 
3799
 
This section is intended to make thoroughly clear what is believed to
3800
 
be a consequence of the rest of this License.
3801
 
 
3802
 
@item
3803
 
If the distribution and/or use of the Program is restricted in
3804
 
certain countries either by patents or by copyrighted interfaces, the
3805
 
original copyright holder who places the Program under this License
3806
 
may add an explicit geographical distribution limitation excluding
3807
 
those countries, so that distribution is permitted only in or among
3808
 
countries not thus excluded.  In such case, this License incorporates
3809
 
the limitation as if written in the body of this License.
3810
 
 
3811
 
@item
3812
 
The Free Software Foundation may publish revised and/or new versions
3813
 
of the General Public License from time to time.  Such new versions will
3814
 
be similar in spirit to the present version, but may differ in detail to
3815
 
address new problems or concerns.
3816
 
 
3817
 
Each version is given a distinguishing version number.  If the Program
3818
 
specifies a version number of this License which applies to it and ``any
3819
 
later version,'' you have the option of following the terms and conditions
3820
 
either of that version or of any later version published by the Free
3821
 
Software Foundation.  If the Program does not specify a version number of
3822
 
this License, you may choose any version ever published by the Free Software
3823
 
Foundation.
3824
 
 
3825
 
@item
3826
 
If you wish to incorporate parts of the Program into other free
3827
 
programs whose distribution conditions are different, write to the author
3828
 
to ask for permission.  For software which is copyrighted by the Free
3829
 
Software Foundation, write to the Free Software Foundation; we sometimes
3830
 
make exceptions for this.  Our decision will be guided by the two goals
3831
 
of preserving the free status of all derivatives of our free software and
3832
 
of promoting the sharing and reuse of software generally.
3833
 
 
3834
 
@iftex
3835
 
@heading NO WARRANTY
3836
 
@end iftex
3837
 
@ifinfo
3838
 
@center NO WARRANTY
3839
 
@end ifinfo
3840
 
 
3841
 
@item
3842
 
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
3843
 
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@.  EXCEPT WHEN
3844
 
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
3845
 
PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
3846
 
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
3847
 
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@.  THE ENTIRE RISK AS
3848
 
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU@.  SHOULD THE
3849
 
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
3850
 
REPAIR OR CORRECTION.
3851
 
 
3852
 
@item
3853
 
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
3854
 
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
3855
 
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
3856
 
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
3857
 
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
3858
 
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
3859
 
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
3860
 
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
3861
 
POSSIBILITY OF SUCH DAMAGES.
3862
 
@end enumerate
3863
 
 
3864
 
@iftex
3865
 
@heading END OF TERMS AND CONDITIONS
3866
 
@end iftex
3867
 
@ifinfo
3868
 
@center END OF TERMS AND CONDITIONS
3869
 
@end ifinfo
3870
 
 
3871
 
@page
3872
 
@appendixsec How to Apply These Terms to Your New Programs
3873
 
 
3874
 
  If you develop a new program, and you want it to be of the greatest
3875
 
possible use to the public, the best way to achieve this is to make it
3876
 
free software which everyone can redistribute and change under these terms.
3877
 
 
3878
 
  To do so, attach the following notices to the program.  It is safest
3879
 
to attach them to the start of each source file to most effectively
3880
 
convey the exclusion of warranty; and each file should have at least
3881
 
the ``copyright'' line and a pointer to where the full notice is found.
3882
 
 
3883
 
@smallexample
3884
 
@var{one line to give the program's name and an idea of what it does.}
3885
 
Copyright (C) 20@var{yy}  @var{name of author}
3886
 
 
3887
 
This program is free software; you can redistribute it and/or
3888
 
modify it under the terms of the GNU General Public License
3889
 
as published by the Free Software Foundation; either version 2
3890
 
of the License, or (at your option) any later version.
3891
 
 
3892
 
This program is distributed in the hope that it will be useful,
3893
 
but WITHOUT ANY WARRANTY; without even the implied warranty of
3894
 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the
3895
 
GNU General Public License for more details.
3896
 
 
3897
 
You should have received a copy of the GNU General Public License along
3898
 
with this program; if not, write to the Free Software Foundation, Inc.,
3899
 
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
3900
 
@end smallexample
3901
 
 
3902
 
Also add information on how to contact you by electronic and paper mail.
3903
 
 
3904
 
If the program is interactive, make it output a short notice like this
3905
 
when it starts in an interactive mode:
3906
 
 
3907
 
@smallexample
3908
 
Gnomovision version 69, Copyright (C) 20@var{yy} @var{name of author}
3909
 
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
3910
 
type `show w'.  This is free software, and you are welcome
3911
 
to redistribute it under certain conditions; type `show c' 
3912
 
for details.
3913
 
@end smallexample
3914
 
 
3915
 
The hypothetical commands @samp{show w} and @samp{show c} should show
3916
 
the appropriate parts of the General Public License.  Of course, the
3917
 
commands you use may be called something other than @samp{show w} and
3918
 
@samp{show c}; they could even be mouse-clicks or menu items---whatever
3919
 
suits your program.
3920
 
 
3921
 
You should also get your employer (if you work as a programmer) or your
3922
 
school, if any, to sign a ``copyright disclaimer'' for the program, if
3923
 
necessary.  Here is a sample; alter the names:
3924
 
 
3925
 
@smallexample
3926
 
@group
3927
 
Yoyodyne, Inc., hereby disclaims all copyright
3928
 
interest in the program `Gnomovision'
3929
 
(which makes passes at compilers) written 
3930
 
by James Hacker.
3931
 
 
3932
 
@var{signature of Ty Coon}, 1 April 1989
3933
 
Ty Coon, President of Vice
3934
 
@end group
3935
 
@end smallexample
3936
 
 
3937
 
This General Public License does not permit incorporating your program into
3938
 
proprietary programs.  If your program is a subroutine library, you may
3939
 
consider it more useful to permit linking proprietary applications with the
3940
 
library.  If this is what you want to do, use the GNU Library General
3941
 
Public License instead of this License.
3942
 
 
3943
 
@node    Command Index, Variable Index, Copying, Top
3944
 
@unnumbered Command Index
3945
 
 
3946
 
@printindex fn
3947
 
 
3948
 
@node    Variable Index, Concept Index, Command Index, Top
3949
 
@unnumbered Variable Index
3950
 
 
3951
 
@printindex vr
3952
 
 
3953
 
@node    Concept Index,  , Variable Index, Top
3954
 
@unnumbered Concept Index
3955
 
 
3956
 
@printindex cp
3957
 
 
3958
 
@contents
3959
 
@bye
3960
 
 
3961
 
@c XXX In the sections on customizing mh-e, you can add cross-references
3962
 
@c to the Emacs manual and the Emacs Lisp manual wherever they are
3963
 
@c useful. @pxref{node, , section, emacs, The GNU Emacs Manual}