comparison man/mh-e.texi @ 0:376386a54a3c r19-14

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