2001-08-19 Simon Josefsson <jas@extundo.com>
[gnus] / lisp / gnus-msg.el
index 3f25c7a..1572a28 100644 (file)
@@ -50,11 +50,11 @@ methods.  If that is the case, the user will be queried for what select
 method to use when posting."
   :group 'gnus-group-foreign
   :type `(choice (const nil)
-                 (const current)
+                (const current)
                 (const native)
                 (sexp :tag "Methods" ,gnus-select-method)))
 
-(defvar gnus-outgoing-message-group nil
+(defcustom gnus-outgoing-message-group nil
   "*All outgoing messages will be put in this group.
 If you want to store all your outgoing mail and articles in the group
 \"nnml:archive\", you set this variable to that value.  This variable
@@ -63,18 +63,25 @@ can also be a list of group names.
 If you want to have greater control over what group to put each
 message in, you can set this variable to a function that checks the
 current newsgroup name and then returns a suitable group name (or list
-of names).")
+of names)."
+  :group 'gnus-message
+  :type '(choice (string :tag "Group")
+                 (function)))
 
-(defvar gnus-mailing-list-groups nil
+(defcustom gnus-mailing-list-groups nil
   "*Regexp matching groups that are really mailing lists.
 This is useful when you're reading a mailing list that has been
 gatewayed to a newsgroup, and you want to followup to an article in
-the group.")
+the group."
+  :group 'gnus-message
+  :type 'regexp)
 
-(defvar gnus-add-to-list nil
-  "*If non-nil, add a `to-list' parameter automatically.")
+(defcustom gnus-add-to-list nil
+  "*If non-nil, add a `to-list' parameter automatically."
+  :group 'gnus-message
+  :type 'boolean)
 
-(defvar gnus-crosspost-complaint
+(defcustom gnus-crosspost-complaint
   "Hi,
 
 You posted the article below with the following Newsgroups header:
@@ -90,19 +97,44 @@ Thank you.
 "
   "Format string to be inserted when complaining about crossposts.
 The first %s will be replaced by the Newsgroups header;
-the second with the current group name.")
-
-(defvar gnus-message-setup-hook nil
-  "Hook run after setting up a message buffer.")
-
-(defvar gnus-bug-create-help-buffer t
-  "*Should we create the *Gnus Help Bug* buffer?")
-
-(defvar gnus-posting-styles nil
-  "*Alist of styles to use when posting.")
-
-(defvar gnus-inews-mark-gcc-as-read nil
-  "If non-nil, automatically mark Gcc articles as read.")
+the second with the current group name."
+  :group 'gnus-message
+  :type 'string)
+
+(defcustom gnus-message-setup-hook nil
+  "Hook run after setting up a message buffer."
+  :group 'gnus-message
+  :type 'hook)
+
+(defcustom gnus-bug-create-help-buffer t
+  "*Should we create the *Gnus Help Bug* buffer?"
+  :group 'gnus-message
+  :type 'boolean)
+
+(defcustom gnus-posting-styles nil
+  "*Alist of styles to use when posting."
+  :group 'gnus-message
+  :type '(repeat (cons (choice (regexp)
+                              (function)
+                              (variable)
+                              (sexp))
+                      (repeat (list
+                               (choice (const signature)
+                                       (const signature-file)
+                                       (const organization)
+                                       (const address)
+                                       (const name)
+                                       (const body)
+                                       (string :tag "Header"))
+                               (choice (string)
+                                       (function)
+                                       (variable)
+                                       (sexp)))))))
+
+(defcustom gnus-inews-mark-gcc-as-read nil
+  "If non-nil, automatically mark Gcc articles as read."
+  :group 'gnus-message
+  :type 'boolean)
 
 (defcustom gnus-group-posting-charset-alist
   '(("^\\(no\\|fr\\)\\.[^,]*\\(,[ \t\n]*\\(no\\|fr\\)\\.[^,]*\\)*$" iso-8859-1 (iso-8859-1))
@@ -246,6 +278,11 @@ Thank you for your help in stamping out bugs.
             (let ((mbl1 mml-buffer-list))
               (setq mml-buffer-list mbl)  ;; Global value
               (set (make-local-variable 'mml-buffer-list) mbl1);; Local value
+              ;; LOCAL argument of add-hook differs between GNU Emacs
+              ;; and XEmacs. make-local-hook makes sure they are local.
+              (make-local-hook 'kill-buffer-hook)
+              (make-local-hook 'change-major-mode-hook)
+              (add-hook 'change-major-mode-hook 'mml-destroy-buffers nil t)
               (add-hook 'kill-buffer-hook 'mml-destroy-buffers t t))
           (mml-destroy-buffers)
           (setq mml-buffer-list mbl)))
@@ -602,9 +639,9 @@ header line with the old Message-ID."
 
 (defun gnus-msg-treat-broken-reply-to (&optional force)
   "Remove the Reply-to header iff broken-reply-to."
-  (when (or force 
-            (gnus-group-find-parameter
-             gnus-newsgroup-name 'broken-reply-to))
+  (when (or force
+           (gnus-group-find-parameter
+            gnus-newsgroup-name 'broken-reply-to))
     (save-restriction
       (message-narrow-to-head)
       (message-remove-header "reply-to"))))
@@ -612,7 +649,9 @@ header line with the old Message-ID."
 (defun gnus-post-method (arg group &optional silent)
   "Return the posting method based on GROUP and ARG.
 If SILENT, don't prompt the user."
-  (let ((group-method (gnus-find-method-for-group group)))
+  (let ((gnus-post-method (or (gnus-parameter-post-method group)
+                             gnus-post-method))
+       (group-method (gnus-find-method-for-group group)))
     (cond
      ;; If the group-method is nil (which shouldn't happen) we use
      ;; the default method.
@@ -1040,7 +1079,7 @@ If YANK is non-nil, include the original article."
     (let (text)
       (save-excursion
        (set-buffer (gnus-get-buffer-create " *gnus environment info*"))
-        (erase-buffer)
+       (erase-buffer)
        (gnus-debug)
        (setq text (buffer-string)))
       (insert "<#part type=application/x-emacs-lisp disposition=inline description=\"User settings\">\n" text "\n<#/part>"))
@@ -1171,43 +1210,43 @@ this is a reply."
     (save-restriction
       (message-narrow-to-headers)
       (let ((gcc (or gcc (mail-fetch-field "gcc" nil t)))
-            (cur (current-buffer))
-            groups group method group-art)
-        (when gcc
-          (message-remove-header "gcc")
-          (widen)
-          (setq groups (message-unquote-tokens
-                        (message-tokenize-header gcc " ,")))
-          ;; Copy the article over to some group(s).
-          (while (setq group (pop groups))
-            (gnus-check-server
-             (setq method (gnus-inews-group-method group)))
-            (unless (gnus-request-group group nil method)
-              (gnus-request-create-group group method))
-            (save-excursion
-              (nnheader-set-temp-buffer " *acc*")
-              (insert-buffer-substring cur)
-              (message-encode-message-body)
-              (save-restriction
-                (message-narrow-to-headers)
-                (let ((mail-parse-charset message-default-charset)
-                      (rfc2047-header-encoding-alist
-                       (cons '("Newsgroups" . default)
-                             rfc2047-header-encoding-alist)))
-                  (mail-encode-encoded-word-buffer)))
-              (goto-char (point-min))
-              (when (re-search-forward
-                     (concat "^" (regexp-quote mail-header-separator) "$")
-                     nil t)
-                (replace-match "" t t ))
-              (unless (setq group-art
-                            (gnus-request-accept-article group method t t))
-                (gnus-message 1 "Couldn't store article in group %s: %s"
-                              group (gnus-status-message method))
-                (sit-for 2))
-              (when (and group-art gnus-inews-mark-gcc-as-read)
-                (gnus-group-mark-article-read group (cdr group-art)))
-              (kill-buffer (current-buffer)))))))))
+           (cur (current-buffer))
+           groups group method group-art)
+       (when gcc
+         (message-remove-header "gcc")
+         (widen)
+         (setq groups (message-unquote-tokens
+                       (message-tokenize-header gcc " ,")))
+         ;; Copy the article over to some group(s).
+         (while (setq group (pop groups))
+           (gnus-check-server
+            (setq method (gnus-inews-group-method group)))
+           (unless (gnus-request-group group nil method)
+             (gnus-request-create-group group method))
+           (save-excursion
+             (nnheader-set-temp-buffer " *acc*")
+             (insert-buffer-substring cur)
+             (message-encode-message-body)
+             (save-restriction
+               (message-narrow-to-headers)
+               (let ((mail-parse-charset message-default-charset)
+                     (rfc2047-header-encoding-alist
+                      (cons '("Newsgroups" . default)
+                            rfc2047-header-encoding-alist)))
+                 (mail-encode-encoded-word-buffer)))
+             (goto-char (point-min))
+             (when (re-search-forward
+                    (concat "^" (regexp-quote mail-header-separator) "$")
+                    nil t)
+               (replace-match "" t t ))
+             (unless (setq group-art
+                           (gnus-request-accept-article group method t t))
+               (gnus-message 1 "Couldn't store article in group %s: %s"
+                             group (gnus-status-message method))
+               (sit-for 2))
+             (when (and group-art gnus-inews-mark-gcc-as-read)
+               (gnus-group-mark-article-read group (cdr group-art)))
+             (kill-buffer (current-buffer)))))))))
 
 (defun gnus-inews-insert-gcc ()
   "Insert Gcc headers based on `gnus-outgoing-message-group'."
@@ -1421,8 +1460,8 @@ this is a reply."
       (when (or name address)
        (add-hook 'message-setup-hook
                  `(lambda ()
-                    (set (make-local-variable 'user-mail-address)
-                         ,(or (cdr address) user-mail-address))
+                    (set (make-local-variable 'user-mail-address)
+                         ,(or (cdr address) user-mail-address))
                     (let ((user-full-name ,(or (cdr name) (user-full-name)))
                           (user-mail-address
                            ,(or (cdr address) user-mail-address)))