*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 09:33:59 +0000 (09:33 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 09:33:59 +0000 (09:33 +0000)
lisp/ChangeLog
lisp/gnus-score.el
lisp/gnus-uu.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/message.el
lisp/nnmail.el
lisp/nntp.el
texi/gnus.texi

index f814a68..967a10c 100644 (file)
@@ -1,5 +1,42 @@
+Fri May 17 16:27:42 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.el (gnus-article-hide-headers): Would make headers
+       iinvisible under XEmacs.
+
+Fri May 17 11:38:52 1996  Lars Magne Ingebrigtsen  <larsi@ylfing.ifi.uio.no>
+
+       * gnus.el (gnus-summary-edit-article-done): Remove article from
+       backlog. 
+       (gnus-group-update-group-line): Would indent oddly.
+
+       * gnus-uu.el (gnus-uu-post-encoded): Use message.
+       (gnus-uu-post-encoded): Don't double-prompt.
+
+       * message.el (message-mode): Do mailabbrev things here.
+
+       * nntp.el (nntp-default-sentinel): Reset nntp-current-group when
+       losing connection.
+
+       * gnus-score.el (gnus-score-load-file): Dumb downcasing.
+
+Fri May 17 06:16:00 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-summary-delete-article): Better prompt.
+
+       * gnus-score.el (gnus-score-load-file): Downcase all header
+       names. 
+
+Thu May 16 14:04:30 1996  Lars Magne Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-make-date-line): Separated into own function
+       and don't reply "Now" to bogus dates.
+       (gnus-summary-search-article): Bind `gnus-article-display-hook' to
+       nil.
+
 Thu May 16 07:40:24 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
 
+       * gnus.el: September Gnus v0.86 is released.
+
        * gnus-xmas.el (gnus-xmas-topic-remove-excess-properties): Remove
        more excess props.
 
index 4a26641..674f69c 100644 (file)
@@ -218,9 +218,26 @@ of the last successful match.")
 
 (defvar gnus-score-cache nil)
 (defvar gnus-scores-articles nil)
-(defvar gnus-header-index nil)
 (defvar gnus-score-index nil)
 
+
+(defconst gnus-header-index
+  ;; Name to index alist.
+  '(("number" 0 gnus-score-integer)
+    ("subject" 1 gnus-score-string)
+    ("from" 2 gnus-score-string)
+    ("date" 3 gnus-score-date)
+    ("message-id" 4 gnus-score-string) 
+    ("references" 5 gnus-score-string) 
+    ("chars" 6 gnus-score-integer) 
+    ("lines" 7 gnus-score-integer) 
+    ("xref" 8 gnus-score-string)
+    ("head" -1 gnus-score-body)
+    ("body" -1 gnus-score-body)
+    ("all" -1 gnus-score-body)
+    ("followup" 2 gnus-score-followup)
+    ("thread" 5 gnus-score-thread)))
+
 (eval-and-compile
   (autoload 'gnus-uu-ctl-map "gnus-uu" nil nil 'keymap))
 
@@ -792,10 +809,18 @@ SCORE is the score to add."
           (setq alist (cons (list 'read-only t) alist)))
       (setq gnus-score-cache
            (cons (cons file alist) gnus-score-cache)))
-    ;; If there are actual scores in the alist, we add it to the
-    ;; return value of this function.
-    (if (memq t (mapcar (lambda (e) (stringp (car e))) alist))
-       (setq lists (list alist)))
+    (let ((a alist)
+         found)
+      (while a
+       ;; Downcase all header names.
+       (when (stringp (caar a))
+         (setcar (car a) (downcase (caar a)))
+         (setq found t))
+       (pop a))
+      ;; If there are actual scores in the alist, we add it to the
+      ;; return value of this function.
+      (when found
+       (setq lists (list alist))))
     ;; Treat the other possible atoms in the score alist.
     (let ((mark (car (gnus-score-get 'mark alist)))
          (expunge (car (gnus-score-get 'expunge alist)))
@@ -1085,10 +1110,9 @@ SCORE is the score to add."
              (gnus-score-orphans gnus-orphan-score))
            ;; Run each header through the score process.
            (while entries
-             (setq entry (car entries)
-                   header (downcase (nth 0 entry))
-                   entries (cdr entries))
-             (setq gnus-score-index (nth 1 (assoc header gnus-header-index)))
+             (setq entry (pop entries)
+                   header (nth 0 entry)
+                   gnus-score-index (nth 1 (assoc header gnus-header-index)))
              (when (< 0 (apply 'max (mapcar
                                      (lambda (score)
                                        (length (gnus-score-get header score)))
@@ -1303,9 +1327,9 @@ SCORE is the score to add."
       (let* ((buffer-read-only nil)
             (articles gnus-scores-articles)
             (all-scores scores)
-            (request-func (cond ((string= "head" (downcase header))
+            (request-func (cond ((string= "head" header)
                                  'gnus-request-head)
-                                ((string= "body" (downcase header))
+                                ((string= "body" header)
                                  'gnus-request-body)
                                 (t 'gnus-request-article)))
             entries alist ofunc article last)
@@ -1712,23 +1736,6 @@ SCORE is the score to add."
   ;; Build a `gnus-newsgroup-scored' type cons from ARTICLE.
   (cons (mail-header-number (car article)) (cdr article)))
 
-(defconst gnus-header-index
-  ;; Name to index alist.
-  '(("number" 0 gnus-score-integer)
-    ("subject" 1 gnus-score-string)
-    ("from" 2 gnus-score-string)
-    ("date" 3 gnus-score-date)
-    ("message-id" 4 gnus-score-string) 
-    ("references" 5 gnus-score-string) 
-    ("chars" 6 gnus-score-integer) 
-    ("lines" 7 gnus-score-integer) 
-    ("xref" 8 gnus-score-string)
-    ("head" -1 gnus-score-body)
-    ("body" -1 gnus-score-body)
-    ("all" -1 gnus-score-body)
-    ("followup" 2 gnus-score-followup)
-    ("thread" 5 gnus-score-thread)))
-
 (defun gnus-current-score-file-nondirectory (&optional score-file)
   (let ((score-file (or score-file gnus-current-score-file)))
     (if score-file 
index dd9e356..46828b8 100644 (file)
@@ -1877,7 +1877,7 @@ If no file has been included, the user will be asked for a file."
          (progn
            (end-of-line)
            (insert (format " (0/%d)" parts))))
-      (gnus-inews-news))
+      (message-send))
 
     (save-excursion
       (setq i 1)
@@ -1940,7 +1940,8 @@ If no file has been included, the user will be asked for a file."
              (forward-line 1)))
        (insert beg-line)
        (insert "\n")
-       (gnus-inews-news)))
+       (let (message-sent-message-via)
+         (message-send))))
 
     (and (setq buf (get-buffer send-buffer-name))
         (kill-buffer buf))
index 4deae9a..845de9e 100644 (file)
@@ -151,7 +151,11 @@ displayed, no centering will be performed."
     (remove-text-properties 
      beg end 
      '(gnus-topic nil gnus-topic-level nil gnus-topic-visible nil))
-    (goto-char end)))
+    (goto-char end)
+    (map-extents 
+     (lambda (e ma)
+       (set-extent-property e 'start-closed t))
+     (current-buffer) beg end)))
                  
 (defun gnus-xmas-topic-remove-excess-properties ()
   (let ((end (point))
index a063b3e..b064964 100644 (file)
@@ -1718,7 +1718,7 @@ variable (string, integer, character, etc).")
   "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls + Boys)"
   "The mail address of the Gnus maintainers.")
 
-(defconst gnus-version "September Gnus v0.86"
+(defconst gnus-version "September Gnus v0.87"
   "Version number for this version of Gnus.")
 
 (defvar gnus-info-nodes
@@ -4844,7 +4844,6 @@ increase the score of each group you read."
   "Update the current line in the group buffer."
   (let* ((buffer-read-only nil)
         (group (gnus-group-group-name))
-        (gnus-group-indentation (gnus-group-group-indentation))
         (entry (and group (gnus-gethash group gnus-newsrc-hashtb))))
     (and entry
         (not (gnus-ephemeral-group-p group))
@@ -4860,7 +4859,6 @@ increase the score of each group you read."
   "Insert GROUP on the current line."
   (let ((entry (gnus-gethash group gnus-newsrc-hashtb))
        active info)
-    (setq gnus-group-indentation (gnus-group-group-indentation))
     (if entry
        (progn
          ;; (Un)subscribed group.
@@ -11006,6 +11004,7 @@ If BACKWARD, search backward instead."
 Optional argument BACKWARD means do search for backward.
 gnus-select-article-hook is not called during the search."
   (let ((gnus-select-article-hook nil) ;Disable hook.
+       (gnus-article-display-hook nil)
        (gnus-mark-article-hook nil)    ;Inhibit marking as read.
        (re-search
         (if backward
@@ -11571,7 +11570,8 @@ delete these instead."
     (if (and gnus-novice-user
             (not (gnus-y-or-n-p
                   (format "Do you really want to delete %s forever? "
-                          (if (> (length articles) 1) "these articles"
+                          (if (> (length articles) 1) 
+                              (format "these %s articles" (length articles))
                             "this article")))))
        ()
       ;; Delete the articles.
@@ -11636,7 +11636,10 @@ groups."
        (gnus-summary-update-article (cdr gnus-article-current))
        (when gnus-use-cache
          (gnus-cache-update-article 
-          (cdr gnus-article-current) (car gnus-article-current))))
+          (cdr gnus-article-current) (car gnus-article-current)))
+       (when gnus-keep-backlog
+         (gnus-backlog-remove-article 
+          (car gnus-article-current) (cdr gnus-article-current))))
       (save-excursion
        (when (get-buffer gnus-original-article-buffer)
          (set-buffer gnus-original-article-buffer)
@@ -13777,7 +13780,9 @@ always hide."
              (if delete
                  (delete-region beg (point-max))
                ;; Suggested by Sudish Joseph <joseph@cis.ohio-state.edu>.
-               (gnus-hide-text-type beg (point-max) 'headers)))))))))
+               (gnus-hide-text-type beg (point-max) 'headers))
+             ;; Work around XEmacs lossage.
+             (put-text-property (point-min) beg 'invisible nil))))))))
 
 (defun gnus-article-hide-boring-headers (&optional arg)
   "Toggle hiding of headers that aren't very interesting.
@@ -14177,77 +14182,7 @@ how much time has lapsed since DATE."
                  (message-remove-header date-regexp t)
                  (beginning-of-line))
              (goto-char (point-max)))
-           (insert
-            (cond
-             ;; Convert to the local timezone.  We have to slap a
-             ;; `condition-case' round the calls to the timezone
-             ;; functions since they aren't particularly resistant to
-             ;; buggy dates.
-             ((eq type 'local)
-              (concat "Date: " (condition-case ()
-                                   (timezone-make-date-arpa-standard date)
-                                 (error date))
-                      "\n"))
-             ;; Convert to Universal Time.
-             ((eq type 'ut)
-              (concat "Date: "
-                      (condition-case ()
-                          (timezone-make-date-arpa-standard date nil "UT")
-                        (error date))
-                      "\n"))
-             ;; Get the original date from the article.
-             ((eq type 'original)
-              (concat "Date: " date "\n"))
-             ;; Do an X-Sent lapsed format.
-             ((eq type 'lapsed)
-              ;; If the date is seriously mangled, the timezone
-              ;; functions are liable to bug out, so we condition-case
-              ;; the entire thing.
-              (let* ((real-time
-                      (condition-case ()
-                          (gnus-time-minus
-                           (gnus-encode-date
-                            (timezone-make-date-arpa-standard
-                             (current-time-string now)
-                             (current-time-zone now) "UT"))
-                           (gnus-encode-date
-                            (timezone-make-date-arpa-standard
-                             date nil "UT")))
-                        (error '(0 0))))
-                     (real-sec (+ (* (float (car real-time)) 65536)
-                                  (cadr real-time)))
-                     (sec (abs real-sec))
-                     num prev)
-                (if (zerop sec)
-                    "X-Sent: Now\n"
-                  (concat
-                   "X-Sent: "
-                   ;; This is a bit convoluted, but basically we go
-                   ;; through the time units for years, weeks, etc,
-                   ;; and divide things to see whether that results
-                   ;; in positive answers.
-                   (mapconcat
-                    (lambda (unit)
-                      (if (zerop (setq num (ffloor (/ sec (cdr unit)))))
-                          ;; The (remaining) seconds are too few to
-                          ;; be divided into this time unit.
-                          ""
-                        ;; It's big enough, so we output it.
-                        (setq sec (- sec (* num (cdr unit))))
-                        (prog1
-                            (concat (if prev ", " "") (int-to-string
-                                                       (floor num))
-                                    " " (symbol-name (car unit))
-                                    (if (> num 1) "s" ""))
-                          (setq prev t))))
-                    gnus-article-time-units "")
-                   ;; If dates are odd, then it might appear like the
-                   ;; article was sent in the future.
-                   (if (> real-sec 0)
-                       " ago\n"
-                     " in the future\n")))))
-             (t
-              (error "Unknown conversion type: %s" type))))
+           (insert (gnus-make-date-line date type))
            ;; Do highlighting.
            (forward-line -1)
            (when (and (gnus-visual-p 'article-highlight 'highlight)
@@ -14257,6 +14192,84 @@ how much time has lapsed since DATE."
              (put-text-property (match-beginning 2) (match-end 2)
                                 'face eface))))))))
 
+(defun gnus-make-date-line (date type)
+  "Return a DATE line of TYPE."
+  (cond
+   ;; Convert to the local timezone.    We have to slap a
+   ;; `condition-case' round the calls to the timezone
+   ;; functions since they aren't particularly resistant to
+   ;; buggy dates.
+   ((eq type 'local)
+    (concat "Date: " (condition-case ()
+                        (timezone-make-date-arpa-standard date)
+                      (error date))
+           "\n"))
+   ;; Convert to Universal Time.
+   ((eq type 'ut)
+    (concat "Date: "
+           (condition-case ()
+               (timezone-make-date-arpa-standard date nil "UT")
+             (error date))
+           "\n"))
+   ;; Get the original date from the article.
+   ((eq type 'original)
+    (concat "Date: " date "\n"))
+   ;; Do an X-Sent lapsed format.
+   ((eq type 'lapsed)
+    ;; If the date is seriously mangled, the timezone
+    ;; functions are liable to bug out, so we condition-case
+    ;; the entire thing.
+    (let* ((now (current-time))
+          (real-time
+           (condition-case ()
+               (gnus-time-minus
+                (gnus-encode-date
+                 (timezone-make-date-arpa-standard
+                  (current-time-string now)
+                  (current-time-zone now) "UT"))
+                (gnus-encode-date
+                 (timezone-make-date-arpa-standard
+                  date nil "UT")))
+             (error '(0 0))))
+          (real-sec (+ (* (float (car real-time)) 65536)
+                       (cadr real-time)))
+          (sec (abs real-sec))
+          num prev)
+      (cond
+       ((equal real-time '(0 0))
+       "X-Sent: Unknown\n")
+       ((zerop sec)
+       "X-Sent: Now\n")
+       (t
+       (concat
+        "X-Sent: "
+        ;; This is a bit convoluted, but basically we go
+        ;; through the time units for years, weeks, etc,
+        ;; and divide things to see whether that results
+        ;; in positive answers.
+        (mapconcat
+         (lambda (unit)
+           (if (zerop (setq num (ffloor (/ sec (cdr unit)))))
+               ;; The (remaining) seconds are too few to
+               ;; be divided into this time unit.
+               ""
+             ;; It's big enough, so we output it.
+             (setq sec (- sec (* num (cdr unit))))
+             (prog1
+                 (concat (if prev ", " "") (int-to-string
+                                            (floor num))
+                         " " (symbol-name (car unit))
+                         (if (> num 1) "s" ""))
+               (setq prev t))))
+         gnus-article-time-units "")
+        ;; If dates are odd, then it might appear like the
+        ;; article was sent in the future.
+        (if (> real-sec 0)
+            " ago\n"
+          " in the future\n"))))))
+   (t
+    (error "Unknown conversion type: %s" type))))
+
 (defun gnus-article-date-local (&optional highlight)
   "Convert the current article date to the local timezone."
   (interactive (list t))
@@ -16859,6 +16872,28 @@ If FORCE is non-nil, the .newsrc file is read."
         (point) (next-single-property-change
                  (1+ (point)) 'gnus-backlog nil (point-max)))))))
 
+(defun gnus-backlog-remove-article (group number)
+  "Remove article NUMBER in GROUP from the backlog."
+  (when (numberp number)
+    (gnus-backlog-setup)
+    (let ((ident (intern (concat group ":" (int-to-string number))
+                        gnus-backlog-hashtb))
+         beg end)
+      (when (memq ident gnus-backlog-articles)
+       ;; It was in the backlog.
+       (save-excursion
+         (set-buffer (gnus-backlog-buffer))
+         (when (setq beg (text-property-any
+                          (point-min) (point-max) 'gnus-backlog
+                          ident))
+           ;; Find the end (i. e., the beginning of the next article).
+           (setq end
+                 (next-single-property-change
+                  (1+ beg) 'gnus-backlog (current-buffer) (point-max)))
+           (delete-region beg end)
+           ;; Return success.
+           t))))))
+
 (defun gnus-backlog-request-article (group number buffer)
   (when (numberp number)
     (gnus-backlog-setup)
index 599d26d..51ab317 100644 (file)
@@ -765,6 +765,10 @@ C-c C-r  message-ceasar-buffer-body (rot13 the message body)."
   (when (string-match "XEmacs\\|Lucid" emacs-version)
     (message-setup-toolbar))
   (easy-menu-add message-mode-menu message-mode-map)
+  ;; Allow mail alias things.
+  (if (fboundp 'mail-abbrevs-setup)
+      (mail-abbrevs-setup)
+    (funcall (intern "mail-aliases-setup")))
   (run-hooks 'text-mode-hook 'message-mode-hook))
 
 \f
@@ -2033,10 +2037,6 @@ Headers already prepared in the buffer are not modified."
   (save-restriction
     (message-narrow-to-headers)
     (run-hooks 'message-header-setup-hook))
-  ;; Allow mail alias things.
-  (if (fboundp 'mail-abbrevs-setup)
-      (mail-abbrevs-setup)
-    (funcall (intern "mail-aliases-setup")))
   (set-buffer-modified-p nil)
   (run-hooks 'message-setup-hook)
   (message-position-point)
index d039723..21a949a 100644 (file)
@@ -94,7 +94,7 @@ Eg.:
       (lambda (newsgroup)
         (cond ((string-match \"private\" newsgroup) 31)
               ((string-match \"junk\" newsgroup) 1)
-             ((string-match \"important\" 'never))
+             ((string-match \"important\" newsgroup) 'never)
              (t 7))))")
 
 (defvar nnmail-spool-file 
index 263b9a7..df20e38 100644 (file)
@@ -660,6 +660,7 @@ It will prompt for a password."
     (when (and server
               nntp-warn-about-losing-connection)
       (message "nntp: Connection closed to server %s" server)
+      (setq nntp-current-group "")
       (ding))))
 
 (defun nntp-kill-connection (server)
@@ -1261,14 +1262,14 @@ defining this function as macro."
 
 (defun nntp-possibly-change-server (newsgroup server &optional connectionless)
   "Check whether the virtual server needs changing."
-  (if (and server
-          (not (nntp-server-opened server)))
-      ;; This virtual server isn't open, so we (re)open it here.
-      (nntp-open-server server nil t))
-  (if (and newsgroup 
-          (not (equal newsgroup nntp-current-group)))
-      ;; Set the proper current group.
-      (nntp-request-group newsgroup server)))
+  (when (and server
+            (not (nntp-server-opened server)))
+    ;; This virtual server isn't open, so we (re)open it here.
+    (nntp-open-server server nil t))
+  (when (and newsgroup 
+            (not (equal newsgroup nntp-current-group)))
+    ;; Set the proper current group.
+    (nntp-request-group newsgroup server)))
  
 (defun nntp-try-list-active (group)
   (nntp-list-active-group group)
index e7c678d..2bce3f8 100644 (file)
@@ -2227,8 +2227,8 @@ definitions slightly.
 @item T n
 @kindex T n (Group)
 @findex gnus-topic-create-topic
-Create a new topic (@code{gnus-topic-create-topic}).  You will be
-prompted for a topic name and the name of the parent topic.
+Prompt for a new topic name and create it 
+(@code{gnus-topic-create-topic}). 
 
 @item T m
 @kindex T m (Group)
@@ -7204,7 +7204,7 @@ to @kbd{C-c C-c} to make Gnus try to post using the foreign server.
 * Mail and Post::        Mailing and posting at the same time.
 * Archived Messages::    Where Gnus stores the messages you've sent.
 * Posting Styles::       An easier way to configure some key elements.
-* Drafts::               Postponing messages and rejected messages.
+@c * Drafts::               Postponing messages and rejected messages.
 * Rejected Articles::    What happens if the server doesn't like your article?
 @end menu
 
@@ -7342,7 +7342,7 @@ something like:
 (setq gnus-message-archive-method
       '(nnfolder "archive" 
                  (nnfolder-inhibit-expiry t)
-                 (nnfolder-active-file "~/Mail/sent-mail/active")
+                 (nnfolder-active-file "~/News/sent-mail/active")
                  (nnfolder-directory "~/News/sent-mail/")))
 @end lisp
 
@@ -7539,90 +7539,90 @@ So here's a new example:
 @end lisp
 
 
-@node Drafts
-@section Drafts
-@cindex drafts
-
-If you are writing a message (mail or news) and suddenly remember that
-you have a steak in the oven (or some pesto in the food processor, you
-craazy vegetarians), you'll probably wish there was a method to save the
-message you are writing so that you can continue editing it some other
-day, and send it when you feel its finished.
-
-Well, don't worry about it.  Whenever you start composing a message of
-some sort using the Gnus mail and post commands, the buffer you get will
-automatically associate to an article in a special @dfn{draft} group.
-If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
-article will be saved there.  (Auto-save files also go to the draft
-group.) 
-
-@cindex nndraft
-@vindex gnus-draft-group-directory
-The draft group is a special group (which is implemented as an
-@code{nndraft} group, if you absolutely have to know) called
-@samp{nndraft:drafts}.  The variable @code{gnus-draft-group-directory}
-controls both the name of the group and the location---the leaf element
-in the path will be used as the name of the group.  What makes this
-group special is that you can't tick any articles in it or mark any
-articles as read---all articles in the group are permanently unread.
-
-If the group doesn't exist, it will be created and you'll be subscribed
-to it.
-
-@findex gnus-dissociate-buffer-from-draft
-@kindex C-c M-d (Mail)
-@kindex C-c M-d (Post)
-@findex gnus-associate-buffer-with-draft
-@kindex C-c C-d (Mail)
-@kindex C-c C-d (Post)
-If you're writing some super-secret message that you later want to
-encode with PGP before sending, you may wish to turn the auto-saving
-(and association with the draft group) off.  You never know who might be
-interested in reading all your extremely valuable and terribly horrible
-and interesting secrets.  The @kbd{C-c M-d}
-(@code{gnus-dissociate-buffer-from-draft}) command does that for you.
-If you change your mind and want to turn the auto-saving back on again,
-@kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that.
-
-@vindex gnus-use-draft
-To leave association with the draft group off by default, set
-@code{gnus-use-draft} to @code{nil}.  It is @code{t} by default. 
-
-@findex gnus-summary-send-draft
-@kindex S D c (Summary)
-When you want to continue editing the article, you simply enter the
-draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
-that.  You will be placed in a buffer where you left off.
-
-Rejected articles will also be put in this draft group (@pxref{Rejected
-Articles}).
-
-@findex gnus-summary-send-all-drafts
-If you have lots of rejected messages you want to post (or mail) without
-doing further editing, you can use the @kbd{S D a} command
-(@code{gnus-summary-send-all-drafts}).  This command understands the
-process/prefix convention (@pxref{Process/Prefix}).  
-
-
-@node Rejected Articles
-@section Rejected Articles
-@cindex rejected articles
-
-Sometimes a news server will reject an article.  Perhaps the server
-doesn't like your face.  Perhaps it just feels miserable.  Perhaps
-@emph{there be demons}.  Perhaps you have included too much cited text.
-Perhaps the disk is full.  Perhaps the server is down.
-
-These situations are, of course, totally beyond the control of Gnus.
-(Gnus, of course, loves the way you look, always feels great, has angels
-fluttering around inside of it, doesn't care about how much cited text
-you include, never runs full and never goes down.)  So Gnus saves these
-articles until some later time when the server feels better.
-
-The rejected articles will automatically be put in a special draft group
-(@pxref{Drafts}).  When the server comes back up again, you'd then
-typically enter that group and send all the articles off.
-
+@c @node Drafts
+@c @section Drafts
+@c @cindex drafts
+@c 
+@c If you are writing a message (mail or news) and suddenly remember that
+@c you have a steak in the oven (or some pesto in the food processor, you
+@c craazy vegetarians), you'll probably wish there was a method to save the
+@c message you are writing so that you can continue editing it some other
+@c day, and send it when you feel its finished.
+@c 
+@c Well, don't worry about it.  Whenever you start composing a message of
+@c some sort using the Gnus mail and post commands, the buffer you get will
+@c automatically associate to an article in a special @dfn{draft} group.
+@c If you save the buffer the normal way (@kbd{C-x C-s}, for instance), the
+@c article will be saved there.  (Auto-save files also go to the draft
+@c group.) 
+@c 
+@c @cindex nndraft
+@c @vindex gnus-draft-group-directory
+@c The draft group is a special group (which is implemented as an
+@c @code{nndraft} group, if you absolutely have to know) called
+@c @samp{nndraft:drafts}.  The variable @code{gnus-draft-group-directory}
+@c controls both the name of the group and the location---the leaf element
+@c in the path will be used as the name of the group.  What makes this
+@c group special is that you can't tick any articles in it or mark any
+@c articles as read---all articles in the group are permanently unread.
+@c 
+@c If the group doesn't exist, it will be created and you'll be subscribed
+@c to it.
+@c 
+@c @findex gnus-dissociate-buffer-from-draft
+@c @kindex C-c M-d (Mail)
+@c @kindex C-c M-d (Post)
+@c @findex gnus-associate-buffer-with-draft
+@c @kindex C-c C-d (Mail)
+@c @kindex C-c C-d (Post)
+@c If you're writing some super-secret message that you later want to
+@c encode with PGP before sending, you may wish to turn the auto-saving
+@c (and association with the draft group) off.  You never know who might be
+@c interested in reading all your extremely valuable and terribly horrible
+@c and interesting secrets.  The @kbd{C-c M-d}
+@c (@code{gnus-dissociate-buffer-from-draft}) command does that for you.
+@c If you change your mind and want to turn the auto-saving back on again,
+@c @kbd{C-c C-d} (@code{gnus-associate-buffer-with-draft} does that.
+@c 
+@c @vindex gnus-use-draft
+@c To leave association with the draft group off by default, set
+@c @code{gnus-use-draft} to @code{nil}.  It is @code{t} by default. 
+@c 
+@c @findex gnus-summary-send-draft
+@c @kindex S D c (Summary)
+@c When you want to continue editing the article, you simply enter the
+@c draft group and push @kbd{S D c} (@code{gnus-summary-send-draft}) to do
+@c that.  You will be placed in a buffer where you left off.
+@c 
+@c Rejected articles will also be put in this draft group (@pxref{Rejected
+@c Articles}).
+@c 
+@c @findex gnus-summary-send-all-drafts
+@c If you have lots of rejected messages you want to post (or mail) without
+@c doing further editing, you can use the @kbd{S D a} command
+@c (@code{gnus-summary-send-all-drafts}).  This command understands the
+@c process/prefix convention (@pxref{Process/Prefix}).  
+@c 
+@c 
+@c @node Rejected Articles
+@c @section Rejected Articles
+@c @cindex rejected articles
+@c 
+@c Sometimes a news server will reject an article.  Perhaps the server
+@c doesn't like your face.  Perhaps it just feels miserable.  Perhaps
+@c @emph{there be demons}.  Perhaps you have included too much cited text.
+@c Perhaps the disk is full.  Perhaps the server is down.
+@c 
+@c These situations are, of course, totally beyond the control of Gnus.
+@c (Gnus, of course, loves the way you look, always feels great, has angels
+@c fluttering around inside of it, doesn't care about how much cited text
+@c you include, never runs full and never goes down.)  So Gnus saves these
+@c articles until some later time when the server feels better.
+@c 
+@c The rejected articles will automatically be put in a special draft group
+@c (@pxref{Drafts}).  When the server comes back up again, you'd then
+@c typically enter that group and send all the articles off.
+@c 
 
 @node Select Methods
 @chapter Select Methods