*** empty log message ***
[gnus] / lisp / gnus-msg.el
index e692857..c3cabbd 100644 (file)
 
 ;;; Code:
 
-(require 'gnus-load)
+(require 'gnus)
 (require 'gnus-ems)
 (require 'message)
 (require 'gnus-art)
-(require 'gnus)
 
 ;; Added by Sudish Joseph <joseph@cis.ohio-state.edu>.
 (defvar gnus-post-method nil
@@ -81,6 +80,7 @@ of this message.  Please trim your Newsgroups header to exclude this
 group before posting in the future.
 
 Thank you.
+
 "
   "Format string to be inserted when complaining about crossposts.
 The first %s will be replaced by the Newsgroups header;
@@ -132,6 +132,8 @@ Thank you for your help in stamping out bugs.
   "s" gnus-summary-supersede-article
   "r" gnus-summary-reply
   "R" gnus-summary-reply-with-original
+  "n" gnus-summary-followup-to-mail
+  "N" gnus-summary-followup-to-mail-with-original
   "m" gnus-summary-mail-other-window
   "u" gnus-uu-post-news
   "\M-c" gnus-summary-mail-crosspost-complaint
@@ -183,7 +185,6 @@ Thank you for your help in stamping out bugs.
    'send))
 
 (put 'gnus-setup-message 'lisp-indent-function 1)
-(put 'gnus-setup-message 'lisp-indent-hook 1)
 (put 'gnus-setup-message 'edebug-form-spec '(form body))
 
 ;;; Post news commands of Gnus group mode and summary mode
@@ -239,20 +240,33 @@ If prefix argument YANK is non-nil, original article is yanked automatically."
   (interactive "P")
   (gnus-summary-followup (gnus-summary-work-articles n) force-news))
 
+(defun gnus-summary-followup-to-mail (&optional arg)
+  "Followup to the current mail message via news."
+  (interactive 
+   (list (and current-prefix-arg 
+             (gnus-summary-work-articles 1))))
+  (gnus-summary-followup arg t))
+
+(defun gnus-summary-followup-to-mail-with-original (&optional arg)
+  "Followup to the current mail message via news."
+  (interactive "P")
+  (gnus-summary-followup (gnus-summary-work-articles arg) t))
+
 (defun gnus-inews-yank-articles (articles)
   (let (beg article)
+    (message-goto-body)
     (while (setq article (pop articles))
       (save-window-excursion
        (set-buffer gnus-summary-buffer)
        (gnus-summary-select-article nil nil nil article)
        (gnus-summary-remove-process-mark article))
       (gnus-copy-article-buffer)
-      (message-goto-body)      
       (let ((message-reply-buffer gnus-article-copy)
            (message-reply-headers gnus-current-headers))
        (message-yank-original)
        (setq beg (or beg (mark t))))
-      (when articles (insert "\n")))
+      (when articles
+       (insert "\n")))
     (push-mark)
     (goto-char beg)))
 
@@ -300,7 +314,7 @@ header line with the old Message-ID."
   (setq gnus-article-copy (get-buffer-create " *gnus article copy*"))
   (buffer-disable-undo gnus-article-copy)
   (or (memq gnus-article-copy gnus-buffer-list)
-      (setq gnus-buffer-list (cons gnus-article-copy gnus-buffer-list)))
+      (push gnus-article-copy gnus-buffer-list))
   (let ((article-buffer (or article-buffer gnus-article-buffer))
        end beg contents)
     (when (and (get-buffer article-buffer)
@@ -330,7 +344,8 @@ header line with the old Message-ID."
          (delete-region (goto-char (point-min))
                         (or (search-forward "\n\n" nil t) (point)))
          ;; Insert the original article headers.
-         (insert-buffer-substring gnus-original-article-buffer beg end)))
+         (insert-buffer-substring gnus-original-article-buffer beg end)
+         (article-decode-rfc1522)))
       gnus-article-copy)))
 
 (defun gnus-post-news (post &optional group header article-buffer yank subject
@@ -343,16 +358,19 @@ header line with the old Message-ID."
                              (t 'message))
       (let* ((group (or group gnus-newsgroup-name))
             (pgroup group)
-            to-address to-group mailing-list to-list)
+            to-address to-group mailing-list to-list 
+            newsgroup-p)
        (when group
          (setq to-address (gnus-group-find-parameter group 'to-address)
                to-group (gnus-group-find-parameter group 'to-group)
                to-list (gnus-group-find-parameter group 'to-list)
+               newsgroup-p (gnus-group-find-parameter group 'newsgroup)
                mailing-list (when gnus-mailing-list-groups
                               (string-match gnus-mailing-list-groups group))
                group (gnus-group-real-name group)))
        (if (or (and to-group
                     (gnus-news-group-p to-group))
+               newsgroup-p
                force-news
                (and (gnus-news-group-p 
                      (or pgroup gnus-newsgroup-name)
@@ -365,7 +383,7 @@ header line with the old Message-ID."
            (if post
                (message-news (or to-group group))
              (set-buffer gnus-article-copy)
-             (message-followup to-group))
+             (message-followup (if (or newsgroup-p force-news) nil to-group)))
          ;; The is mail.
          (if post
              (progn
@@ -460,9 +478,8 @@ If SILENT, don't prompt the user."
          end)
       (when message-id
        (unless gnus-inews-sent-ids
-         (condition-case ()
-             (load  t t t)
-           (error nil)))
+         (ignore-errors
+           (load t t t)))
        (if (member message-id gnus-inews-sent-ids)
            ;; Reject this message.
            (not (gnus-yes-or-no-p 
@@ -561,14 +578,17 @@ If prefix argument YANK is non-nil, original article is yanked automatically."
   (interactive "P")
   (gnus-summary-reply (gnus-summary-work-articles n)))
 
-(defun gnus-summary-mail-forward (&optional post)
-  "Forward the current message to another user."
+(defun gnus-summary-mail-forward (&optional full-headers post)
+  "Forward the current message to another user.
+If FULL-HEADERS (the prefix), include full headers when forwarding."
   (interactive "P")
   (gnus-set-global-variables)
   (gnus-setup-message 'forward
     (gnus-summary-select-article)
     (set-buffer gnus-original-article-buffer)
-    (message-forward post)))
+    (let ((message-included-forward-headers
+          (if full-headers "" message-included-forward-headers)))
+      (message-forward post))))
 
 (defun gnus-summary-resend-message (address)
   "Resend the current article to ADDRESS."
@@ -578,27 +598,29 @@ If prefix argument YANK is non-nil, original article is yanked automatically."
     (set-buffer gnus-original-article-buffer)
     (message-resend address)))
 
-(defun gnus-summary-post-forward ()
-  "Forward the current article to a newsgroup."
-  (interactive)
-  (gnus-summary-mail-forward t))
+(defun gnus-summary-post-forward (&optional full-headers)
+  "Forward the current article to a newsgroup.
+If FULL-HEADERS (the prefix), include full headers when forwarding."
+  (interactive "P")
+  (gnus-summary-mail-forward full-headers t))
 
 (defvar gnus-nastygram-message 
-  "The following article was inappropriately posted to %s.\n"
+  "The following article was inappropriately posted to %s.\n\n"
   "Format string to insert in nastygrams.
 The current group name will be inserted at \"%s\".")
 
 (defun gnus-summary-mail-nastygram (n)
   "Send a nastygram to the author of the current article."
   (interactive "P")
-  (if (or gnus-expert-user
-         (gnus-y-or-n-p 
-          "Really send a nastygram to the author of the current article? "))
-      (let ((group gnus-newsgroup-name))
-       (gnus-summary-reply-with-original n)
-       (set-buffer gnus-message-buffer)
-       (insert (format gnus-nastygram-message group))
-       (message-send-and-exit))))
+  (when (or gnus-expert-user
+           (gnus-y-or-n-p 
+            "Really send a nastygram to the author of the current article? "))
+    (let ((group gnus-newsgroup-name))
+      (gnus-summary-reply-with-original n)
+      (set-buffer gnus-message-buffer)
+      (message-goto-body)
+      (insert (format gnus-nastygram-message group))
+      (message-send-and-exit))))
 
 (defun gnus-summary-mail-crosspost-complaint (n)
   "Send a complaint about crossposting to the current article(s)."
@@ -625,7 +647,11 @@ The current group name will be inserted at \"%s\".")
          (set-buffer gnus-summary-buffer)
          (gnus-summary-reply-with-original 1)
          (set-buffer gnus-message-buffer)
+         (message-goto-body)
          (insert (format gnus-crosspost-complaint newsgroups group))
+         (message-goto-subject)
+         (re-search-forward " *$")
+         (replace-match " (crosspost notification)" t t)
          (when (gnus-y-or-n-p "Send this complaint? ")
            (message-send-and-exit)))))))
 
@@ -651,24 +677,17 @@ The current group name will be inserted at \"%s\".")
                    (logand (progn
                              (while (search-forward "\"" nil t)
                                (incf i))
-                             (if (zerop i) 2 i)) 2)))))
+                             (if (zerop i) 2 i))
+                           2)))))
        (skip-chars-forward ",")
        (skip-chars-forward "^,"))
       (skip-chars-backward " ")
-      (setq accumulated
-           (cons (buffer-substring beg (point))
-                 accumulated))
+      (push (buffer-substring beg (point))
+           accumulated)
       (skip-chars-forward "^,")
       (skip-chars-forward ", "))
     accumulated))
 
-(defun gnus-mail-yank-original ()
-  (interactive)
-  (save-excursion
-    (mail-yank-original nil))
-  (or mail-yank-hooks mail-citation-hook
-      (run-hooks 'news-reply-header-hook)))
-
 (defun gnus-inews-add-to-address (group)
   (let ((to-address (mail-fetch-field "to")))
     (when (and to-address
@@ -687,8 +706,8 @@ The current group name will be inserted at \"%s\".")
     (or (and group (not (gnus-group-read-only-p group)))
        (setq group (read-string "Put in group: " nil
                                 (gnus-writable-groups))))
-    (and (gnus-gethash group gnus-newsrc-hashtb)
-        (error "No such group: %s" group))
+    (when (gnus-gethash group gnus-newsrc-hashtb)
+      (error "No such group: %s" group))
 
     (save-excursion
       (save-restriction
@@ -704,15 +723,14 @@ The current group name will be inserted at \"%s\".")
 
     (gnus-inews-do-gcc)
 
-    (if (get-buffer gnus-group-buffer)
-       (progn
-         (if (gnus-buffer-exists-p (car-safe reply))
-             (progn
-               (set-buffer (car reply))
-               (and (cdr reply)
-                    (gnus-summary-mark-article-as-replied 
-                     (cdr reply)))))
-         (and winconf (set-window-configuration winconf))))))
+    (when (get-buffer gnus-group-buffer)
+      (when (gnus-buffer-exists-p (car-safe reply))
+       (set-buffer (car reply))
+       (and (cdr reply)
+            (gnus-summary-mark-article-as-replied 
+             (cdr reply))))
+      (when winconf
+       (set-window-configuration winconf)))))
 
 (defun gnus-article-mail (yank)
   "Send a reply to the address near point.
@@ -753,14 +771,14 @@ If YANK is non-nil, include the original article."
     (message "")))
 
 (defun gnus-bug-kill-buffer ()
-  (and (get-buffer "*Gnus Help Bug*")
-       (kill-buffer "*Gnus Help Bug*")))
+  (when (get-buffer "*Gnus Help Bug*")
+    (kill-buffer "*Gnus Help Bug*")))
 
 (defun gnus-debug ()
   "Attempts to go through the Gnus source file and report what variables have been changed.
 The source file has to be in the Emacs load path."
   (interactive)
-  (let ((files '("gnus-load.el" "gnus-sum.el" "gnus-group.el"
+  (let ((files '("gnus.el" "gnus-sum.el" "gnus-group.el"
                 "gnus-art.el" "gnus-start.el"
                 "gnus-msg.el" "gnus-score.el" "gnus-win.el"
                 "nnmail.el" "message.el"))
@@ -773,23 +791,23 @@ The source file has to be in the Emacs load path."
       (buffer-disable-undo (current-buffer))
       (while files
        (erase-buffer)
-       (when (file-exists-p (setq file (locate-library (pop files))))
+       (when (and (setq file (locate-library (pop files)))
+                  (file-exists-p file))
          (insert-file-contents file)
          (goto-char (point-min))
          (if (not (re-search-forward "^;;* *Internal variables" nil t))
              (gnus-message 4 "Malformed sources in file %s" file)
            (narrow-to-region (point-min) (point))
            (goto-char (point-min))
-           (while (setq expr (condition-case () 
-                                 (read (current-buffer)) (error nil)))
-             (condition-case ()
-                 (and (eq (car expr) 'defvar)
-                      (stringp (nth 3 expr))
-                      (or (not (boundp (nth 1 expr)))
-                          (not (equal (eval (nth 2 expr))
-                                      (symbol-value (nth 1 expr)))))
-                      (push (nth 1 expr) olist))
-               (error nil))))))
+           (while (setq expr (ignore-errors (read (current-buffer))))
+             (ignore-errors
+               (and (or (eq (car expr) 'defvar)
+                        (eq (car expr) 'defcustom))
+                    (stringp (nth 3 expr))
+                    (or (not (boundp (nth 1 expr)))
+                        (not (equal (eval (nth 2 expr))
+                                    (symbol-value (nth 1 expr)))))
+                    (push (nth 1 expr) olist)))))))
       (kill-buffer (current-buffer)))
     (when (setq olist (nreverse olist))
       (insert "------------------ Environment follows ------------------\n\n"))
@@ -810,7 +828,7 @@ The source file has to be in the Emacs load path."
       (setq olist (cdr olist)))
     (insert "\n\n")
     ;; Remove any null chars - they seem to cause trouble for some
-    ;; mailers.  (Byte-compiled output from the stuff above.) 
+    ;; mailers.  (Byte-compiled output from the stuff above.)
     (goto-char (point-min))
     (while (re-search-forward "[\000\200]" nil t)
       (replace-match "" t t))))
@@ -971,7 +989,8 @@ this is a reply."
                          name
                        (gnus-group-prefixed-name 
                         name gnus-message-archive-method)))
-             (if groups (insert " ")))
+             (when groups
+               (insert " ")))
            (insert "\n")))))))
 
 (defun gnus-summary-send-draft ()