diff lisp/gnus/gnus-draft.el @ 56927:55fd4f77387a after-merge-gnus-5_10

Revision: miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-523 Merge from emacs--gnus--5.10, gnus--rel--5.10 Patches applied: * miles@gnu.org--gnu-2004/emacs--gnus--5.10--base-0 tag of miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-464 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-1 Import from CVS branch gnus-5_10-branch * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-2 Merge from lorentey@elte.hu--2004/emacs--multi-tty--0, emacs--cvs-trunk--0 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-3 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/emacs--gnus--5.10--patch-4 Merge from gnus--rel--5.10 * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-18 Update from CVS * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-19 Remove autoconf-generated files from archive * miles@gnu.org--gnu-2004/gnus--rel--5.10--patch-20 Update from CVS
author Miles Bader <miles@gnu.org>
date Sat, 04 Sep 2004 13:13:48 +0000
parents 695cf19ef79e
children 7fdc1df35f39 cce1c0ee76ee
line wrap: on
line diff
--- a/lisp/gnus/gnus-draft.el	Sat Sep 04 13:06:38 2004 +0000
+++ b/lisp/gnus/gnus-draft.el	Sat Sep 04 13:13:48 2004 +0000
@@ -1,5 +1,5 @@
 ;;; gnus-draft.el --- draft message support for Gnus
-;; Copyright (C) 1997, 1998, 1999, 2000
+;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003
 ;;        Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
@@ -46,6 +46,7 @@
 
   (gnus-define-keys gnus-draft-mode-map
     "Dt" gnus-draft-toggle-sending
+    "e"  gnus-draft-edit-message ;; Use `B w' for `gnus-summary-edit-article'
     "De" gnus-draft-edit-message
     "Ds" gnus-draft-send-message
     "DS" gnus-draft-send-all-messages))
@@ -94,13 +95,18 @@
 (defun gnus-draft-edit-message ()
   "Enter a mail/post buffer to edit and send the draft."
   (interactive)
-  (let ((article (gnus-summary-article-number)))
+  (let ((article (gnus-summary-article-number))
+	(group gnus-newsgroup-name))
     (gnus-summary-mark-as-read article gnus-canceled-mark)
-    (gnus-draft-setup article gnus-newsgroup-name t)
+    (gnus-draft-setup article group t)
     (set-buffer-modified-p t)
+    (save-excursion
+      (save-restriction
+	(message-narrow-to-headers)
+	(message-remove-header "date")))
     (save-buffer)
     (let ((gnus-verbose-backends nil))
-      (gnus-request-expire-articles (list article) gnus-newsgroup-name t))
+      (gnus-request-expire-articles (list article) group t))
     (push
      `((lambda ()
 	 (when (gnus-buffer-exists-p ,gnus-summary-buffer)
@@ -126,8 +132,9 @@
 
 (defun gnus-draft-send (article &optional group interactive)
   "Send message ARTICLE."
-  (let ((message-syntax-checks (if interactive nil
+  (let ((message-syntax-checks (if interactive message-syntax-checks
 				 'dont-check-for-anything-just-trust-me))
+	(message-hidden-headers nil)
 	(message-inhibit-body-encoding (or (not group)
 					   (equal group "nndraft:queue")
 					   message-inhibit-body-encoding))
@@ -135,13 +142,20 @@
 				message-send-hook))
 	(message-setup-hook (and group (not (equal group "nndraft:queue"))
 				 message-setup-hook))
-	type method)
+	type method move-to)
     (gnus-draft-setup article (or group "nndraft:queue"))
     ;; We read the meta-information that says how and where
     ;; this message is to be sent.
     (save-restriction
       (message-narrow-to-head)
       (when (re-search-forward
+	     (concat "^" (regexp-quote gnus-agent-target-move-group-header)
+		     ":") nil t)
+	(skip-syntax-forward "-")
+	(setq move-to (buffer-substring (point) (gnus-point-at-eol)))
+	(message-remove-header gnus-agent-target-move-group-header))
+      (goto-char (point-min))
+      (when (re-search-forward
 	     (concat "^" (regexp-quote gnus-agent-meta-information-header) ":")
 	     nil t)
 	(setq type (ignore-errors (read (current-buffer)))
@@ -159,8 +173,12 @@
 			 (message-this-is-mail (eq type 'mail))
 			 (gnus-post-method method)
 			 (message-post-method method))
-		     (message-send-and-exit))
-		 (message-send-and-exit)))
+		     (if move-to
+			 (gnus-inews-do-gcc move-to)
+		       (message-send-and-exit)))
+		 (if move-to
+		     (gnus-inews-do-gcc move-to)
+		   (message-send-and-exit))))
       (let ((gnus-verbose-backends nil))
 	(gnus-request-expire-articles
 	 (list article) (or group "nndraft:queue") t)))))
@@ -168,10 +186,14 @@
 (defun gnus-draft-send-all-messages ()
   "Send all the sendable drafts."
   (interactive)
-  (gnus-uu-mark-buffer)
-  (gnus-draft-send-message))
+  (when (or
+	 gnus-expert-user
+	 (gnus-y-or-n-p
+	  "Send all drafts? "))
+    (gnus-uu-mark-buffer)
+    (gnus-draft-send-message)))
 
-(defun gnus-group-send-drafts ()
+(defun gnus-group-send-queue ()
   "Send all sendable articles from the queue group."
   (interactive)
   (gnus-activate-group "nndraft:queue")
@@ -181,6 +203,7 @@
 			(cdr (assq 'unsend
 				   (gnus-info-marks
 				    (gnus-get-info "nndraft:queue"))))))
+	   (gnus-posting-styles nil)
 	   (total (length articles))
 	   article)
       (while (setq article (pop articles))
@@ -190,6 +213,20 @@
 			 (- total (length articles)) total)))
 	    (gnus-draft-send article)))))))
 
+;;;###autoload
+(defun gnus-draft-reminder ()
+  "Reminder user if there are unsent drafts."
+  (interactive)
+  (if (gnus-alive-p)
+      (let (active)
+	(catch 'continue
+	  (dolist (group '("nndraft:drafts" "nndraft:queue"))
+	    (setq active (gnus-activate-group group))
+	    (if (and active (>= (cdr active) (car active)))
+		(if (y-or-n-p "There are unsent drafts.  Confirm to exit? ")
+		    (throw 'continue t)
+		  (error "Stop!"))))))))
+
 ;;; Utility functions
 
 ;;;!!!If this is byte-compiled, it fails miserably.
@@ -199,21 +236,41 @@
 
 (progn
   (defun gnus-draft-setup (narticle group &optional restore)
-    (gnus-setup-message 'forward
-      (let ((article narticle))
-	(message-mail)
-	(erase-buffer)
-	(if (not (gnus-request-restore-buffer article group))
-	    (error "Couldn't restore the article")
-	  (if (and restore (equal group "nndraft:queue"))
+    (let (ga)
+      (gnus-setup-message 'forward
+	(let ((article narticle))
+	  (message-mail)
+	  (erase-buffer)
+	  (if (not (gnus-request-restore-buffer article group))
+	      (error "Couldn't restore the article")
+	    (when (and restore
+		       (equal group "nndraft:queue"))
 	      (mime-to-mml))
-	  ;; Insert the separator.
-	  (goto-char (point-min))
-	  (search-forward "\n\n")
-	  (forward-char -1)
-	  (insert mail-header-separator)
-	  (forward-line 1)
-	  (message-set-auto-save-file-name))))))
+	    ;; Insert the separator.
+	    (goto-char (point-min))
+	    (search-forward "\n\n")
+	    (forward-char -1)
+	    (insert mail-header-separator)
+	    (forward-line 1)
+	    (setq ga (message-fetch-field gnus-draft-meta-information-header))
+	    (message-set-auto-save-file-name))))
+      (gnus-backlog-remove-article group narticle)
+      (when (and ga
+		 (ignore-errors (setq ga (car (read-from-string ga)))))
+	(setq gnus-newsgroup-name
+	      (if (equal (car ga) "") nil (car ga)))
+	(gnus-configure-posting-styles)
+	(setq gnus-message-group-art (cons gnus-newsgroup-name (cadr ga)))
+	(setq message-post-method
+	      `(lambda (arg)
+		 (gnus-post-method arg ,(car ga))))
+	(unless (equal (cadr ga) "")
+	  (message-add-action
+	   `(progn
+	      (gnus-add-mark ,(car ga) 'replied ,(cadr ga))
+	      (gnus-request-set-mark ,(car ga) (list (list (list ,(cadr ga))
+							   'add '(reply)))))
+	   'send))))))
 
 (defun gnus-draft-article-sendable-p (article)
   "Say whether ARTICLE is sendable."