*** empty log message ***
[gnus] / lisp / gnus-msg.el
1 ;;; gnus-msg.el --- mail and post interface for Gnus
2 ;; Copyright (C) 1995,96 Free Software Foundation, Inc.
3
4 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
5 ;;      Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
6 ;; Keywords: news
7
8 ;; This file is part of GNU Emacs.
9
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
13 ;; any later version.
14
15 ;; GNU Emacs is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 ;; GNU General Public License for more details.
19
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
24
25 ;;; Commentary:
26
27 ;;; Code:
28
29 (require 'gnus)
30 (require 'gnus-ems)
31 (require 'message)
32 (require 'gnus-art)
33
34 ;; Added by Sudish Joseph <joseph@cis.ohio-state.edu>.
35 (defvar gnus-post-method nil
36   "*Preferred method for posting USENET news.
37 If this variable is nil, Gnus will use the current method to decide
38 which method to use when posting.  If it is non-nil, it will override
39 the current method.  This method will not be used in mail groups and
40 the like, only in \"real\" newsgroups.
41
42 The value must be a valid method as discussed in the documentation of
43 `gnus-select-method'.  It can also be a list of methods.  If that is
44 the case, the user will be queried for what select method to use when
45 posting.")
46
47 (defvar gnus-outgoing-message-group nil
48   "*All outgoing messages will be put in this group.
49 If you want to store all your outgoing mail and articles in the group
50 \"nnml:archive\", you set this variable to that value.  This variable
51 can also be a list of group names. 
52
53 If you want to have greater control over what group to put each
54 message in, you can set this variable to a function that checks the
55 current newsgroup name and then returns a suitable group name (or list
56 of names).")
57
58 (defvar gnus-mailing-list-groups nil
59   "*Regexp matching groups that are really mailing lists.
60 This is useful when you're reading a mailing list that has been
61 gatewayed to a newsgroup, and you want to followup to an article in
62 the group.")
63
64 (defvar gnus-sent-message-ids-file 
65   (nnheader-concat gnus-directory "Sent-Message-IDs")
66   "File where Gnus saves a cache of sent message ids.")
67
68 (defvar gnus-sent-message-ids-length 1000
69   "The number of sent Message-IDs to save.")
70
71 (defvar gnus-crosspost-complaint
72   "Hi,
73
74 You posted the article below with the following Newsgroups header:
75
76 Newsgroups: %s
77
78 The %s group, at least, was an inappropriate recipient
79 of this message.  Please trim your Newsgroups header to exclude this
80 group before posting in the future.
81
82 Thank you.
83
84 "
85   "Format string to be inserted when complaining about crossposts.
86 The first %s will be replaced by the Newsgroups header;
87 the second with the current group name.")
88
89 ;;; Internal variables.
90
91 (defvar gnus-message-buffer "*Mail Gnus*")
92 (defvar gnus-article-copy nil)
93 (defvar gnus-last-posting-server nil)
94
95 (defconst gnus-bug-message
96   "Sending a bug report to the Gnus Towers.
97 ========================================
98
99 The buffer below is a mail buffer.  When you press `C-c C-c', it will
100 be sent to the Gnus Bug Exterminators.
101
102 At the bottom of the buffer you'll see lots of variable settings.
103 Please do not delete those.  They will tell the Bug People what your
104 environment is, so that it will be easier to locate the bugs.
105
106 If you have found a bug that makes Emacs go \"beep\", set
107 debug-on-error to t (`M-x set-variable RET debug-on-error RET t RET')
108 and include the backtrace in your bug report.
109
110 Please describe the bug in annoying, painstaking detail.
111
112 Thank you for your help in stamping out bugs.
113 ")
114
115 (eval-and-compile
116   (autoload 'gnus-uu-post-news "gnus-uu" nil t)
117   (autoload 'news-setup "rnewspost")
118   (autoload 'news-reply-mode "rnewspost")
119   (autoload 'rmail-dont-reply-to "mail-utils")
120   (autoload 'rmail-output "rmailout"))
121
122 \f
123 ;;;
124 ;;; Gnus Posting Functions
125 ;;;
126
127 (gnus-define-keys (gnus-summary-send-map "S" gnus-summary-mode-map)
128   "p" gnus-summary-post-news
129   "f" gnus-summary-followup
130   "F" gnus-summary-followup-with-original
131   "c" gnus-summary-cancel-article
132   "s" gnus-summary-supersede-article
133   "r" gnus-summary-reply
134   "R" gnus-summary-reply-with-original
135   "n" gnus-summary-followup-to-mail
136   "N" gnus-summary-followup-to-mail-with-original
137   "m" gnus-summary-mail-other-window
138   "u" gnus-uu-post-news
139   "\M-c" gnus-summary-mail-crosspost-complaint
140   "om" gnus-summary-mail-forward
141   "op" gnus-summary-post-forward
142   "Om" gnus-uu-digest-mail-forward
143   "Op" gnus-uu-digest-post-forward)
144
145 (gnus-define-keys (gnus-send-bounce-map "D" gnus-summary-send-map)
146   "b" gnus-summary-resend-bounced-mail
147   ;; "c" gnus-summary-send-draft
148   "r" gnus-summary-resend-message)
149
150 ;;; Internal functions.
151
152 (defvar gnus-article-reply nil)
153 (defmacro gnus-setup-message (config &rest forms)
154   (let ((winconf (make-symbol "winconf"))
155         (buffer (make-symbol "buffer"))
156         (article (make-symbol "article")))
157     `(let ((,winconf (current-window-configuration))
158            (,buffer (buffer-name (current-buffer)))
159            (,article (and gnus-article-reply (gnus-summary-article-number)))
160            (message-header-setup-hook
161             (copy-sequence message-header-setup-hook)))
162        (add-hook 'message-header-setup-hook 'gnus-inews-insert-gcc)
163        (add-hook 'message-header-setup-hook 'gnus-inews-insert-archive-gcc)
164        ,@forms
165        (gnus-inews-add-send-actions ,winconf ,buffer ,article)
166        (setq gnus-message-buffer (current-buffer))
167        (make-local-variable 'gnus-newsgroup-name)
168        (gnus-configure-windows ,config t))))
169     
170 (defun gnus-inews-add-send-actions (winconf buffer article)
171   (gnus-make-local-hook 'message-sent-hook)
172   (gnus-add-hook 'message-sent-hook 'gnus-inews-do-gcc nil t)
173   (setq message-post-method
174         `(lambda (arg)
175            (gnus-post-method arg ,gnus-newsgroup-name)))
176   (setq message-newsreader (setq message-mailer (gnus-extended-version)))
177   (message-add-action
178    `(set-window-configuration ,winconf) 'exit 'postpone 'kill)
179   (message-add-action
180    `(when (buffer-name (get-buffer ,buffer))
181       (save-excursion
182         (set-buffer (get-buffer ,buffer))
183         ,(when article
184            `(gnus-summary-mark-article-as-replied ,article))))
185    'send))
186