*** empty log message ***
[gnus] / texi / message.texi
1 \input texinfo                  @c -*-texinfo-*-
2
3 @setfilename message
4 @settitle Message 0.1 Manual
5 @synindex fn cp
6 @synindex vr cp
7 @synindex pg cp
8 @iftex
9 @finalout
10 @end iftex
11 @setchapternewpage odd
12
13 @ifinfo
14
15 This file documents Message, the Emacs message composition mode.
16
17 Copyright (C) 1996 Free Software Foundation, Inc.
18
19 Permission is granted to make and distribute verbatim copies of
20 this manual provided the copyright notice and this permission notice
21 are preserved on all copies.
22
23 @ignore
24 Permission is granted to process this file through Tex and print the
25 results, provided the printed document carries copying permission
26 notice identical to this one except for the removal of this paragraph
27 (this paragraph not being relevant to the printed manual).
28
29 @end ignore
30 Permission is granted to copy and distribute modified versions of this
31 manual under the conditions for verbatim copying, provided also that the
32 entire resulting derived work is distributed under the terms of a
33 permission notice identical to this one.
34
35 Permission is granted to copy and distribute translations of this manual
36 into another language, under the above conditions for modified versions.
37 @end ifinfo
38
39 @tex
40
41 @titlepage
42 @title Message 0.1 Manual
43
44 @author by Lars Magne Ingebrigtsen
45 @page
46
47 @vskip 0pt plus 1filll
48 Copyright @copyright{} 1996 Free Software Foundation, Inc. 
49
50 Permission is granted to make and distribute verbatim copies of
51 this manual provided the copyright notice and this permission notice
52 are preserved on all copies.
53
54 Permission is granted to copy and distribute modified versions of this
55 manual under the conditions for verbatim copying, provided that the
56 entire resulting derived work is distributed under the terms of a
57 permission notice identical to this one.
58
59 Permission is granted to copy and distribute translations of this manual
60 into another language, under the above conditions for modified versions.
61
62 @end titlepage
63 @page
64
65 @end tex
66
67 @node Top
68 @top Message
69
70 All message composition (both mail and news) takes place in Message mode
71 buffers.
72
73 @menu
74 * Interface::         Setting up message buffers.
75 * Commands::          Commands you can execute in message mode buffers.
76 * Variables::         Customizing the message buffers.
77 * Compatibility::     Making Message backwards compatible.
78 * Index::             Variable, function and concept index.
79 * Key Index::         List of Message mode keys.
80 @end menu
81
82 This manual corresponds to Message 0.1.  Message is distributed with
83 the Gnus distribution bearing the same version number as this manual
84 has. 
85
86
87 @node Interface
88 @chapter Interface
89
90 When a program (or a person) wants to respond to a message -- reply,
91 follow up, forward, cancel -- the program (or person) should just put
92 point in the buffer where the message is and call the required command.
93 @code{Message} will then pop up a new @code{message} mode buffer with
94 appropriate headers filled out, and the user can edit the message before
95 sending it.
96
97 @menu
98 * New Mail Message::     Editing a brand new mail message.
99 * New News Message::     Editing a brand new news message.
100 * Reply::                Replying via mail.
101 * Wide Reply::           Responding to all people via mail.
102 * Followup::             Following up via news.
103 * Canceling News::       Canceling a news article.
104 * Superseding::          Superseding a message.
105 * Forwarding::           Forwarding a message via news or mail.
106 * Resending::            Resending a mail message.
107 * Bouncing::             Bouncing a mail message.
108 @end menu
109
110
111 @node New Mail Message
112 @section New Mail Message
113
114 @findex message-mail
115 The @code{message-mail} command pops up a new message buffer.  
116
117 Two optional parameters are accepted: The first will be used as the
118 @code{To} header and the second as the @code{Subject} header.  If these
119 aren't present, those two headers will be empty.
120
121
122 @node New News Message
123 @section New News Message
124
125 @findex message-news
126 The @code{message-news} command pops up a new message buffer.  
127
128 This function accepts two optional parameters.  The first will be used
129 as the @code{Newsgroups} header and the second as the @code{Subject}
130 header.  If these aren't present, those two headers will be empty.
131
132
133 @node Reply
134 @section Reply
135
136 @findex message-reply
137 The @code{message-reply} function pops up a message buffer that's a
138 reply to the message in the current buffer.
139
140 @vindex message-reply-to-function
141 Message uses the normal methods to determine where replies are to go,
142 but you can change the behavior to suit your needs by fiddling with the
143 @code{message-reply-to-function} variable.
144
145 If you want the replies to go to the @code{Sender} instead of the
146 @code{From}, you could do something like this:
147
148 @lisp
149 (setq message-reply-to-function
150       (lambda ()
151        (cond ((equal (mail-fetch-field "from") "somebody")
152                (mail-fetch-field "sender"))     
153              (t 
154               nil))))
155 @end lisp
156
157 This function will be called narrowed to the head of the article that is
158 being replied to.
159
160 As you can see, this function should return a string if it has an
161 opinion as to what the To header should be.  If it does not, it should
162 just return @code{nil}, and the normal methods for determining the To
163 header will be used.
164
165 This function can also return a list.  In that case, each list element
166 should be a cons, where the car should be the name of an header
167 (eg. @code{Cc}) and the cdr should be the header value
168 (eg. @samp{larsi@@ifi.uio.no}).  All these headers will be inserted into
169 the head of the outgoing mail. 
170
171
172 @node Wide Reply
173 @section Wide Reply
174
175 @findex message-wide-reply
176 The @code{message-wide-reply} pops up a message buffer that's a wide
177 reply to the message in the current buffer.  A @dfn{wide reply} is a
178 reply that goes out to all people listed in the @code{To}, @code{From}
179 (or @code{Reply-to}) and @code{Cc} headers.
180
181 @vindex message-wide-reply-to-function
182 Message uses the normal methods to determine where wide replies are to go,
183 but you can change the behavior to suit your needs by fiddling with the
184 @code{message-wide-reply-to-function}.  It is used in the same way as
185 @code{message-reply-to-function} (@pxref{Reply}). 
186
187 @findex rmail-dont-reply-to-names
188 Addresses that match the @code{rmail-dont-reply-to-names} regular
189 expression will be removed from the @code{Cc} header.
190
191
192 @node Followup
193 @section Followup
194
195 @findex message-followup
196 The @code{message-followup} command pops up a message buffer that's a
197 followup to the message in the current buffer.
198
199 @vindex message-followup-to-function
200 Message uses the normal methods to determine where followups are to go,
201 but you can change the behavior to suit your needs by fiddling with the
202 @code{message-followup-to-function}.  It is used in the same way as
203 @code{message-reply-to-function} (@pxref{Reply}).
204
205 @vindex message-use-followup-to
206 The @code{message-use-followup-to} variable says what to do about
207 @code{Followup-To} headers.  If it is @code{use}, always use the value.
208 If it is @code{ask} (which is the default), ask whether to use the
209 value.  If it is @code{t}, use the value unless it is @samp{poster}.  If
210 it is @code{nil}, don't use the value.
211
212
213 @node Canceling News
214 @section Canceling News
215
216 @findex message-cancel-news
217 The @code{message-cancel-news} command cancels the article in the
218 current buffer.
219
220
221 @node Superseding
222 @section Superseding
223
224 @findex message-supersede
225 The @code{message-supersede} command pops up a message buffer that will
226 supersede the message in the current buffer.
227
228 @vindex message-ignored-supersedes-headers
229 Headers matching the @code{message-ignored-supersedes-headers} are
230 removed before popping up the new message buffer.  The default is@*
231 @samp{^Path:\\|^Date\\|^NNTP-Posting-Host:\\|^Xref:\\|^Lines:\\|@*
232 ^Received:\\|^X-From-Line:\\|Return-Path:}.
233
234
235
236 @node Forwarding
237 @section Forwarding
238
239 @findex message-forward
240 The @code{message-forward} command pops up a message buffer to forward
241 the message in the current buffer.  If given a prefix, forward using
242 news.
243
244 @table @code
245 @item message-forward-start-separator
246 @vindex message-forward-start-separator
247 Delimiter inserted before forwarded messages.  The default is@*
248 @samp{------- Start of forwarded message -------\n}. 
249
250 @vindex message-forward-end-separator
251 @item message-forward-end-separator
252 @vindex message-forward-end-separator
253 Delimiter inserted after forwarded messages.  The default is@*
254 @samp{------- End of forwarded message -------\n}. 
255
256 @item message-signature-before-forwarded-message
257 @vindex message-signature-before-forwarded-message
258 If this variable is @code{t}, which it is by default, your personal
259 signature will be inserted before the forwarded message.  If not, the
260 forwarded message will be inserted first in the new mail.
261
262 @item message-included-forward-headers
263 @vindex message-included-forward-headers
264 Regexp matching header lines to be included in forwarded messages.  
265
266 @end table
267
268
269 @node Resending
270 @section Resending
271
272 @findex message-resend
273 The @code{message-resend} command will prompt the user for an address
274 and resend the message in the current buffer to that address.
275
276 @vindex message-ignored-resent-headers
277 Headers that match the @code{message-ignored-resent-headers} regexp will
278 be removed before sending the message.  The default is
279 @samp{^Return-receipt}. 
280
281
282 @node Bouncing
283 @section Bouncing
284
285 @findex message-bounce
286 The @code{message-bounce} command will, if the current buffer contains a
287 bounced mail message, pop up a message buffer stripped of the bounce
288 information.  A @dfn{bounced message} is typically a mail you've sent
289 out that has been returned by some @code{mailer-daemon} as
290 undeliverable. 
291
292 @vindex message-ignored-bounced-headers
293 Headers that match the @code{message-ignored-bounced-headers} regexp
294 will be removed before popping up the buffer.  The default is
295 @samp{^Received:}. 
296
297
298 @node Commands
299 @chapter Commands
300
301 @menu
302 * Header Commands::     Commands for moving to headers.
303 * Movement::            Moving around in message buffers.
304 * Insertion::           Inserting things into message buffers.
305 * Various Commands::    Various things.
306 * Sending::             Actually sending the message.
307 * Mail Aliases::        How to use mail aliases.
308 @end menu
309
310
311 @node Header Commands
312 @section Header Commands
313
314 All these commands move to the header in question.  If it doesn't exist,
315 it will be inserted.
316
317 @table @kbd
318
319 @item C-c ?
320 @kindex C-c ?
321 @findex message-goto-to
322 Describe the message mode.
323
324 @item C-c C-f C-t
325 @kindex C-c C-f C-t 
326 @findex message-goto-to
327 Go to the @code{To} header (@code{message-goto-to}).
328
329 @item C-c C-f C-b
330 @kindex C-c C-f C-b 
331 @findex message-goto-bcc
332 Go to the @code{Bcc} header (@code{message-goto-bcc}).
333
334 @item C-c C-f C-f
335 @kindex C-c C-f C-f 
336 @findex message-goto-fcc
337 Go to the @code{Fcc} header (@code{message-goto-fcc}).
338
339 @item C-c C-f C-c
340 @kindex C-c C-f C-c 
341 @findex message-goto-cc
342 Go to the @code{Cc} header (@code{message-goto-cc}).
343
344 @item C-c C-f C-s
345 @kindex C-c C-f C-s 
346 @findex message-goto-subject
347 Go to the @code{Subject} header (@code{message-goto-subject}).
348
349 @item C-c C-f C-r
350 @kindex C-c C-f C-r 
351 @findex message-goto-reply-to
352 Go to the @code{Reply-To} header (@code{message-goto-reply-to}).
353
354 @item C-c C-f C-n
355 @kindex C-c C-f C-n 
356 @findex message-goto-newsgroups
357 Go to the @code{Newsgroups} header (@code{message-goto-newsgroups}).
358
359 @item C-c C-f C-d
360 @kindex C-c C-f C-d 
361 @findex message-goto-distribution
362 Go to the @code{Distribution} header (@code{message-goto-distribution}).
363
364 @item C-c C-f C-o
365 @kindex C-c C-f C-o 
366 @findex message-goto-followup-to
367 Go to the @code{Followup-To} header (@code{message-goto-followup-to}).
368
369 @item C-c C-f C-k
370 @kindex C-c C-f C-k 
371 @findex message-goto-keywords
372 Go to the @code{Keywords} header (@code{message-goto-keywords}).
373
374 @item C-c C-f C-u
375 @kindex C-c C-f C-u 
376 @findex message-goto-summary
377 Go to the @code{Summary} header (@code{message-goto-summary}).
378
379 @end table
380
381
382 @node Movement
383 @section Movement
384
385 @table @kbd
386 @item C-c C-b
387 @kindex C-c C-b 
388 @findex message-goto-body
389 Move to the beginning of the body of the message
390 (@code{message-goto-body}). 
391
392 @item C-c C-i
393 @kindex C-c C-i 
394 @findex message-goto-signature
395 Move to the signature of the message (@code{message-goto-signature}).
396
397 @end table
398
399
400 @node Insertion
401 @section Insertion
402
403 @table @kbd
404
405 @item C-c C-y
406 @kindex C-c C-y 
407 @findex message-yank-original
408 Yank the message that's being replied to into the message buffer
409 (@code{message-yank-original}). 
410
411 @item C-c C-q
412 @kindex C-c C-q 
413 @findex message-fill-yanked-message
414 Fill the yanked message (@code{message-fill-yanked-message}). 
415
416 @item C-c C-w
417 @kindex C-c C-w 
418 @findex message-insert-signature
419 Insert a signature at the end of the buffer
420 (@code{message-insert-signature}).  
421
422 @end table
423
424 @table @code
425 @item message-ignored-cited-headers
426 @vindex message-ignored-cited-headers
427 All headers that match this regexp will be removed from yanked
428 messages.  The default is @samp{.}, which means that all headers will be
429 removed.
430
431 @item message-citation-line-function
432 @vindex message-citation-line-function
433 Function called to insert the citation line.  The default is
434 @code{message-insert-citation-line}. 
435
436 @item message-yank-prefix
437 @vindex message-yank-prefix
438 @cindex yanking
439 @cindex quoting
440 When you are replying to or following up an article, you normally want
441 to quote the person you are answering.  Inserting quoted text is done by
442 @dfn{yanking}, and each quoted line you yank will have
443 @code{message-yank-prefix} prepended to it.  The default is @samp{> }.
444 If it is @code{nil}, just indent the message.
445
446 @item message-indentation-spaces
447 @vindex message-indentation-spaces
448 Number of spaces to indent yanked messages.
449
450 @item message-cite-function
451 @vindex message-cite-function
452 @findex message-cite-original
453 @findex sc-cite-original
454 @cindex Supercite
455 Function for citing an original message.  The default is
456 @code{message-cite-original}.  You can also set it to
457 @code{sc-cite-original} to use Supercite.
458
459 @item message-indent-citation-function
460 @vindex message-indent-citation-function
461 Function for modifying a citation just inserted in the mail buffer.
462 This can also be a list of functions.  Each function can find the
463 citation between @code{(point)} and @code{(mark t)}.  And each function
464 should leave point and mark around the citation text as modified.
465
466 @item message-signature
467 @vindex message-signature
468 String to be inserted at the end of the message buffer.  If @code{t}
469 (which is the default), the @code{message-signature-file} file will be
470 inserted instead.  If a function, the result from the function will be
471 used instead.  If a form, the result from the form will be used instead.
472 If this variable is @code{nil}, no signature will be inserted at all.
473
474 @item message-signature-file
475 @vindex message-signature-file
476 File containing the signature to be inserted at the end of the buffer.
477 The default is @samp{~/.signature}.
478
479 @end table
480
481 Note that RFC1036 says that a signature should be preceded by the three
482 characters @samp{-- } on a line by themselves.  This is to make it
483 easier for the recipient to automatically recognize and process the
484 signature.  So don't remove those characters, even though you might feel
485 that they ruin your beautiful design, like, totally.
486
487 Also note that no signature should be more than four lines long.
488 Including ASCII graphics is an efficient way to get everybody to believe
489 that you are silly and have nothing important to say.
490
491
492
493 @node Various Commands
494 @section Various Commands
495
496 @table @kbd
497
498 @item C-c C-r
499 @kindex C-c C-r 
500 @findex message-caesar-buffer-body
501 Caesar rotate (aka. rot13) the current message
502 (@code{message-caesar-buffer-body}).  If narrowing is in effect, just
503 rotate the visible portion of the buffer.  A numerical prefix says how
504 many places to rotate the text.  The default is 13.
505
506 @item C-c C-e
507 @kindex C-c C-e
508 @findex message-elide-region
509 Elide the text between point and mark (@code{message-elide-region}).
510 The text is killed and an ellipsis (@samp{[...]}) will be inserted in
511 its place.
512
513 @item C-c C-t
514 @kindex C-c C-t 
515 @findex message-insert-to
516 Insert a @code{To} header that contains the @code{Reply-To} or
517 @code{From} header of the message you're following up
518 (@code{message-insert-to}). 
519
520 @item C-c C-n
521 @kindex C-c C-n 
522 @findex message-insert-newsgroups
523 Insert a @code{Newsgroups} header that reflects the @code{Followup-To}
524 or @code{Newsgroups} header of the article you're replying to
525 (@code{message-insert-newsgroups}).
526
527 @item C-c M-r
528 @kindex C-c M-r
529 @findex message-rename-buffer
530 Rename the buffer (@code{message-rename-buffer}).  If given a prefix,
531 prompt for a new buffer name.
532
533 @end table
534
535
536 @node Sending
537 @section Sending
538
539 @table @kbd
540 @item C-c C-c
541 @kindex C-c C-c 
542 @findex message-send-and-exit
543 Send the message and bury the current buffer
544 (@code{message-send-and-exit}). 
545
546 @item C-c C-s
547 @kindex C-c C-s 
548 @findex message-send
549 Send the message (@code{message-send}). 
550
551 @item C-c C-d
552 @kindex C-c C-d
553 @findex message-dont-send
554 Bury the message buffer and exit (@code{message-dont-send}).
555
556 @item C-c C-k
557 @kindex C-c C-k
558 @findex message-kill-buffer
559 Kill the message buffer and exit (@code{message-kill-buffer}).
560
561 @end table
562
563
564
565 @node Mail Aliases
566 @section Mail Aliases
567 @cindex mail aliases
568 @cindex aliases
569
570 @vindex message-mail-alias-type
571 The @code{message-mail-alias-type} variable controls what type of mail
572 alias expansion to use.  Currently only one form is supported---Message
573 uses @code{mailabbrev} to handle mail aliases.  If this variable is
574 @code{nil}, no mail alias expansion will be performed.
575
576 @code{mailabbrev} works by parsing the @file{/etc/mailrc} and
577 @file{~/.mailrc} files.  These files look like:
578
579 @example
580 alias lmi "Lars Magne Ingebrigtsen <larsi@@ifi.uio.no>"
581 alias ding "ding@@ifi.uio.no (ding mailing list)"
582 @end example
583
584 After adding lines like this to your @file{~/.mailrc} file, you should
585 be able to just write @samp{lmi} in the @code{To} or @code{Cc} (and so
586 on) headers and press @kbd{SPC} to expand the alias.
587
588 No expansion will be performed upon sending of the message---all
589 expansions have to be done explicitly.
590
591
592
593 @node Variables
594 @chapter Variables
595
596 @menu
597 * Message Headers::             General message header stuff.
598 * Mail Headers::                Customizing mail headers.
599 * Mail Variables::              Other mail variables.
600 * News Headers::                Customizing news headers.
601 * News Variables::              Other news variables.
602 * Various Message Variables::   Other message variables.
603 * Sending Variables::           Variables for sending.
604 * Message Buffers::             How Message names its buffers.
605 * Message Actions::             Actions to be performed when exiting.
606 @end menu
607
608
609 @node Message Headers
610 @section Message Headers
611
612 Message is quite aggressive on the message generation front.  It has
613 to be -- it's a combined news and mail agent.  To be able to send
614 combined messages, it has to generate all headers itself to ensure that
615 mail and news copies of messages look sufficiently similar.
616
617 @table @code
618
619 @item message-generate-headers-first
620 @vindex message-generate-headers-first
621 If non-@code{nil}, generate all headers before starting to compose the
622 message.  
623
624 @item message-from-style
625 @vindex message-from-style
626 Specifies how @code{From} headers should look.  There are four legal
627 values:
628
629 @table @code
630 @item nil
631 Just the address -- @samp{king@@grassland.com}.
632
633 @item parens
634 @samp{king@@grassland.com (Elvis Parsley)}.
635
636 @item angles
637 @samp{Elvis Parsley <king@@grassland.com>}.
638
639 @item default
640 Look like @code{angles} if that doesn't require quoting, and
641 @code{parens} if it does.  If even @code{parens} requires quoting, use
642 @code{angles} anyway.
643
644 @end table
645
646 @item message-deletable-headers
647 @vindex message-deletable-headers
648 Headers in this list that were previously generated by Message will be
649 deleted before posting.  Let's say you post an article.  Then you decide
650 to post it again to some other group, you naughty boy, so you jump back
651 to the @code{*post-buf*} buffer, edit the @code{Newsgroups} line, and
652 ship it off again.  By default, this variable makes sure that the old
653 generated @code{Message-ID} is deleted, and a new one generated.  If
654 this isn't done, the entire empire would probably crumble, anarchy would
655 prevail, and cats would start walking on two legs and rule the world.
656 Allegedly.  
657
658 @item message-default-headers
659 @vindex message-default-headers
660 This string is inserted at the end of the headers in all message
661 buffers.
662
663 @end table
664
665
666 @node Mail Headers
667 @section Mail Headers
668
669 @table @code
670 @item message-required-mail-headers
671 @vindex message-required-mail-headers
672 @xref{News Headers}, for the syntax of this variable.  It is
673 @code{(From Date Subject (optional . In-Reply-To) Message-ID Lines
674 (optional . X-Mailer))} by default.
675
676 @item message-ignored-mail-headers
677 @vindex message-ignored-mail-headers
678 Regexp of headers to be removed before mailing.  The default is
679 @samp{^Gcc:\\|^Fcc:}. 
680
681 @item message-default-mail-headers
682 @vindex message-default-mail-headers
683 This string is inserted at the end of the headers in all message
684 buffers that are initialized as mail.
685
686 @end table
687
688
689 @node Mail Variables
690 @section Mail Variables 
691
692 @table @code
693 @item message-send-mail-function
694 @vindex message-send-mail-function
695 Function used to send the current buffer as mail.  The default is
696 @code{message-send-mail-with-sendmail}.   If you prefer using MH
697 instead, set this variable to @code{message-send-mail-with-mh}.
698
699 @item message-mh-deletable-headers
700 @vindex message-mh-deletable-headers
701 Most versions of MH doesn't like being fed messages that contain the
702 headers in this variable.  If this variable is non-@code{nil} (which is
703 the default), these headers will be removed before mailing.  Set it to
704 @code{nil} if your MH can handle these headers.
705
706 @end table
707
708
709 @node News Headers
710 @section News Headers
711
712 @vindex message-required-news-headers
713 @code{message-required-news-headers} a list of header symbols.  These
714 headers will either be automatically generated, or, if that's
715 impossible, they will be prompted for.  The following symbols are legal:
716
717 @table @code
718
719 @item From
720 @cindex From
721 @findex user-full-name
722 @findex user-mail-address
723 This required header will be filled out with the result of the
724 @code{message-make-from} function, which depends on the
725 @code{message-from-style}, @code{user-full-name},
726 @code{user-mail-address} variables.
727
728 @item Subject
729 @cindex Subject
730 This required header will be prompted for if not present already. 
731
732 @item Newsgroups
733 @cindex Newsgroups
734 This required header says which newsgroups the article is to be posted
735 to.  If it isn't present already, it will be prompted for.
736
737 @item Organization
738 @cindex organization
739 This optional header will be filled out depending on the
740 @code{message-user-organization} variable.
741 @code{message-user-organization-file} will be used if this variable is
742 @code{t}.  This variable can also be a string (in which case this string
743 will be used), or it can be a function (which will be called with no
744 parameters and should return a string to be used).
745
746 @item Lines
747 @cindex Lines
748 This optional header will be computed by Message.
749
750 @item Message-ID
751 @cindex Message-ID
752 @vindex mail-host-address
753 @findex system-name
754 @cindex Sun
755 This required header will be generated by Message.  A unique ID will be
756 created based on the date, time, user name and system name.  Message will
757 use @code{mail-host-address} as the fully qualified domain name (FQDN)
758 of the machine if that variable is defined.  If not, it will use
759 @code{system-name}, which doesn't report a FQDN on some machines --
760 notably Suns.
761
762 @item X-Newsreader
763 @cindex X-Newsreader
764 This optional header will be filled out according to the
765 @code{message-newsreader} local variable.
766
767 @item X-Mailer
768 This optional header will be filled out according to the
769 @code{message-mailer} local variable, unless there already is an
770 @code{X-Newsreader} header present.
771
772 @item In-Reply-To
773 This optional header is filled out using the @code{Date} and @code{From}
774 header of the article being replied to.
775
776 @item Expires
777 @cindex Expires
778 This extremely optional header will be inserted according to the
779 @code{message-expires} variable.  It is highly deprecated and shouldn't
780 be used unless you know what you're doing.
781
782 @item Distribution
783 @cindex Distribution
784 This optional header is filled out according to the
785 @code{message-distribution-function} variable.  It is a deprecated and
786 much misunderstood header.
787
788 @item Path
789 @cindex path
790 This extremely optional header should probably never be used.
791 However, some @emph{very} old servers require that this header is
792 present.  @code{message-user-path} further controls how this
793 @code{Path} header is to look.  If it is @code{nil}, use the server name
794 as the leaf node.  If it is a string, use the string.  If it is neither
795 a string nor @code{nil}, use the user name only.  However, it is highly
796 unlikely that you should need to fiddle with this variable at all.
797 @end table
798
799 @findex yow
800 @cindex Mime-Version
801 In addition, you can enter conses into this list.  The car of this cons
802 should be a symbol.  This symbol's name is the name of the header, and
803 the cdr can either be a string to be entered verbatim as the value of
804 this header, or it can be a function to be called.  This function should
805 return a string to be inserted.  For instance, if you want to insert
806 @code{Mime-Version: 1.0}, you should enter @code{(Mime-Version . "1.0")}
807 into the list.  If you want to insert a funny quote, you could enter
808 something like @code{(X-Yow . yow)} into the list.  The function
809 @code{yow} will then be called without any arguments.
810
811 If the list contains a cons where the car of the cons is
812 @code{optional}, the cdr of this cons will only be inserted if it is
813 non-@code{nil}.
814
815 Other variables for customizing outgoing news articles:
816
817 @table @code
818
819 @item message-syntax-checks
820 @vindex message-syntax-checks
821 If non-@code{nil}, Message will attempt to check the legality of the
822 headers, as well as some other stuff, before posting.  You can control
823 the granularity of the check by adding or removing elements from this
824 list.  Legal elements are:
825
826 @table @code
827 @item subject-cmsg 
828 Check the subject for commands.
829 @item sender
830 @cindex Sender
831 Insert a new @code{Sender} header if the @code{From} header looks odd. 
832 @item multiple-headers 
833 Check for the existence of multiple equal headers.
834 @item sendsys 
835 @cindex sendsys
836 Check for the existence of version and sendsys commands.
837 @item message-id
838 Check whether the @code{Message-ID} looks ok.
839 @item from
840 Check whether the @code{From} header seems nice.
841 @item long-lines 
842 @cindex long lines
843 Check for too long lines.
844 @item control-chars
845 Check for illegal characters.
846 @item size
847 Check for excessive size.
848 @item new-text
849 Check whether there is any new text in the messages.
850 @item signature
851 Check the length of the signature.
852 @item approved
853 @cindex approved
854 Check whether the article has an @code{Approved} header, which is
855 something only moderators should include.
856 @item empty
857 Check whether the article is empty.
858 @item empty-headers
859 Check whether any of the headers are empty.
860 @item existing-newsgroups
861 Check whether the newsgroups mentioned in the @code{Newsgroups} and 
862 @code{Followup-To} headers exist.
863 @item valid-newsgroups
864 Check whether the @code{Newsgroups} and @code{Followup-to} headers
865 are valid syntactically.
866 @item repeated-newsgroups
867 Check whether the @code{Newsgroups} and @code{Followup-to} headers
868 contains repeated group names.
869 @item shorten-followup-to
870 Check whether to add a @code{Followup-to} header to shorten the number
871 of groups to post to.
872 @end table
873
874 All these conditions are checked by default.
875
876 @item message-ignored-news-headers
877 @vindex message-ignored-news-headers
878 Regexp of headers to be removed before posting.  The default is@*
879 @samp{^NNTP-Posting-Host:\\|^Xref:\\|^Bcc:\\|^Gcc:\\|^Fcc:}.
880
881 @item message-default-news-headers
882 @vindex message-default-news-headers
883 This string is inserted at the end of the headers in all message
884 buffers that are initialized as news.
885
886 @end table
887
888
889 @node News Variables
890 @section News Variables
891
892 @table @code
893 @item message-send-news-function
894 @vindex message-send-news-function
895 Function used to send the current buffer as news.  The default is
896 @code{message-send-news}. 
897
898 @item message-post-method
899 @vindex message-post-method
900 Method used for posting a prepared news message.
901
902 @end table
903
904
905 @node Various Message Variables
906 @section Various Message Variables
907
908 @table @code
909 @item message-signature-separator
910 @vindex message-signature-separator
911 Regexp matching the signature separator.  It is @samp{^-- *$} by
912 default. 
913
914 @item mail-header-separator
915 @vindex mail-header-separator
916 String used to separate the headers from the body.  It is @samp{--text
917 follows this line--} by default.
918
919 @item message-directory
920 @vindex message-directory
921 Directory used by many mailey things.  The default is @file{~/Mail/}. 
922
923 @item message-autosave-directory
924 @vindex message-autosave-directory
925 Directory where message buffers will be autosaved to.
926
927 @item message-signature-setup-hook
928 @vindex message-signature-setup-hook
929 Hook run when initializing the message buffer.  It is run after the
930 headers have been inserted but before the signature has been inserted. 
931
932 @item message-setup-hook
933 @vindex message-setup-hook
934 Hook run as the last thing when the message buffer has been initialized,
935 but before yanked text is inserted.
936
937 @item message-header-setup-hook
938 @vindex message-header-setup-hook
939 Hook called narrowed to the headers after initializing the headers. 
940
941 For instance, if you're running Gnus and wish to insert a
942 @samp{Mail-Copies-To} header in all your news articles and all messages
943 you send to mailing lists, you could do something like the following:
944
945 @lisp
946 (defun my-message-header-setup-hook ()
947   (let ((group (or gnus-newsgroup-name "")))
948     (when (or (message-fetch-field "newsgroups")
949               (gnus-group-find-parameter group 'to-address)
950               (gnus-group-find-parameter group 'to-list))
951       (insert "Mail-Copies-To: never\n"))))
952
953 (add-hook 'message-header-setup-hook 'my-message-header-setup-hook)
954 @end lisp
955
956 @item message-send-hook
957 @vindex message-send-hook
958 Hook run before sending messages.
959
960 If you want to add certain headers before sending, you can use the
961 @code{message-add-header} function in this hook.  For instance:
962 @findex message-add-header
963
964 @lisp
965 (add-hook 'message-send-hook 'my-message-add-content)
966 (defun my-message-add-content ()
967   (message-add-header
968    "Mime-Version: 1.0"
969    "Content-Type: text/plain"
970    "Content-Transfer-Encoding: 7bit"))
971 @end lisp
972
973 This function won't add the header if the header is already present.
974
975 @item message-send-mail-hook
976 @vindex message-send-mail-hook
977 Hook run before sending mail messages.
978
979 @item message-send-news-hook
980 @vindex message-send-news-hook
981 Hook run before sending news messages.
982
983 @item message-sent-hook
984 @vindex message-sent-hook
985 Hook run after sending messages.
986
987 @item message-mode-syntax-table
988 @vindex message-mode-syntax-table
989 Syntax table used in message mode buffers.
990
991 @item message-send-method-alist
992 @vindex message-send-method-alist
993
994 Alist of ways to send outgoing messages.  Each element has the form
995
996 @lisp
997 (TYPE PREDICATE FUNCTION)
998 @end lisp
999
1000 @table @var
1001 @item type
1002 A symbol that names the method.
1003
1004 @item predicate
1005 A function called without any parameters to determine whether the
1006 message is a message of type @var{type}.
1007
1008 @item function
1009 A function to be called if @var{predicate} returns non-@code{nil}.
1010 @var{function} is called with one parameter -- the prefix.
1011 @end table
1012
1013 @lisp
1014 ((news message-news-p message-send-via-news)
1015  (mail message-mail-p message-send-via-mail))
1016 @end lisp
1017
1018
1019
1020 @end table
1021
1022
1023
1024 @node Sending Variables
1025 @section Sending Variables
1026
1027 @table @code
1028
1029 @item message-fcc-handler-function 
1030 @vindex message-fcc-handler-function 
1031 A function called to save outgoing articles.  This function will be
1032 called with the name of the file to store the article in. The default
1033 function is @code{rmail-output} which saves in Unix mailbox format.
1034
1035 @item message-courtesy-message
1036 @vindex message-courtesy-message
1037 When sending combined messages, this string is inserted at the start of
1038 the mailed copy.  If the string contains the format spec @samp{%s}, the
1039 newsgroups the article has been posted to will be inserted there.  If
1040 this variable is @code{nil}, no such courtesy message will be added.
1041 The default value is @samp{"The following message is a courtesy copy of
1042 an article\nthat has been posted to %s as well.\n\n"}. 
1043
1044 @end table
1045
1046
1047 @node Message Buffers
1048 @section Message Buffers
1049
1050 Message will generate new buffers with unique buffer names when you
1051 request a message buffer.  When you send the message, the buffer isn't
1052 normally killed off.  Its name is changed and a certain number of old
1053 message buffers are kept alive.
1054
1055 @table @code
1056 @item message-generate-new-buffers
1057 @vindex message-generate-new-buffers
1058 If non-@code{nil}, generate new buffers.  The default is @code{t}.  If
1059 this is a function, call that function with three parameters: The type,
1060 the to address and the group name.  (Any of these may be @code{nil}.)
1061 The function should return the new buffer name.
1062
1063 @item message-max-buffers
1064 @vindex message-max-buffers
1065 This variable says how many old message buffers to keep.  If there are
1066 more message buffers than this, the oldest buffer will be killed.  The
1067 default is 10.  If this variable is @code{nil}, no old message buffers
1068 will ever be killed.
1069
1070 @item message-send-rename-function
1071 @vindex message-send-rename-function
1072 After sending a message, the buffer is renamed from, for instance,
1073 @samp{*reply to Lars*} to @samp{*sent reply to Lars*}.  If you don't
1074 like this, set this variable to a function that renames the buffer in a
1075 manner you like.  If you don't want to rename the buffer at all, you can
1076 say:
1077
1078 @lisp
1079 (setq message-send-rename-function 'ignore)
1080 @end lisp
1081
1082 @item message-kill-buffer-on-exit
1083 @findex message-kill-buffer-on-exit
1084 If non-@code{nil}, kill the buffer immediately on exit.
1085
1086 @end table
1087
1088
1089 @node Message Actions
1090 @section Message Actions
1091
1092 When Message is being used from a news/mail reader, the reader is likely
1093 to want to perform some task after the message has been sent.  Perhaps
1094 return to the previous window configuration or mark an article as
1095 replied.  
1096
1097 @vindex message-kill-actions
1098 @vindex message-postpone-actions
1099 @vindex message-exit-actions
1100 @vindex message-send-actions
1101 The user may exit from the message buffer in various ways.  The most
1102 common is @kbd{C-c C-c}, which sends the message and exits.  Other
1103 possibilities are @kbd{C-c C-s} which just sends the message, @kbd{C-c
1104 C-d} which postpones the message editing and buries the message buffer,
1105 and @kbd{C-c C-k} which kills the message buffer.  Each of these actions
1106 have lists associated with them that contains actions to be executed:
1107 @code{message-send-actions}, @code{message-exit-actions},
1108 @code{message-postpone-actions}, and @code{message-kill-actions}.  
1109
1110 Message provides a function to interface with these lists:
1111 @code{message-add-action}.  The first parameter is the action to be
1112 added, and the rest of the arguments are which lists to add this action
1113 to.  Here's an example from Gnus:
1114
1115 @lisp
1116   (message-add-action
1117    `(set-window-configuration ,(current-window-configuration))
1118    'exit 'postpone 'kill)
1119 @end lisp
1120
1121 This restores the Gnus window configuration when the message buffer is
1122 killed, postponed or exited.
1123
1124 An @dfn{action} can be either: a normal function, or a list where the
1125 @code{car} is a function and the @code{cdr} is the list of arguments, or
1126 a form to be @code{eval}ed.
1127
1128
1129 @node Compatibility
1130 @chapter Compatibility
1131 @cindex compatibility
1132
1133 Message uses virtually only its own variables---older @code{mail-}
1134 variables aren't consulted.  To force Message to take those variables
1135 into account, you can put the following in your @code{.emacs} file:
1136
1137 @lisp
1138 (require 'messcompat)
1139 @end lisp
1140
1141 This will initialize many Message variables from the values in the
1142 corresponding mail variables.
1143
1144
1145
1146 @node Index
1147 @chapter Index
1148 @printindex cp
1149
1150 @node Key Index
1151 @chapter Key Index
1152 @printindex ky
1153
1154 @summarycontents
1155 @contents
1156 @bye
1157
1158 @c End: