[gnus git] branch master updated: m0-1-44-g5056ea6 =1= Make gnus-summary-resend-message do Gcc

Katsumi Yamaoka <[email protected]>
Newsgroups gmane.emacs.gnus.cvs
Message-ID <[email protected]>
       via  5056ea6daee76116bc35aca791d25c1754005c97 (commit)
      from  9d6224f58308ca07a5bfc3851e7c581d6d24e163 (commit)


- Log -----------------------------------------------------------------
commit 5056ea6daee76116bc35aca791d25c1754005c97
Author: Katsumi Yamaoka <[email protected]>
Date:   Thu Feb 2 01:26:06 2012 +0000

    Make gnus-summary-resend-message do Gcc

diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 1088b44..7255fe9 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,14 @@
+2012-02-02  Katsumi Yamaoka  <[email protected]>
+
+	* gnus-msg.el (gnus-gcc-self-resent-messages): New user option.
+	(gnus-summary-resend-message-insert-gcc): New function.
+	(gnus-summary-resend-message): Modify message-header-setup-hook and
+	message-sent-hook to make it work for Gcc.
+	(gnus-inews-do-gcc): Update the number of unread articles of groups
+	that messages are Gcc'd to.
+
+	* message.el (message-resend): Run message-sent-hook to do Gcc.
+
 2012-02-01  Lars Ingebrigtsen  <[email protected]>
 
 	* lpath.el: Fix an XEmacs compilation warning.
diff --git a/lisp/gnus-msg.el b/lisp/gnus-msg.el
index c825c42..c12e4d9 100644
--- a/lisp/gnus-msg.el
+++ b/lisp/gnus-msg.el
@@ -163,6 +163,22 @@ if nil, attach files as normal parts."
 		 (const all :tag "Any")
 		 (string :tag "Regexp")))
 
+(defcustom gnus-gcc-self-resent-messages 'no-gcc-self
+  "Like `gcc-self' group parameter, only for unmodified resent messages.
+Applied to messages sent by `gnus-summary-resend-message'.  Non-nil
+value of this variable takes precedence over any existing Gcc header.
+
+If this is `none', no Gcc copy will be made.  If this is t, messages
+resent will be Gcc'd to the current group.  If this is a string, it
+specifies a group to which resent messages will be Gcc'd.  If this is
+nil, Gcc will be done according to existing Gcc header(s), if any.
+If this is `no-gcc-self', resent messages will be Gcc'd to groups that
+existing Gcc header specifies, except for the current group."
+  :version "24.2"
+  :group 'gnus-message
+  :type '(choice (const none) (const t) string (const nil)
+		 (const no-gcc-self)))
+
 (gnus-define-group-parameter
  posting-charset-alist
  :type list
@@ -1264,6 +1280,43 @@ For the \"inline\" alternatives, also see the variable
 	    (set-buffer gnus-original-article-buffer)
 	    (message-forward post)))))))
 
+(defun gnus-summary-resend-message-insert-gcc ()
+  "Insert Gcc header according to `gnus-gcc-self-resent-messages'."
+  (gnus-inews-insert-gcc)
+  (let ((gcc (mapcar
+	      (lambda (group)
+		(mm-encode-coding-string
+		 group
+		 (gnus-group-name-charset (gnus-inews-group-method group)
+					  group)))
+	      (message-unquote-tokens
+	       (message-tokenize-header (mail-fetch-field "gcc" nil t)
+					" ,")))))
+    (message-remove-header "gcc")
+    (when gcc
+      (goto-char (point-max))
+      (cond ((eq gnus-gcc-self-resent-messages  'none))
+	    ((eq gnus-gcc-self-resent-messages t)
+	     (insert "Gcc: \"" gnus-newsgroup-name "\"\n"))
+	    ((stringp gnus-gcc-self-resent-messages)
+	     (insert "Gcc: "
+		     (mm-encode-coding-string
+		      (if (string-match " " gnus-gcc-self-resent-messages)
+			  (concat "\"" gnus-gcc-self-resent-messages "\"")
+			gnus-gcc-self-resent-messages)
+		      (gnus-group-name-charset
+		       (gnus-inews-group-method gnus-gcc-self-resent-messages)
+		       gnus-gcc-self-resent-messages))
+		     "\n"))
+	    ((null gnus-gcc-self-resent-messages)
+	     (insert "Gcc: " (mapconcat 'identity gcc ", ") "\n"))
+	    ((eq gnus-gcc-self-resent-messages 'no-gcc-self)
+	     (when (setq gcc (delete
+			      gnus-newsgroup-name
+			      (delete (concat "\"" gnus-newsgroup-name "\"")
+				      gcc)))
+	       (insert "Gcc: " (mapconcat 'identity gcc ", ") "\n")))))))
+
 (defun gnus-summary-resend-message (address n)
   "Resend the current article to ADDRESS."
   (interactive
@@ -1277,12 +1330,20 @@ For the \"inline\" alternatives, also see the variable
 	    (with-current-buffer gnus-original-article-buffer
 	      (nnmail-fetch-field "to"))))
 	 current-prefix-arg))
+  (let ((message-header-setup-hook (copy-sequence message-header-setup-hook))
+	(message-sent-hook (copy-sequence message-sent-hook)))
+    (add-hook 'message-header-setup-hook
+	      'gnus-summary-resend-message-insert-gcc)
+    (add-hook 'message-sent-hook (if gnus-agent
+				     'gnus-agent-possibly-do-gcc
+				   'gnus-inews-do-gcc))
   (dolist (article (gnus-summary-work-articles n))
     (gnus-summary-select-article nil nil nil article)
     (with-current-buffer gnus-original-article-buffer
-      (let ((gnus-gcc-externalize-attachments nil))
+	(let ((gnus-gcc-externalize-attachments nil)
+	      (message-inhibit-body-encoding t))
 	(message-resend address)))
-    (gnus-summary-mark-article-as-forwarded article)))
+      (gnus-summary-mark-article-as-forwarded article))))
 
 ;; From: Matthieu Moy <[email protected]>
 (defun gnus-summary-resend-message-edit ()
@@ -1624,12 +1685,16 @@ this is a reply."
 	      (when (and group-art
 			 ;; FIXME: Should gcc-mark-as-read work when
 			 ;; Gnus is not running?
-			 (gnus-alive-p)
-			 (or gnus-gcc-mark-as-read
-			     (and
-			      (boundp 'gnus-inews-mark-gcc-as-read)
-			      (symbol-value 'gnus-inews-mark-gcc-as-read))))
-		(gnus-group-mark-article-read group (cdr group-art)))
+			 (gnus-alive-p))
+		(if (or gnus-gcc-mark-as-read
+			(and (boundp 'gnus-inews-mark-gcc-as-read)
+			     (symbol-value 'gnus-inews-mark-gcc-as-read)))
+		    (gnus-group-mark-article-read group (cdr group-art))
+		  (with-current-buffer gnus-group-buffer
+		    (let ((gnus-group-marked (list group))
+			  (gnus-get-new-news-hook nil)
+			  (inhibit-read-only t))
+		      (gnus-group-get-new-news-this-group nil t)))))
 	      (setq options message-options)
 	      (with-current-buffer cur (setq message-options options))
 	      (kill-buffer (current-buffer)))))))))
diff --git a/lisp/message.el b/lisp/message.el
index 5569363..acd546a 100644
--- a/lisp/message.el
+++ b/lisp/message.el
@@ -7586,7 +7586,7 @@ is for the internal use."
   (message "Resending message to %s..." address)
   (save-excursion
     (let ((cur (current-buffer))
-	  beg)
+	  gcc beg)
       ;; We first set up a normal mail buffer.
       (unless (message-mail-user-agent)
 	(set-buffer (get-buffer-create " *message resend*"))
@@ -7599,6 +7599,8 @@ is for the internal use."
       ;; Insert our usual headers.
       (message-generate-headers '(From Date To Message-ID))
       (message-narrow-to-headers)
+      (when (setq gcc (mail-fetch-field "gcc" nil t))
+	(message-remove-header "gcc"))
       ;; Remove X-Draft-From header etc.
       (message-remove-header message-ignored-mail-headers t)
       ;; Rename them all to "Resent-*".
@@ -7640,6 +7642,10 @@ is for the internal use."
 	    message-generate-hashcash
 	    rfc2047-encode-encoded-words)
 	(message-send-mail))
+      (when gcc
+	(message-goto-eoh)
+	(insert "Gcc: " gcc "\n"))
+      (run-hooks 'message-sent-hook)
       (kill-buffer (current-buffer)))
     (message "Resending message to %s...done" address)))
 

-----------------------------------------------------------------------
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we listed those
revisions in full, above.

Summary of changes:
 lisp/ChangeLog   |   11 +++++++
 lisp/gnus-msg.el |   89 ++++++++++++++++++++++++++++++++++++++++++++++-------
 lisp/message.el  |    8 ++++-
 3 files changed, 95 insertions(+), 13 deletions(-)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Gnus Project".

The branch, master has been updated


hooks/post-receive
-- 
Gnus Project
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.