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