Synch with Gnus.
[elisp/gnus.git-] / lisp / gnus-msg.el
index 33343d6..9afcc03 100644 (file)
@@ -106,6 +106,9 @@ the second with the current group name.")
 (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.")
+
 (defcustom gnus-group-posting-charset-alist
   '(("^\\(no\\|fr\\|dk\\)\\.[^,]*\\(,[ \t\n]*\\(no\\|fr\\|dk\\)\\.[^,]*\\)*$" iso-8859-1 (iso-8859-1))
     ("^\\(fido7\\|relcom\\)\\.[^,]*\\(,[ \t\n]*\\(fido7\\|relcom\\)\\.[^,]*\\)*$" koi8-r (koi8-r))
@@ -217,20 +220,6 @@ Thank you for your help in stamping out bugs.
   ;; "c" gnus-summary-send-draft
   "r" gnus-summary-resend-message)
 
-;;;###autoload
-(defun gnus-msg-mail (&rest args)
-  "Start editing a mail message to be sent.
-Like `message-mail', but with Gnus paraphernalia, particularly the
-the Gcc: header for archiving purposes."
-  (interactive)
-  (gnus-setup-message 'message
-    (apply 'message-mail args)))
-
-;;;###autoload
-(define-mail-user-agent 'gnus-user-agent
-      'gnus-msg-mail 'message-send-and-exit
-      'message-kill-buffer 'message-send-hook)
-
 ;;; Internal functions.
 
 (defvar gnus-article-reply nil)
@@ -266,6 +255,20 @@ the Gcc: header for archiving purposes."
        (gnus-configure-windows ,config t)
        (set-buffer-modified-p nil))))
 
+;;;###autoload
+(defun gnus-msg-mail (&rest args)
+  "Start editing a mail message to be sent.
+Like `message-mail', but with Gnus paraphernalia, particularly the
+the Gcc: header for archiving purposes."
+  (interactive)
+  (gnus-setup-message 'message
+    (apply 'message-mail args)))
+
+;;;###autoload
+(define-mail-user-agent 'gnus-user-agent
+      'gnus-msg-mail 'message-send-and-exit
+      'message-kill-buffer 'message-send-hook)
+
 (defun gnus-setup-posting-charset (group)
   (let ((alist gnus-group-posting-charset-alist)
        (group (or group ""))
@@ -1158,7 +1161,7 @@ this is a reply."
        (let ((gcc (or gcc (mail-fetch-field "gcc" nil t)))
              (coding-system-for-write 'raw-text)
              (output-coding-system 'raw-text)
-             groups group method)
+             groups group method group-art)
          (when gcc
            (message-remove-header "gcc")
            (widen)
@@ -1179,10 +1182,36 @@ this is a reply."
                       (concat "^" (regexp-quote mail-header-separator) "$")
                       nil t)
                  (replace-match "" t t ))
-               (unless (gnus-request-accept-article group method 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)
+                 (let ((active (gnus-active group)))
+                   (if active
+                       (if (< (cdr active) (cdr group-art))
+                           (gnus-set-active group (cons (car active) 
+                                                        (cdr group-art))))
+                     (gnus-activate-group group)))
+                 (let ((buffer (concat "*Summary " group "*"))
+                       (mark gnus-read-mark)
+                       (article (cdr group-art)))
+                   (unless 
+                       (and 
+                        (get-buffer buffer)
+                        (with-current-buffer buffer
+                          (when gnus-newsgroup-prepared
+                            (when (and gnus-newsgroup-auto-expire
+                                       (memq mark gnus-auto-expirable-marks))
+                              (setq mark gnus-expirable-mark))
+                            (setq mark (gnus-request-update-mark 
+                                        group article mark))
+                            (gnus-mark-article-as-read article mark)
+                            (setq gnus-newsgroup-active (gnus-active group))
+                            t)))
+                     (gnus-group-make-articles-read group 
+                                                    (list article)))))
                (kill-buffer (current-buffer))))))))))
 
 (defun gnus-inews-insert-gcc ()