*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 07:27:36 +0000 (07:27 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 07:27:36 +0000 (07:27 +0000)
40 files changed:
lisp/ChangeLog
lisp/dgnushack.el
lisp/gnus-cache.el
lisp/gnus-cite.el
lisp/gnus-cus.el
lisp/gnus-demon.el
lisp/gnus-ems.el
lisp/gnus-kill.el
lisp/gnus-mh.el
lisp/gnus-msg.el
lisp/gnus-nocem.el
lisp/gnus-salt.el
lisp/gnus-score.el
lisp/gnus-setup.el
lisp/gnus-soup.el
lisp/gnus-srvr.el
lisp/gnus-topic.el
lisp/gnus-uu.el
lisp/gnus-vis.el
lisp/gnus-vm.el
lisp/gnus-xmas.el
lisp/gnus.el
lisp/nnbabyl.el
lisp/nndir.el
lisp/nndoc.el
lisp/nndraft.el
lisp/nneething.el
lisp/nnfolder.el
lisp/nnkiboze.el
lisp/nnmail.el
lisp/nnmbox.el
lisp/nnmh.el
lisp/nnml.el
lisp/nnsoup.el
lisp/nnspool.el
lisp/nntp.el
lisp/nnvirtual.el
texi/ChangeLog
texi/Makefile
texi/gnus.texi

index 2ca8c13..062c5f3 100644 (file)
@@ -1,7 +1,247 @@
+Sun Feb  4 16:22:20 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
+
+       * gnus.el (gnus-summary-edit-article): Make sure we're in the
+       summary buffer.
+
+Sun Feb  4 14:05:20 1996  Lars Magne Ingebrigtsen  <larsi@eistla.ifi.uio.no>
+
+       * nndoc.el (nndoc-guess-digest-type): Too strict body-begin for
+       MIME digests.
+
+       * gnus-msg.el (gnus-removable-headers): Don't remove Bcc header.
+       (gnus-mail-send): Accept a parameter.
+       (gnus-inews-send-mail-copy): Use it.
+
+       * gnus-salt.el (gnus-tree-close): Don't kill the tree buffer.
+
+       * gnus.el (gnus-summary-select-article): Changed return value.
+       (gnus-summary-scroll-up): Use it.
+
+Sat Feb  3 20:39:59 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-summary-dummy-line-format): Included tabs.
+       (gnus-summary-prepare-threads): Insert dummy lines properly.
+       (gnus-summary-hide-thread): Hide dummies better.
+
+       * gnus-uu.el (gnus-uu-get-actions): Escape special characters.
+
+       * gnus-soup.el (gnus-soup-group-brew): Add articles in right
+       order; don't generate display.
+
+       * gnus.el (gnus-summary-sort): Allow sorting in reverse order.
+       (gnus-summary-pop-limit): Don't pop if there isn't anything to
+       pop. 
+       (gnus-sort-articles): Would destroy the newsgroup data.
+
+       * gnus-soup.el (gnus-soup-unpack-packet): Return the process value.
+
+       * gnus.el (gnus-summary-exit): Don't bury buffers that don't exist.
+       (gnus-summary-exit-no-update): Ditto.
+
+Sat Feb  3 14:37:31 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
+
+       * gnus-soup.el (gnus-soup-add-article): Would bug out on
+       non-existent articles. 
+
+       * gnus.el (gnus-configure-windows): Delete windows on all frames.
+
+Sat Feb  3 15:07:38 1996  Lars Magne Ingebrigtsen  <larsi@ifi.uio.no>
+
+       * gnus.el (gnus-summary-read-group): Wouldn't score anything.
+
+       * gnus.el: 0.34 is released.
+
+Sat Feb  3 13:08:48 1996  Lars Magne Ingebrigtsen  <larsi@aegir.ifi.uio.no>
+
+       * gnus-msg.el (gnus-summary-resend-bounced-mail): Strip more
+       gruft. 
+
+       * gnus.el: 0.33 is released.
+
+Fri Feb  2 20:19:07 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-summary-exit): Bury the article buffer.
+
+       * gnus-score.el (gnus-score-followup-article): Don't do
+       `score-effect'. 
+
+Fri Feb  2 20:07:31 1996  Jason L. Tibbitts, III  <tibbs@uh.edu>
+
+       * nnmail.el (nnmail-process-babyl-mail-format): Allow many spaces
+       after ":".
+
+Fri Feb  2 20:05:02 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-summary-select-article): Return t on success.
+
+Thu Feb  1 00:50:54 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * nnfolder.el (nnfolder-request-group): Give a better error
+       message. 
+
+       * nnfolder.el: Really use virtual servers.
+
+       * gnus.el (gnus-select-newsgroup): Moved score file processing to
+       an earlier point.
+
+       * gnus-msg.el (gnus-post-method): Use `gnus-post-method' from the
+       group buffer.
+
+       * nnsoup.el (nnsoup-request-expire-articles): Bombed.
+       (nnsoup-delete-unreferenced-message-files): New command.
+
+       * gnus-cache.el (gnus-cache-possibly-enter-article): Update cache
+       mark. 
+       (gnus-cache-possibly-remove-article): Ditto.
+
+       * gnus-srvr.el (gnus-server-prepare): Weed out nil servers.
+
+       * gnus-msg.el (gnus-mail-reply): Respect
+       `rmail-dont-reply-to-names'. 
+
+Wed Jan 31 19:25:50 1996  Per Abrahamsen  <abraham@dina.kvl.dk>
+
+       * gnus-msg.el (gnus-inews-insert-mime-headers): `(widen)' before
+       searching for 8-bit characters.
+
+       * gnus-vis.el (gnus-article-highlight-headers): Make it ignore
+       the `intangible' text property.
+
+Thu Feb  1 00:33:37 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-summary-limit-to-unread): Remove sparse articles. 
+
+Wed Jan 31 15:54:38 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-score.el (gnus-summary-score-map): Recursive map.
+
+       * gnus-msg.el (gnus-dissociate-buffer-from-draft): Didn't run hook
+       properly.
+
+       * gnus-kill.el (gnus-execute): Don't use `gnus-header-*'.
+
+       * gnus-msg.el (gnus-kill-message-buffer): New command and
+       keystroke. 
+       (gnus-mail-setup): Use the gnus-mail-*-method variables.
+
+       * gnus-topic.el (gnus-topic-rename): Default to current topic.
+       (gnus-topic-create-topic): Ditto.
+
+       * gnus-vis.el (gnus-group-highlight-line): Offer ticked number.
+
+       * gnus-uu.el (gnus-uu-grab-articles): Remove the message.
+
+       * gnus-vis.el (gnus-group-highlight): New default for dark
+       backgrounds. 
+
+       * gnus-topic.el (gnus-group-prepare-topics): Don't do anything
+       about dead groups.
+
+       * gnus.el (gnus-summary-mode-map): Clobbered "D".
+
+Mon Jan 29 19:06:00 1996  Kim-Minh Kaplan  <kkaplan@cdfhp3.in2p3.fr>
+
+       * gnus.el (gnus-simplify-subject-fuzzy): Fold case.
+
+Mon Jan 29 17:48:12 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-summary-limit): Hide any threads, possibly.
+
+       * gnus-msg.el (gnus-forward-insert-buffer): Really delete unwanted
+       headers.
+
+       * gnus-vis.el (gnus-insert-prev-page-button): Allow clicking.
+       (gnus-insert-next-page-button): Ditto.
+
+       * nntp.el (nntp-send-region-to-server): Copy text to a temp buffer
+       before sending.
+
+Sun Jan 28 10:28:39 1996  Lars Magne Ingebrigtsen  <larsi@eistla.ifi.uio.no>
+
+       * gnus-cite.el (gnus-dissect-cited-text): Don't push a nil on the
+       list. 
+
+Sat Jan 27 20:32:29 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-topic.el (gnus-group-topic-topics-only): Removed variable. 
+
+       * nnbabyl.el (nnbabyl-request-group): Don't report failures on
+       empty groups.
+       * nnmbox.el (nnmbox-request-group): Ditto.
+
+       * gnus.el (gnus-simplify-buffer-fuzzy): Simplify [x/x].
+
+       * gnus-score.el (gnus-score-default-header): Duplicate defvars.
+       (gnus-summary-increase-score): Default variables should be
+       symbols, not chars.
+
+       * gnus.el (gnus-summary-mode-map): Wrong name for `t' keystroke. 
+
+Sat Jan 27 20:29:45 1996  Marc Auslander  <marc@watson.ibm.com>
+
+       * gnus-score.el (gnus-summary-increase-score): Didn't work for
+       non-temporary score entries.
+
+Fri Jan 26 17:24:00 1996  David K}gedal  <davidk@lysator.liu.se>
+
+       * nnmail.el (nnmail-check-duplication): Don't tread 'delete as a
+       function
+
+Sat Jan 27 19:51:08 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-topic.el (gnus-topic-prepare-topic): Number of groups would
+       be 0.
+       (gnus-topic-update-topic-line): Ditto.
+
+Fri Jan 26 15:10:09 1996  Steven L. Baur  <steve@miranova.com>
+
+       * gnus-vis.el (gnus-article-add-buttons): Need to reset point to top
+       of article before trying the next regexp in the gnus-button-alist.
+
+Sat Jan 27 19:22:24 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-vis.el (gnus-button-alist): Allow space after "<URL: ". 
+
+Fri Jan 26 20:20:25 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus-topic.el (gnus-topic-indent-level): New variable.
+       (gnus-topic-yank-group): Use it.
+       (gnus-topic-insert-topic-line): Ditto.
+       (gnus-topic-prepare-topic): Ditto.
+
+Fri Jan 26 17:18:25 1996  ISO-2022-JP  <yamaoka@ga.sony.co.jp>
+
+       * gnus-vis.el (gnus-article-highlight-headers): Would infloop. 
+
+Fri Jan 26 14:10:19 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.el (gnus-dribble-read-file): Set file modes on the dribble
+       file. 
+       (gnus-article-check-hidden-text): Only checked signature.
+       (gnus-article-check-hidden-text): Do things in the article
+       buffer. 
+       (gnus-group-line-format-alist): Let N have its old definition.
+       (gnus-group-catchup-group-hook): New variable.
+       (gnus-group-catchup): Use it.
+       (gnus-group-remove-mark): Give a useful return value.
+       (gnus-group-kill-group): Would bug out when killing lots of dead
+       groups.  
+
+Thu Jan 25 09:32:19 1996  Jack Vinson  <jvinson@cheux.ecs.umass.edu>
+
+       * gnus.el (gnus-group-insert-group-line) : Changed "header" to
+       "gnus-tmp-header" for parameter that gets passed to user
+       functions.  Set to the group name, but may not necessarily want
+       this.
+       (gnus-group-set-mode-line) : ditto, gnus-tmp-header set to nil.
+       (gnus-set-mode-line) : ditto, gnus-tmp-header set to nil.
+
 Fri Jan 26 07:47:59 1996  Lars Magne Ingebrigtsen  <larsi@eistla.ifi.uio.no>
 
        * gnus.el (gnus): Goto the first unread group.
 
+       * gnus.el: 0.32 is released.
+
 Thu Jan 25 18:27:03 1996  Lars Ingebrigtsen  <lars@eyesore.no>
 
        * gnus.el: Autoload `gnus-group-highlight-line'.
index ddbf90c..5cf36e6 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -28,6 +29,7 @@
 (setq load-path (cons "." load-path))
 
 (defun dgnushack-compile ()
+  ;(setq byte-compile-dynamic t)
   (let ((files (directory-files "." nil ".el$"))
        (xemacs (string-match "XEmacs" emacs-version))
        byte-compile-warnings file)
index b90ca1e..d2a6383 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -173,7 +174,8 @@ variable to \"^nnml\".")
              ;; Update the active info.
              (set-buffer gnus-summary-buffer)
              (gnus-cache-update-active group number)
-             (push number gnus-newsgroup-cached))
+             (push number gnus-newsgroup-cached)
+             (gnus-summary-update-secondary-mark article))
            t))))))
 
 (defun gnus-cache-enter-remove-article (article)
@@ -372,6 +374,7 @@ Returns the list of articles removed."
                           (progn (forward-line 1) (point)))))
       (setq gnus-newsgroup-cached
            (delq article gnus-newsgroup-cached))
+      (gnus-summary-update-secondary-mark article)
       t)))
 
 (defun gnus-cache-articles-in-group (group)
index 0085ffb..01136a1 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -260,7 +261,8 @@ Lines matching `gnus-cite-attribution-suffix' and perhaps
                (setq omarks (cdr omarks)))
            (push (car omarks) marks))
          (setq omarks (cdr omarks)))
-       (push (car omarks) marks)
+       (when (car omarks)
+         (push (car omarks) marks))
        (nreverse marks)))))
 
 (defun gnus-article-fill-cited-article (&optional force)
index 5be817a..7d5b364 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index faf3178..752afc0 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index 05c0a6b..ec59edd 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index 9c867d1..eabed7b 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -605,27 +606,26 @@ marked as read or ticked are ignored."
   (save-excursion
     (let ((killed-no 0)
          function article header)
-      (if (or (null field) (string-equal field ""))
-         (setq function nil)
+      (if (or (null field) 
+             (string-equal field "")
+             (not (fboundp
+                   (setq function 
+                         (intern-soft 
+                          (concat "mail-header-" (downcase field)))))))
+         (error "Unknown header field: \"%s\"" field)
        ;; Get access function of header filed.
-       (setq function (intern-soft (concat "gnus-header-" (downcase field))))
-       (if (and function (fboundp function))
-           (setq function (symbol-function function))
-         (error "Unknown header field: \"%s\"" field))
-       ;; Make FORM funcallable.
-       (if (and (listp form) (not (eq (car form) 'lambda)))
-           (setq form (list 'lambda nil form))))
-      ;; Starting from the current article.
-      (while (or (and (not article)
-                     (setq article (gnus-summary-article-number))
-                     t)
-                (setq article 
-                      (gnus-summary-search-forward 
-                       (not ignore-marked) nil backward)))
-       (and (or (null gnus-newsgroup-kill-headers)
-                (memq article gnus-newsgroup-kill-headers))
-            (vectorp (setq header (gnus-summary-article-header article)))
-            (gnus-execute-1 function regexp form header)
-            (setq killed-no (1+ killed-no))))
-      killed-no)))
+       (setq function `(lambda (h) (,function h)))
+       ;; Starting from the current article.
+       (while (or (and (not article)
+                       (setq article (gnus-summary-article-number))
+                       t)
+                  (setq article 
+                        (gnus-summary-search-forward 
+                         (not ignore-marked) nil backward)))
+         (and (or (null gnus-newsgroup-kill-headers)
+                  (memq article gnus-newsgroup-kill-headers))
+              (vectorp (setq header (gnus-summary-article-header article)))
+              (gnus-execute-1 function regexp form header)
+              (setq killed-no (1+ killed-no))))
+       killed-no))))
 
index dc265f9..03a62e2 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index 67aa9d4..ca9a68e 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -233,7 +234,7 @@ included.  Organization, Lines and X-Mailer are optional.")
 (defvar gnus-deletable-headers '(Message-ID Date)
   "*Headers to be deleted if they already exists and were generated by Gnus previously.")
 
-(defvar gnus-removable-headers '(NNTP-Posting-Host Bcc Xref)
+(defvar gnus-removable-headers '(NNTP-Posting-Host Xref)
   "*Headers to be removed unconditionally before posting.")
 
 (defvar gnus-article-expires 14
@@ -330,11 +331,11 @@ headers.")
 (defvar gnus-in-reply-to nil)
 (defvar gnus-last-posting-server nil)
 
-
 (eval-and-compile
   (autoload 'gnus-uu-post-news "gnus-uu" nil t)
   (autoload 'news-setup "rnewspost")
   (autoload 'news-reply-mode "rnewspost")
+  (autoload 'rmail-dont-reply-to "mail-utils")
   (autoload 'rmail-output "rmailout"))
 
 \f
@@ -570,7 +571,7 @@ If SILENT, don't prompt the user."
      ;; If the group-method is nil (which shouldn't happen) we use 
      ;; the default method.
      ((null group-method)
-      gnus-select-method)
+      (or gnus-post-method gnus-select-method))
      ;; We want this group's method.
      ((and query-method (not (eq query-method 0)))
       group-method)
@@ -746,7 +747,7 @@ method to use."
                (forward-line 1)
                (insert gnus-mail-courtesy-message)))
 
-         (gnus-mail-send)
+         (gnus-mail-send t)
          (kill-buffer (current-buffer))
          (gnus-message 5 "Sending via mail...done"))))))
 
@@ -1418,7 +1419,8 @@ nil."
             ""))))
     (or (mail-position-on-field "Mime-Version")
        (insert "1.0")
-       (cond ((progn
+       (cond ((save-restriction
+                (widen)
                 (goto-char (point-min))
                 (re-search-forward "[\200-\377]" nil t))
               (or (mail-position-on-field "Content-Type")
@@ -1846,11 +1848,14 @@ mailer."
                  (gnus-set-work-buffer)
                  (unless (equal mct "never")
                    (insert (or reply-to from "")))
-                 (insert (if (bolp) "" ", ")
-                         (or to "")
-                         (if (or (not mct) (not mctdo)) ""
-                           (concat (if (bolp) "" ", ") mct))
-                         (if cc (concat (if (bolp) "" ", ") cc) ""))
+                 (insert 
+                  (if (bolp) "" ", ") (or to "")
+                  (if (or (not mct) (not mctdo)) ""
+                    (concat (if (bolp) "" ", ") mct))
+                  (if cc (concat (if (bolp) "" ", ") cc) ""))
+                 ;; Remove addresses that match `rmail-dont-reply-to-names'. 
+                 (insert (prog1 (rmail-dont-reply-to (buffer-string))
+                           (erase-buffer)))
                  (goto-char (point-min))
                  (setq ccalist
                        (mapcar
@@ -2276,6 +2281,13 @@ If INHIBIT-PROMPT, never prompt for a Subject."
                      (cdr reply)))))
          (and winconf (set-window-configuration winconf))))))
 
+(defun gnus-kill-message-buffer ()
+  "Kill the current buffer after dissociating it from the draft group."
+  (interactive)
+  (when (gnus-y-or-n-p "Dissociate and kill the current buffer? ")
+    (gnus-dissociate-buffer-from-draft)
+    (kill-buffer (current-buffer))))
+
 (defun gnus-put-message ()
   "Put the current message in some group and return to Gnus."
   (interactive)
@@ -2345,10 +2357,12 @@ If INHIBIT-PROMPT, never prompt for a Subject."
       (insert gnus-forward-end-separator)
       ;; Remove all unwanted headers.
       (goto-char (point-min))
+      (forward-line 1)
       (save-restriction
        (narrow-to-region (point) (if (search-forward "\n\n" nil t)
                                      (1- (point))
                                    (point)))
+       (goto-char (point-min))
        (delete-non-matching-lines gnus-forward-included-headers))
       ;; Delete any invisible text.
       (goto-char (point-min))
@@ -2532,7 +2546,9 @@ this is a reply."
   (erase-buffer)
   (insert-buffer-substring gnus-article-buffer)
   (goto-char (point-min))
-  (search-forward "\n\n")
+  (or (re-search-forward "--- *Original message.*\n" nil t)
+      (and (search-forward "\n\n" nil t)
+          (re-search-forward "^Return-Path:.*\n" nil t)))
   ;; We remove everything before the bounced mail.
   (delete-region 
    (point-min)
@@ -2560,16 +2576,17 @@ this is a reply."
 
 ;;; Sending mail.
 
-(defun gnus-mail-send ()
+(defun gnus-mail-send (&optional no-generated-headers)
   "Send the current buffer as mail.
 Headers will be generated before sending."
   (interactive)
-  (save-excursion
-    (save-restriction
-      (widen)
-      (gnus-inews-narrow-to-headers)
-      (gnus-inews-insert-headers gnus-required-mail-headers)
-      (gnus-inews-remove-empty-headers)))
+  (unless no-generated-headers
+    (save-excursion
+      (save-restriction
+       (widen)
+       (gnus-inews-narrow-to-headers)
+       (gnus-inews-insert-headers gnus-required-mail-headers)
+       (gnus-inews-remove-empty-headers))))
   (widen)
   ;; Remove the header separator.
   (goto-char (point-min))
@@ -2593,6 +2610,7 @@ Headers will be generated before sending."
   (use-local-map (copy-keymap (current-local-map)))
   (local-set-key "\C-c\C-c" 'gnus-mail-send-and-exit)
   (local-set-key "\C-c\C-p" 'gnus-put-message)
+  (local-set-key "\C-c\C-k" 'gnus-kill-message-buffer)
   (local-set-key "\C-c\M-d" 'gnus-dissociate-buffer-from-draft)
   (local-set-key "\C-c\C-d" 'gnus-associate-buffer-with-draft))
 
@@ -2622,7 +2640,23 @@ Headers will be generated before sending."
           (eq gnus-mail-other-window-method 
               'gnus-mail-other-window-using-vm)))
      'gnus-vm-mail-setup)
-    (t 'gnus-sendmail-mail-setup))
+    ((or
+      (eq gnus-mail-method 'sendmail)
+      (and (or (eq type 'reply) (eq type 'followup)) 
+          (eq gnus-mail-reply-method 'gnus-mail-reply-using-mail))
+      (and (eq type 'forward)
+          (eq gnus-mail-forward-method 'gnus-mail-forward-using-mail))
+      (and (eq type 'new) 
+          (eq gnus-mail-other-window-method 
+              'gnus-mail-other-window-using-mail)))
+     'gnus-sendmail-mail-setup)
+    (t
+     (cond ((or (eq type 'reply) (eq type 'followup))
+           gnus-mail-reply-method)
+          ((eq type 'forward)
+           gnus-mail-forward-method)
+          ((eq type 'new) 
+           gnus-mail-other-window-method))))
    to subject in-reply-to cc replybuffer actions)
   ;; Associate this mail buffer with the draft group.
   (gnus-enter-buffer-into-draft))
@@ -2803,7 +2837,7 @@ Headers will be generated before sending."
 (defun gnus-dissociate-buffer-from-draft ()
   "Disable auto-saving and association to the draft group of the current buffer."
   (interactive)
-  (run-hooks gnus-message-sent-hook)
+  (run-hooks 'gnus-message-sent-hook)
   (setq buffer-file-name nil)
   (setq buffer-auto-save-file-name nil))
 
index 1bb4a85..10ad4b4 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index 46ab56e..b22c892 100644 (file)
@@ -16,8 +16,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -582,7 +583,8 @@ Two predefined functions are available:
   (gnus-get-tree-buffer))
 
 (defun gnus-tree-close (group)
-  (gnus-kill-buffer gnus-tree-buffer))
+  ;(gnus-kill-buffer gnus-tree-buffer)
+  )
 
 (defun gnus-highlight-selected-tree (article)
   "Highlight the selected article in the tree."
index 4d700be..10a7d33 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -132,6 +133,56 @@ If this variable is nil, exact matching will always be used.")
 (defvar gnus-score-uncacheable-files "ADAPT$"
   "*All score files that match this regexp will not be cached.")
 
+(defvar gnus-score-default-header nil
+  "Default header when entering new scores.
+
+Should be one of the following symbols.
+
+ a: from
+ s: subject
+ b: body
+ h: head
+ i: message-id
+ t: references
+ x: xref
+ l: lines
+ d: date
+ f: followup
+
+If nil, the user will be asked for a header.")
+
+(defvar gnus-score-default-type nil
+  "Default match type when entering new scores.
+
+Should be one of the following symbols.
+
+ s: substring
+ e: exact string
+ f: fuzzy string
+ r: regexp string
+ b: before date
+ a: at date
+ n: this date
+ <: less than number
+ >: greater than number
+ =: equal to number
+
+If nil, the user will be asked for a match type.")
+
+(defvar gnus-score-default-fold nil
+  "Use case folding for new score file entries iff not nil.")
+
+(defvar gnus-score-default-duration nil
+  "Default duration of effect when entering new scores.
+
+Should be one of the following symbols.
+
+ t: temporary
+ p: permanent
+ i: immediate
+
+If nil, the user will be asked for a duration.")
+
 \f
 
 ;; Internal variables.
@@ -173,7 +224,6 @@ of the last successful match.")
 
 (gnus-define-keys
  (gnus-summary-score-map "V" gnus-summary-mode-map)
- "V" gnus-summary-score-map
  "s" gnus-summary-set-score
  "a" gnus-summary-score-entry
  "S" gnus-summary-current-score
@@ -253,9 +303,12 @@ used as score."
          (list (list ?t (current-time-string) "temporary") 
                '(?p perm "permanent") '(?i now "immediate")))
         (mimic gnus-score-mimic-keymap)
-        (hchar gnus-score-default-header)
-        (tchar gnus-score-default-type)
-        (pchar gnus-score-default-duration)
+        (hchar (and gnus-score-default-header 
+                    (aref (symbol-name gnus-score-default-header) 0)))
+        (tchar (and gnus-score-default-type
+                    (aref (symbol-name gnus-score-default-type) 0)))
+        (pchar (and gnus-score-default-duration
+                    (aref (symbol-name gnus-score-default-duration) 0)))
         entry temporary end type match)
 
     ;; First we read the header to score.
@@ -351,7 +404,7 @@ used as score."
      (if (eq 's score) nil score)      ; Score
      (if (eq 'perm temporary)          ; Temp
         nil
-       (nth 1 temporary))
+        temporary)
      (not (nth 3 entry)))              ; Prompt
     ))
   
@@ -617,7 +670,7 @@ SCORE is the score to add."
        (when id
          (gnus-summary-score-entry
           "references" (concat id "[ \t]*$") 'r
-          score (current-time-string)))))))
+          score (current-time-string) nil t))))))
 
 (defun gnus-score-followup-thread (&optional score)
   "Add SCORE to all later articles in the thread the current buffer is part of."
@@ -2124,6 +2177,14 @@ The list is determined from the variable gnus-score-file-alist."
       (setq files (cdr files)))
     (setq gnus-internal-global-score-files out)))
 
+(defun gnus-score-default-fold-toggle ()
+  "Toggle folding for new score file entries."
+  (interactive)
+  (setq gnus-score-default-fold (not gnus-score-default-fold))
+  (if gnus-score-default-fold
+      (message "New score file entries will be case insensitive.")
+    (message "New score file entries will be case sensitive.")))
+
 (provide 'gnus-score)
 
 ;;; gnus-score.el ends here
index 5a5f6cb..ddaa75c 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 ;; My head is starting to spin with all the different mail/news packages.
index 177f7f3..43dddb1 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -133,16 +134,16 @@ move those articles instead."
       (while articles
        ;; Find the header of the article.
        (set-buffer gnus-summary-buffer)
-       (setq headers (gnus-summary-article-header (car articles)))
-       ;; Put the article in a buffer.
-       (set-buffer tmp-buf)
-       (when (gnus-request-article-this-buffer 
-              (car articles) gnus-newsgroup-name)
-         (gnus-soup-store gnus-soup-directory prefix headers
-                          gnus-soup-encoding-type 
-                          gnus-soup-index-type)
-         (gnus-soup-area-set-number 
-          area (1+ (or (gnus-soup-area-number area) 0))))
+       (when (setq headers (gnus-summary-article-header (car articles)))
+         ;; Put the article in a buffer.
+         (set-buffer tmp-buf)
+         (when (gnus-request-article-this-buffer 
+                (car articles) gnus-newsgroup-name)
+           (gnus-soup-store gnus-soup-directory prefix headers
+                            gnus-soup-encoding-type 
+                            gnus-soup-index-type)
+           (gnus-soup-area-set-number 
+            area (1+ (or (gnus-soup-area-number area) 0)))))
        ;; Mark article as read. 
        (set-buffer gnus-summary-buffer)
        (gnus-summary-remove-process-mark (car articles))
@@ -256,14 +257,16 @@ $ emacs -batch -f gnus-batch-brew-soup ^nnml \".*emacs.*\""
       msg-buf)))
 
 (defun gnus-soup-group-brew (group)
+  "Enter GROUP and add all articles to a SOUP package."
   (let ((gnus-expert-user t)
        (gnus-large-newsgroup nil))
-    (and (gnus-summary-read-group group)
-        (let ((gnus-newsgroup-processable 
-               (gnus-sorted-complement 
-                gnus-newsgroup-unreads
-                (append gnus-newsgroup-dormant gnus-newsgroup-marked))))
-          (gnus-soup-add-article nil)))
+    (when (gnus-summary-read-group group nil nil nil t)
+      (let ((gnus-newsgroup-processable 
+            (nreverse
+             (gnus-sorted-complement 
+              gnus-newsgroup-unreads
+              (append gnus-newsgroup-dormant gnus-newsgroup-marked)))))
+       (gnus-soup-add-article nil)))
     (gnus-summary-exit)))
 
 (defun gnus-soup-insert-idx (offset header)
@@ -487,12 +490,16 @@ file. The vector contain three strings, [prefix name encoding]."
     (int-to-string (cdr entry))))
 
 (defun gnus-soup-unpack-packet (dir unpacker packet)
+  "Unpack PACKET into DIR using UNPACKER.
+Return whether the unpacking was successful."
   (gnus-make-directory dir)
   (message "Unpacking: %s" (format unpacker packet))
-  (call-process
-   "sh" nil nil nil "-c"
-   (format "cd %s ; %s" (expand-file-name dir) (format unpacker packet)))
-  (message "Unpacking...done"))
+  (prog1
+      (zerop (call-process
+             "sh" nil nil nil "-c"
+             (format "cd %s ; %s" (expand-file-name dir) 
+                     (format unpacker packet))))
+    (message "Unpacking...done")))
 
 (defun gnus-soup-send-packet (packet)
   (gnus-soup-unpack-packet 
index c97a4d3..c392e4f 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -192,7 +193,7 @@ The following commands are available:
     ;; First we do the real list of servers.
     (while alist
       (push (cdr (setq server (pop alist))) done)
-      (when server
+      (when (and server (car server))
        (gnus-server-insert-server-line (car server) (cdr server))))
     ;; Then we insert the list of servers that have been opened in
     ;; this session.
index a57541b..832a656 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -47,12 +48,12 @@ with some simple extensions.
 %A  Number of unread articles in the groups in the topic and its subtopics.
 ")
 
-(defvar gnus-group-topic-topics-only nil
-  "*If non-nil, only the topics will be shown when typing `l' or `L'.")
-
 (defvar gnus-topic-unique t
   "*If non-nil, each group will only belong to one topic.")
 
+(defvar gnus-topic-indent-level 2
+  "*How much each subtopic should be indented.")
+
 ;; Internal variables.
 
 (defvar gnus-topic-killed-topics nil)
@@ -110,6 +111,7 @@ If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
       (erase-buffer))
     
     ;; List dead groups?
+    (when nil
     (when (and (>= level gnus-level-zombie) (<= lowest gnus-level-zombie))
       (gnus-group-prepare-flat-list-dead 
        (setq gnus-zombie-list (sort gnus-zombie-list 'string<)) 
@@ -120,7 +122,7 @@ If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
       (gnus-group-prepare-flat-list-dead 
        (setq gnus-killed-list (sort gnus-killed-list 'string<))
        gnus-level-killed ?K
-       regexp))
+       regexp)))
     
     ;; Use topics.
     (when (< lowest gnus-level-zombie)
@@ -140,9 +142,11 @@ articles in the topic and its subtopics."
   (let* ((type (pop topic))
         (entries (gnus-topic-find-groups (car type) list-level all))
         (visiblep (and (eq (nth 1 type) 'visible) (not silent)))
-        (gnus-group-indentation (make-string (* 2 level) ? ))
+        (gnus-group-indentation 
+         (make-string (* gnus-topic-indent-level level) ? ))
         (beg (progn (beginning-of-line) (point)))
         (topic (reverse topic))
+        (all-entries entries)
         (unread 0)
         info entry end)
     ;; Insert any sub-topics.
@@ -169,7 +173,7 @@ articles in the topic and its subtopics."
       (gnus-topic-insert-topic-line 
        (car type) visiblep
        (not (eq (nth 2 type) 'hidden))
-       level entries unread))
+       level all-entries unread))
     (goto-char end)
     unread))
 
@@ -254,7 +258,7 @@ articles in the topic and its subtopics."
 (defun gnus-topic-insert-topic-line (name visiblep shownp level entries 
                                          &optional unread)
   (let* ((visible (if visiblep "" "..."))
-        (indentation (make-string (* 2 level) ? ))
+        (indentation (make-string (* gnus-topic-indent-level level) ? ))
         (total-number-of-articles unread)
         (number-of-groups (length entries))
         (active-topic (eq gnus-topic-alist gnus-topic-active-alist)))
@@ -406,6 +410,7 @@ articles in the topic and its subtopics."
                   (car type) (car gnus-group-list-mode)
                   (cdr gnus-group-list-mode)))
         (visiblep (eq (nth 1 type) 'visible))
+        (all-entries entries)
         (unread 0)
         info entry end)
     ;; Tally any sub-topics.
@@ -420,7 +425,7 @@ articles in the topic and its subtopics."
       (gnus-topic-insert-topic-line 
        (car type) visiblep
        (not (eq (nth 2 type) 'hidden))
-       level entries unread)
+       level all-entries unread)
       (gnus-delete-line))
     unread))
 
@@ -563,6 +568,7 @@ articles in the topic and its subtopics."
        (push (cons 'gnus-topic-mode gnus-topic-mode-map)
              minor-mode-map-alist))
       (add-hook 'gnus-summary-exit-hook 'gnus-topic-update-topic)
+      (add-hook 'gnus-group-catchup-group-hook 'gnus-topic-update-topic)
       (make-local-variable 'gnus-group-prepare-function)
       (setq gnus-group-prepare-function 'gnus-group-prepare-topics)
       (make-local-variable 'gnus-group-goto-next-group-function)
@@ -617,7 +623,8 @@ group."
   (interactive 
    (list
     (read-string "Create topic: ")
-    (completing-read "Parent topic: " gnus-topic-alist nil t)))
+    (completing-read "Parent topic: " gnus-topic-alist nil t
+                    (cons (gnus-group-parent-topic) 0))))
   ;; Check whether this topic already exists.
   (when (gnus-topic-find-topology topic)
     (error "Topic aleady exists"))
@@ -730,9 +737,10 @@ group."
           (gnus-topic-inhibit-change-level t)
           (gnus-group-indentation
            (make-string 
-            (* 2 (or (save-excursion
-                       (gnus-topic-goto-topic (gnus-group-parent-topic))
-                       (gnus-group-topic-level)) 0)) ? ))
+            (* gnus-topic-indent-level
+               (or (save-excursion
+                     (gnus-topic-goto-topic (gnus-group-parent-topic))
+                     (gnus-group-topic-level)) 0)) ? ))
           yanked group alist)
       ;; We first yank the groups the normal way...
       (setq yanked (gnus-group-yank-group arg))
@@ -824,7 +832,8 @@ group."
   (interactive
    (let (topic)
      (list
-      (setq topic (completing-read "Rename topic: " gnus-topic-alist nil t))
+      (setq topic (completing-read "Rename topic: " gnus-topic-alist nil t
+                                  (cons (gnus-group-parent-topic) 0)))
       (read-string (format "Rename %s to: " topic)))))
   (let ((top (gnus-topic-find-topology old-name))
        (entry (assoc old-name gnus-topic-alist)))
index 80f95c4..6c7fcd2 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -900,9 +901,8 @@ The headers will be included in the sequence they are matched.")
        (setcar files (nconc (list (if (string= action "gnus-uu-archive")
                                      (cons 'action "file")
                                    (cons 'action action))
-                                 (cons 'execute (if (string-match "%" action)
-                                                    (format action name)
-                                                  (concat action " " name))))
+                                 (cons 'execute (gnus-uu-command
+                                                 action name)))
                            (car files))))
       (setq files (cdr files)))
     ofiles))
@@ -1220,7 +1220,8 @@ The headers will be included in the sequence they are matched.")
        (setq state 'middle)))
 
     ;; When there are no result-files, then something must be wrong.
-    (unless result-files
+    (if result-files
+       (message "")
       (cond
        ((not has-been-begin)
        (message "Wrong type file"))
@@ -1300,7 +1301,7 @@ The headers will be included in the sequence they are matched.")
                (or (looking-at gnus-uu-body-line)
                    (gnus-delete-line))
  
-                                       ; Replace any slashes and spaces in file names before decoding
+               ;; Replace any slashes and spaces in file names before decoding
                (goto-char name-beg)
                (while (re-search-forward "/" name-end t)
                  (replace-match ","))
index cb6bb35..7713e38 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
   `(("\\bin\\( +article\\)? +\\(<\\([^\n @<>]+@[^\n @<>]+\\)>\\)" 2 
      t gnus-button-message-id 3)
     ;; This is how URLs _should_ be embedded in text...
-    ("<URL:\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
+    ("<URL: *\\([^\n\r>]*\\)>" 0 t gnus-button-url 1)
     ;; Next regexp stolen from highlight-headers.el.
     ;; Modified by Vladimir Alexiev.
     (,gnus-button-url-regexp 0 t gnus-button-url 0)
@@ -262,10 +263,13 @@ HEADER is a regexp to match a header.  For a fuller explanation, see
     '((mailp . bold)
       ((= unread 0) . italic)))
    ((eq gnus-background-mode 'dark)
-    `(((not mailp) .
-       ,(custom-face-lookup "ForestGreen" nil nil t nil nil))
-      ((zerop unread) .
-       ,(custom-face-lookup "Blue" nil nil t nil nil))))
+    `(((> unread 200) . ,(custom-face-lookup "Red" nil nil t nil nil))
+      ((and (< level 3) (zerop unread)) . 
+       ,(custom-face-lookup "SeaGreen" nil nil t nil nil))
+      ((< level 3) . ,(custom-face-lookup "SpringGreen" nil nil t nil nil))
+      ((zerop unread) . ,(custom-face-lookup "SteelBlue" nil nil t nil nil))
+      (t . ,(custom-face-lookup "SkyBlue" nil nil t nil nil))
+      ))
    (t
     `(((not mailp) .
        ,(custom-face-lookup "ForestGreen" nil nil t nil nil))
@@ -283,6 +287,7 @@ method: The select method.
 mailp: Whether the select method is a mail method.
 level: The level of the group.
 score: The score of the group.
+ticked: The number of ticked articles in the group.
 ")
 
 
@@ -578,10 +583,10 @@ score: The score of the group.
        :selected (null gnus-score-default-header)]
        ["From" (gnus-score-set-default 'gnus-score-default-header 'a)
        :style radio 
-       :selected (eq gnus-score-default-header 'a )]
+       :selected (eq gnus-score-default-header 'a)]
        ["Subject" (gnus-score-set-default 'gnus-score-default-header 's)
        :style radio 
-       :selected (eq gnus-score-default-header 's )]
+       :selected (eq gnus-score-default-header 's)]
        ["Article body"
        (gnus-score-set-default 'gnus-score-default-header 'b)
        :style radio 
@@ -807,65 +812,6 @@ score: The score of the group.
   ;; It is the message that forces the active status to be updated.
   (message ""))
 
-(defvar gnus-score-default-header nil
-  "Default header when entering new scores.
-
-Should be one of the following symbols.
-
- a: from
- s: subject
- b: body
- h: head
- i: message-id
- t: references
- x: xref
- l: lines
- d: date
- f: followup
-
-If nil, the user will be asked for a header.")
-
-(defvar gnus-score-default-type nil
-  "Default match type when entering new scores.
-
-Should be one of the following symbols.
-
- s: substring
- e: exact string
- f: fuzzy string
- r: regexp string
- b: before date
- a: at date
- n: this date
- <: less than number
- >: greater than number
- =: equal to number
-
-If nil, the user will be asked for a match type.")
-
-(defvar gnus-score-default-fold nil
-  "Use case folding for new score file entries iff not nil.")
-
-
-(defun gnus-score-default-fold-toggle ()
-  "Toggle folding for new score file entries."
-  (interactive)
-  (setq gnus-score-default-fold (not gnus-score-default-fold))
-  (if gnus-score-default-fold
-      (message "New score file entries will be case insensitive.")
-    (message "New score file entries will be case sensitive.")))
-
-(defvar gnus-score-default-duration nil
-  "Default duration of effect when entering new scores.
-
-Should be one of the following symbols.
-
- t: temporary
- p: permanent
- i: immediate
-
-If nil, the user will be asked for a duration.")
-
 (defun gnus-visual-score-map (type)
   (if t
       nil
@@ -1044,11 +990,13 @@ If nil, the user will be asked for a duration.")
         (unread (if (numberp (car entry)) (car entry) 0))
         (info (nth 2 entry))
         (method (gnus-server-get-method group (gnus-info-method info)))
+        (marked (gnus-info-marks info))
         (mailp (memq 'mail (assoc (symbol-name
                                    (car (or method gnus-select-method)))
                                   gnus-valid-select-methods)))
         (level (gnus-info-level info))
         (score (gnus-info-score info))
+        (ticked (gnus-range-length (cdr (assq 'tick marked))))
         (inhibit-read-only t))
     ;; Eval the cars of the lists until we find a match.
     (while (and list
@@ -1324,17 +1272,21 @@ do the highlighting.  See the documentation for those functions."
   (save-excursion
     (set-buffer gnus-article-buffer)
     (save-restriction
-      (goto-char (point-min))
-      (when (search-forward "\n\n" nil t)
-       (narrow-to-region (1- (point)) (point-min))
-       (let ((alist gnus-header-face-alist)
-             (buffer-read-only nil)
-             (case-fold-search t)
-             (inhibit-point-motion-hooks t)
-             entry regexp header-face field-face from hpoints fpoints)
+      (let ((alist gnus-header-face-alist)
+           (buffer-read-only nil)
+           (case-fold-search t)
+           (inhibit-point-motion-hooks t)
+           entry regexp header-face field-face from hpoints fpoints)
+       (goto-char (point-min))
+       (when (search-forward "\n\n" nil t)
+         (narrow-to-region (1- (point)) (point-min))
          (while (setq entry (pop alist))
            (goto-char (point-min))
-           (setq regexp (concat "^\\(" (nth 0 entry) "\\)")
+           (setq regexp (concat "^\\("
+                                (if (string-equal "" (nth 0 entry))
+                                    "[^\t ]"
+                                  (nth 0 entry))
+                                "\\)")
                  header-face (nth 1 entry)
                  field-face (nth 2 entry))
            (while (and (re-search-forward regexp nil t)
@@ -1350,7 +1302,7 @@ do the highlighting.  See the documentation for those functions."
                         (not (memq (setq from (point)) fpoints)))
                (push from fpoints)
                (if (re-search-forward "^[^ \t]" nil t)
-                   (forward-char -1)
+                   (forward-char -2)
                  (goto-char (point-max)))
                (put-text-property from (point) 'face field-face)))))))))
 
@@ -1397,6 +1349,7 @@ specified by `gnus-button-alist'."
       (setq beg (point))
       (while (setq entry (pop alist))
        (setq regexp (car entry))
+       (goto-char beg)
        (while (re-search-forward regexp nil t)
          (let* ((start (and entry (match-beginning (nth 1 entry))))
                 (end (and entry (match-end (nth 1 entry))))
@@ -1592,8 +1545,10 @@ specified by `gnus-button-alist'."
 
 (defun gnus-insert-prev-page-button ()
   (let ((buffer-read-only nil))
-    (gnus-eval-format gnus-prev-page-line-format nil
-                     `(gnus-prev t local-map ,gnus-prev-page-map))))
+    (gnus-eval-format 
+     gnus-prev-page-line-format nil
+     `(gnus-prev t local-map ,gnus-prev-page-map
+                gnus-callback gnus-article-prev-page))))
 
 (defvar gnus-next-page-map nil)
 (unless gnus-next-page-map
@@ -1605,7 +1560,8 @@ specified by `gnus-button-alist'."
 (defun gnus-insert-next-page-button ()
   (let ((buffer-read-only nil))
     (gnus-eval-format gnus-next-page-line-format nil
-                     `(gnus-next t local-map ,gnus-next-page-map))))
+                     `(gnus-next t local-map ,gnus-next-page-map
+                                 gnus-callback gnus-article-prev-page))))
 
 ;;; Compatibility Functions:
 
index 750e1fa..f833bdd 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index edd0149..abc6755 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index 66cc4ee..32ad094 100644 (file)
@@ -1177,7 +1177,7 @@ possible.
 This restriction may disappear in later versions of Gnus.")
 
 (defvar gnus-summary-dummy-line-format
-  "*  %(:                         :%) %S\n"
+  "*  %(:                          :%) %S\n"
   "*The format specification for the dummy roots in the summary buffer.
 It works along the same lines as a normal formatting string,
 with some simple extensions.
@@ -1354,6 +1354,9 @@ It calls `gnus-summary-expire-articles' by default.")
 (defvar gnus-summary-exit-hook nil
   "*A hook called on exit from the summary buffer.")
 
+(defvar gnus-group-catchup-group-hook nil
+  "*A hook run when catching up a group from the group buffer.")
+
 (defvar gnus-open-server-hook nil
   "*A hook called just before opening connection to the news server.")
 
@@ -1577,9 +1580,15 @@ It is called with three parameters -- GROUP, LEVEL and OLDLEVEL.")
   `((?M gnus-tmp-marked-mark ?c)
     (?S gnus-tmp-subscribed ?c)
     (?L gnus-tmp-level ?d)
-    (?N gnus-tmp-number ?s)
+    (?N (cond ((eq number t) "*" )
+             ((numberp number) 
+              (int-to-string
+               (+ number
+                  (gnus-range-length (cdr (assq 'dormant gnus-tmp-marked)))
+                  (gnus-range-length (cdr (assq 'tick gnus-tmp-marked))))))
+             (t number)) ?s)
     (?R gnus-tmp-number-of-read ?s)
-    (?t gnus-tmp-number-total ?s)
+    (?t gnus-tmp-number-total ?d)
     (?y gnus-tmp-number-of-unread ?s)
     (?I (gnus-range-length (cdr (assq 'dormant gnus-tmp-marked))) ?d)
     (?T (gnus-range-length (cdr (assq 'tick gnus-tmp-marked))) ?d)
@@ -1673,7 +1682,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.32"
+(defconst gnus-version "September Gnus v0.35"
   "Version number for this version of Gnus.")
 
 (defvar gnus-info-nodes
@@ -2984,7 +2993,7 @@ If RE-ONLY is non-nil, strip leading `Re:'s only."
        (progn (goto-char (match-beginning 0)))
        (re-search-forward ":"))))
   (goto-char (point-min))
-  (while (re-search-forward "[ \t\n]*([^()]*)[ \t]*$" nil t)
+  (while (re-search-forward "[ \t\n]*[[{(][^()]*[]})][ \t]*$" nil t)
     (replace-match "" t t))
   (goto-char (point-min))
   (while (re-search-forward "[ \t]+" nil t)
@@ -3009,9 +3018,9 @@ If RE-ONLY is non-nil, strip leading `Re:'s only."
 
 (defun gnus-simplify-subject-fuzzy (subject)
   "Siplify a subject string fuzzily."
-  (let ((case-fold-search t))
-    (save-excursion
-      (gnus-set-work-buffer)
+  (save-excursion
+    (gnus-set-work-buffer)
+    (let ((case-fold-search t))
       (insert subject)
       (inline (gnus-simplify-buffer-fuzzy))
       (buffer-string))))
@@ -3263,7 +3272,10 @@ If RE-ONLY is non-nil, strip leading `Re:'s only."
 
       ;; Either remove all windows or just remove all Gnus windows.
       (if gnus-use-full-window
-         (delete-other-windows)
+         (mapcar (lambda (frame)
+                   (select-frame frame)
+                   (delete-other-windows)) 
+                 (frame-list))
        (gnus-remove-some-windows)
        (switch-to-buffer nntp-server-buffer))
 
@@ -4647,10 +4659,6 @@ increase the score of each group you read."
                   (zerop number)
                   (cdr (assq 'tick gnus-tmp-marked)))
              ?* ? ))
-        (gnus-tmp-number
-         (cond ((eq number t) "*" )
-               ((numberp number) (int-to-string number))
-               (t number)))
         (gnus-tmp-process-marked
          (if (member gnus-tmp-group gnus-group-marked)
              gnus-process-mark ? ))
@@ -4735,7 +4743,7 @@ already."
           (gnus-tmp-news-server (car (cdr gnus-select-method)))
           (gnus-tmp-news-method (car gnus-select-method))
           (max-len 60)
-          header                       ;Dummy binding for user-defined formats
+          gnus-tmp-header                      ;Dummy binding for user-defined formats
           ;; Get the resulting string.
           (mode-string (eval gformat)))
       ;; If the line is too long, we chop it off.
@@ -4874,11 +4882,15 @@ If UNMARK, remove the mark instead."
   (gnus-group-position-point))
 
 (defun gnus-group-remove-mark (group)
+  "Remove the process mark from GROUP and move point there.
+Return nil if the group isn't displayed."
   (if (gnus-group-goto-group group)
       (save-excursion
-       (gnus-group-mark-group 1 'unmark t))
+       (gnus-group-mark-group 1 'unmark t)
+       t)
     (setq gnus-group-marked
-         (delete group gnus-group-marked))))
+         (delete group gnus-group-marked))
+    nil))
 
 (defun gnus-group-set-mark (group)
   "Set the process mark on GROUP."
@@ -5718,6 +5730,7 @@ or nil if no action could be taken."
        (when all
          (gnus-add-marked-articles group 'tick nil nil 'force)
          (gnus-add-marked-articles group 'dormant nil nil 'force))
+       (run-hooks 'gnus-group-catchup-group-hook)
        num))))
 
 (defun gnus-group-expire-articles (&optional n)
@@ -5916,10 +5929,10 @@ of groups killed."
        (while groups
          (gnus-group-remove-mark (car groups))
          (gnus-delete-line)
-         (setq entry (gnus-gethash (pop groups) gnus-newsrc-hashtb))
-         (push (cons (car entry) (nth 2 entry))
-               gnus-list-of-killed-groups)
-         (setcdr (cdr entry) (cdr (cdr (cdr entry)))))
+         (when (setq entry (gnus-gethash (pop groups) gnus-newsrc-hashtb))
+           (push (cons (car entry) (nth 2 entry))
+                 gnus-list-of-killed-groups)
+           (setcdr (cdr entry) (cdr (cdr (cdr entry))))))
        (gnus-make-hashtable-from-newsrc-alist)))
 
     (gnus-group-position-point)
@@ -6539,7 +6552,7 @@ and the second element is the address."
    "a" gnus-summary-post-news
    "x" gnus-summary-limit-to-unread
    "s" gnus-summary-isearch-article
-   "t" gnus-summary-toggle-header
+   "t" gnus-article-hide-headers
    "g" gnus-summary-show-article
    "l" gnus-summary-goto-last-article
    "\C-c\C-v\C-v" gnus-uu-decode-uu-view
@@ -6550,7 +6563,6 @@ and the second element is the address."
    "\M-*" gnus-cache-remove-article
    "\M-&" gnus-summary-universal-argument
    "\C-l" gnus-recenter
-   "D" gnus-summary-enter-digest-group
    "I" gnus-summary-increase-score
    "L" gnus-summary-lower-score
 
@@ -7302,10 +7314,10 @@ If NO-DISPLAY, don't generate a summary buffer."
       (run-hooks 'gnus-select-group-hook)
       ;; Set any local variables in the group parameters.
       (gnus-summary-set-local-parameters gnus-newsgroup-name)
+      (gnus-update-format-specifications)
       ;; Do score processing.
       (when gnus-use-scoring
        (gnus-possibly-score-headers))
-      (gnus-update-format-specifications)
       ;; Check whether to fill in the gaps in the threads.
       (when gnus-build-sparse-threads
        (gnus-build-sparse-threads))
@@ -7799,7 +7811,7 @@ If NO-DISPLAY, don't generate a summary buffer."
                       (reverse gnus-article-sort-functions))))))
       (gnus-message 7 "Sorting articles...")
       (prog1
-         (sort articles func)
+         (setq gnus-newsgroup-headers (sort articles func))
        (gnus-message 7 "Sorting articles...done")))))
 
 (defun gnus-make-sort-function (funs)
@@ -8030,7 +8042,8 @@ or a straight list of headers."
                  gnus-tmp-header nil))
           ;; If the article lies outside the current limit,
           ;; then we do not display it.
-          ((not (memq number gnus-newsgroup-limit))
+          ((and (not (memq number gnus-newsgroup-limit))
+                (not gnus-tmp-dummy-line))
            (setq gnus-tmp-gathered
                  (nconc (mapcar
                          (lambda (h) (mail-header-number (car h)))
@@ -8059,95 +8072,98 @@ or a straight list of headers."
          (when gnus-tmp-header
            ;; We may have an old dummy line to output before this
            ;; article.
-           (when gnus-tmp-dummy-line
-             (gnus-summary-insert-dummy-line
-              gnus-tmp-dummy-line (mail-header-number gnus-tmp-header))
-             (setq gnus-tmp-dummy-line nil))
-
-           ;; Compute the mark.
-           (setq
-            gnus-tmp-unread
-            (cond
-             ((memq number gnus-newsgroup-unreads) gnus-unread-mark)
-             ((memq number gnus-newsgroup-marked) gnus-ticked-mark)
-             ((memq number gnus-newsgroup-dormant) gnus-dormant-mark)
-             ((memq number gnus-newsgroup-expirable) gnus-expirable-mark)
-             (t (or (cdr (assq number gnus-newsgroup-reads))
-                    gnus-ancient-mark))))
-
-           (push (gnus-data-make number gnus-tmp-unread (1+ (point))
-                                 gnus-tmp-header gnus-tmp-level)
-                 gnus-newsgroup-data)
-
-           ;; Actually insert the line.
-           (setq
-            gnus-tmp-subject-or-nil
-            (cond
-             ((and gnus-thread-ignore-subject
-                   gnus-tmp-prev-subject
-                   (not (inline (gnus-subject-equal
-                                 gnus-tmp-prev-subject subject))))
-              subject)
-             ((zerop gnus-tmp-level)
-              (if (and (eq gnus-summary-make-false-root 'empty)
-                       (memq number gnus-tmp-gathered)
-                       gnus-tmp-prev-subject
-                       (inline (gnus-subject-equal
-                                gnus-tmp-prev-subject subject)))
-                  gnus-summary-same-subject
-                subject))
-             (t gnus-summary-same-subject)))
-           (if (and (eq gnus-summary-make-false-root 'adopt)
-                    (= gnus-tmp-level 1)
-                    (memq number gnus-tmp-gathered))
-               (setq gnus-tmp-opening-bracket ?\<
-                     gnus-tmp-closing-bracket ?\>)
-             (setq gnus-tmp-opening-bracket ?\[
-                   gnus-tmp-closing-bracket ?\]))
-           (setq
-            gnus-tmp-indentation
-            (aref gnus-thread-indent-array gnus-tmp-level)
-            gnus-tmp-lines (mail-header-lines gnus-tmp-header)
-            gnus-tmp-score (or (cdr (assq number gnus-newsgroup-scored))
-                               gnus-summary-default-score 0)
-            gnus-tmp-score-char
-            (if (or (null gnus-summary-default-score)
-                    (<= (abs (- gnus-tmp-score gnus-summary-default-score))
-                        gnus-summary-zcore-fuzz)) ? 
-              (if (< gnus-tmp-score gnus-summary-default-score)
-                  gnus-score-below-mark gnus-score-over-mark))
-            gnus-tmp-replied
-            (cond ((memq number gnus-newsgroup-processable)
-                   gnus-process-mark)
-                  ((memq number gnus-newsgroup-cached)
-                   gnus-cached-mark)
-                  ((memq number gnus-newsgroup-replied)
-                   gnus-replied-mark)
-                  (t gnus-unread-mark))
-            gnus-tmp-from (mail-header-from gnus-tmp-header)
-            gnus-tmp-name
-            (cond
-             ((string-match "(.+)" gnus-tmp-from)
-              (substring gnus-tmp-from
-                         (1+ (match-beginning 0)) (1- (match-end 0))))
-             ((string-match "<[^>]+> *$" gnus-tmp-from)
-              (setq beg-match (match-beginning 0))
-              (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
-                       (substring gnus-tmp-from (1+ (match-beginning 0))
-                                  (1- (match-end 0))))
-                  (substring gnus-tmp-from 0 beg-match)))
-             (t gnus-tmp-from)))
-           (when (string= gnus-tmp-name "")
-             (setq gnus-tmp-name gnus-tmp-from))
-           (or (numberp gnus-tmp-lines) (setq gnus-tmp-lines 0))
-           (put-text-property
-            (point)
-            (progn (eval gnus-summary-line-format-spec) (point))
-            'gnus-number number)
-           (when gnus-visual-p
-             (forward-line -1)
-             (run-hooks 'gnus-summary-update-hook)
-             (forward-line 1))
+           (if gnus-tmp-dummy-line
+               (progn
+                 (gnus-summary-insert-dummy-line
+                  gnus-tmp-dummy-line (mail-header-number gnus-tmp-header))
+                 (setq gnus-tmp-dummy-line nil))
+
+             ;; Compute the mark.
+             (setq
+              gnus-tmp-unread
+              (cond
+               ((memq number gnus-newsgroup-unreads) gnus-unread-mark)
+               ((memq number gnus-newsgroup-marked) gnus-ticked-mark)
+               ((memq number gnus-newsgroup-dormant) gnus-dormant-mark)
+               ((memq number gnus-newsgroup-expirable) gnus-expirable-mark)
+               (t (or (cdr (assq number gnus-newsgroup-reads))
+                      gnus-ancient-mark))))
+
+             (push (gnus-data-make number gnus-tmp-unread (1+ (point))
+                                   gnus-tmp-header gnus-tmp-level)
+                   gnus-newsgroup-data)
+
+             ;; Actually insert the line.
+             (setq
+              gnus-tmp-subject-or-nil
+              (cond
+               ((and gnus-thread-ignore-subject
+                     gnus-tmp-prev-subject
+                     (not (inline (gnus-subject-equal
+                                   gnus-tmp-prev-subject subject))))
+                subject)
+               ((zerop gnus-tmp-level)
+                (if (and (eq gnus-summary-make-false-root 'empty)
+                         (memq number gnus-tmp-gathered)
+                         gnus-tmp-prev-subject
+                         (inline (gnus-subject-equal
+                                  gnus-tmp-prev-subject subject)))
+                    gnus-summary-same-subject
+                  subject))
+               (t gnus-summary-same-subject)))
+             (if (and (eq gnus-summary-make-false-root 'adopt)
+                      (= gnus-tmp-level 1)
+                      (memq number gnus-tmp-gathered))
+                 (setq gnus-tmp-opening-bracket ?\<
+                       gnus-tmp-closing-bracket ?\>)
+               (setq gnus-tmp-opening-bracket ?\[
+                     gnus-tmp-closing-bracket ?\]))
+             (setq
+              gnus-tmp-indentation
+              (aref gnus-thread-indent-array gnus-tmp-level)
+              gnus-tmp-lines (mail-header-lines gnus-tmp-header)
+              gnus-tmp-score (or (cdr (assq number gnus-newsgroup-scored))
+                                 gnus-summary-default-score 0)
+              gnus-tmp-score-char
+              (if (or (null gnus-summary-default-score)
+                      (<= (abs (- gnus-tmp-score gnus-summary-default-score))
+                          gnus-summary-zcore-fuzz)) ? 
+                (if (< gnus-tmp-score gnus-summary-default-score)
+                    gnus-score-below-mark gnus-score-over-mark))
+              gnus-tmp-replied
+              (cond ((memq number gnus-newsgroup-processable)
+                     gnus-process-mark)
+                    ((memq number gnus-newsgroup-cached)
+                     gnus-cached-mark)
+                    ((memq number gnus-newsgroup-replied)
+                     gnus-replied-mark)
+                    (t gnus-unread-mark))
+              gnus-tmp-from (mail-header-from gnus-tmp-header)
+              gnus-tmp-name
+              (cond
+               ((string-match "(.+)" gnus-tmp-from)
+                (substring gnus-tmp-from
+                           (1+ (match-beginning 0)) (1- (match-end 0))))
+               ((string-match "<[^>]+> *$" gnus-tmp-from)
+                (setq beg-match (match-beginning 0))
+                (or (and (string-match "^\"[^\"]*\"" gnus-tmp-from)
+                         (substring gnus-tmp-from (1+ (match-beginning 0))
+                                    (1- (match-end 0))))
+                    (substring gnus-tmp-from 0 beg-match)))
+               (t gnus-tmp-from)))
+             (when (string= gnus-tmp-name "")
+               (setq gnus-tmp-name gnus-tmp-from))
+             (or (numberp gnus-tmp-lines) (setq gnus-tmp-lines 0))
+             (put-text-property
+              (point)
+              (progn (eval gnus-summary-line-format-spec) (point))
+              'gnus-number number)
+             (when gnus-visual-p
+               (forward-line -1)
+               (run-hooks 'gnus-summary-update-hook)
+               (forward-line 1))
+
+             )
 
            (setq gnus-tmp-prev-subject subject)))
 
@@ -8525,7 +8541,7 @@ If WHERE is `summary', the summary mode line format will be used."
                         (vectorp gnus-current-headers))
                    (mail-header-subject gnus-current-headers) ""))
               max-len
-              header);; passed as argument to any user-format-funcs
+              gnus-tmp-header);; passed as argument to any user-format-funcs
          (setq mode-string (eval mformat))
          (setq max-len (max 4 (if gnus-mode-non-string-length
                                   (- (frame-width)
@@ -9424,6 +9440,8 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
        ;; not garbage-collected, it seems.  This would the lead to en
        ;; ever-growing Emacs.
        (gnus-summary-clear-local-variables)
+       (when (get-buffer gnus-article-buffer)
+         (bury-buffer gnus-article-buffer))
        ;; We clear the global counterparts of the buffer-local
        ;; variables as well, just to be on the safe side.
        (gnus-configure-windows 'group 'force)
@@ -9472,6 +9490,8 @@ gnus-exit-group-hook is called with no arguments if that value is non-nil."
          (kill-buffer gnus-summary-buffer)))
       (when gnus-use-trees
        (gnus-tree-close group))
+      (when (get-buffer gnus-article-buffer)
+       (bury-buffer gnus-article-buffer))
       ;; Return to the group buffer.
       (gnus-configure-windows 'group 'force)
       ;; Clear the current group name.
@@ -9796,7 +9816,7 @@ be displayed."
                (setq did article))
            (if (or all-headers gnus-show-all-headers)
                (gnus-article-show-all-headers))
-           nil))
+           'old))
       (if did
          (gnus-article-set-window-start
           (cdr (assq article gnus-newsgroup-bookmarks)))))))
@@ -9878,7 +9898,7 @@ If BACKWARD, the previous article is selected instead of the next."
              (gnus-summary-search-group backward gnus-keep-same-level))))
     (while (not ended)
       (gnus-message
-       7 "No more%s articles%s" (if unread " unread" "")
+       5 "No more%s articles%s" (if unread " unread" "")
        (if (and group
                (not (gnus-ephemeral-group-p gnus-newsgroup-name)))
           (format " (Type %s for %s [%s])"
@@ -9990,14 +10010,14 @@ Argument LINES specifies lines to be scrolled up (or down if negative)."
   (interactive "p")
   (gnus-set-global-variables)
   (gnus-configure-windows 'article)
-  (or (gnus-summary-select-article nil nil 'pseudo)
-      (gnus-eval-in-buffer-window
-       gnus-article-buffer
-       (cond ((> lines 0)
-             (if (gnus-article-next-page lines)
-                 (gnus-message 3 "End of message")))
-            ((< lines 0)
-             (gnus-article-prev-page (- lines))))))
+  (when (eq (gnus-summary-select-article nil nil 'pseudo) 'old)
+    (gnus-eval-in-buffer-window
+     gnus-article-buffer
+     (cond ((> lines 0)
+           (if (gnus-article-next-page lines)
+               (gnus-message 3 "End of message")))
+          ((< lines 0)
+           (gnus-article-prev-page (- lines))))))
   (gnus-summary-recenter)
   (gnus-summary-position-point))
 
@@ -10120,10 +10140,13 @@ If not given a prefix, use the process marked articles instead."
 If given a prefix, remove all limits."
   (interactive "P")
   (gnus-set-global-variables)
-  (prog2
-      (if total (setq gnus-newsgroup-limits
-                     (list (mapcar (lambda (h) (mail-header-number h))
-                                   gnus-newsgroup-headers))))
+  (when total 
+    (setq gnus-newsgroup-limits
+         (list (mapcar (lambda (h) (mail-header-number h))
+                       gnus-newsgroup-headers))))
+  (unless gnus-newsgroup-limits
+    (error "No limit to pop"))
+  (prog1
       (gnus-summary-limit nil 'pop)
     (gnus-summary-position-point)))
 
@@ -10160,7 +10183,7 @@ If ALL is non-nil, limit strictly to unread articles."
      (list gnus-del-mark gnus-read-mark gnus-ancient-mark
           gnus-killed-mark gnus-kill-file-mark
           gnus-low-score-mark gnus-expirable-mark
-          gnus-canceled-mark gnus-catchup-mark)
+          gnus-canceled-mark gnus-catchup-mark gnus-sparse-mark)
      'reverse)))
 
 (defalias 'gnus-summary-delete-marked-with 'gnus-summary-limit-to-marks)
@@ -10282,7 +10305,11 @@ If ALL, mark even excluded ticked and dormants as read."
     ;; This will do all the work of generating the new summary buffer
     ;; according to the new limit.
     (gnus-summary-prepare)
-    ;; Try to return to the article you were at, or on in the
+    ;; Hide any threads, possibly.
+    (and gnus-show-threads
+        gnus-thread-hide-subtree
+        (gnus-summary-hide-all-threads))
+    ;; Try to return to the article you were at, or one in the
     ;; neighborhood.
     (if data
        ;; We try to find some article after the current one.
@@ -10530,16 +10557,22 @@ Return how many articles were fetched."
                       gnus-newsgroup-name (list 'nndoc ""))
                      gnus-current-article))
        (ogroup gnus-newsgroup-name)
-       (buf (current-buffer)))
+       (case-fold-search t)
+       (buf (current-buffer))
+       dig)
     (save-excursion
-      (set-buffer gnus-original-article-buffer)
+      (setq dig (nnheader-set-temp-buffer " *gnus digest buffer*"))
+      (insert-buffer-substring gnus-original-article-buffer)
+      (narrow-to-region
+       (goto-char (point-min))
+       (or (search-forward "\n\n" nil t) (point)))
       (goto-char (point-min))
-      (search-forward "\n\n" nil t)
-      (narrow-to-region (point) (point-max)))
+      (delete-matching-lines "^\\(Path\\):")
+      (widen))
     (unwind-protect
        (if (gnus-group-read-ephemeral-group
             name `(nndoc ,name (nndoc-address
-                                ,(get-buffer gnus-original-article-buffer))
+                                ,(get-buffer dig))
                          (nndoc-article-type ,(if force 'digest 'guess))) t)
            ;; Make all postings to this group go to the parent group.
            (setcdr (nthcdr 4 (gnus-get-info name))
@@ -10549,9 +10582,7 @@ Return how many articles were fetched."
          (gnus-set-global-variables)
          (gnus-configure-windows 'summary)
          (gnus-message 3 "Article couldn't be entered?"))
-      (save-excursion
-       (set-buffer gnus-original-article-buffer)
-       (widen)))))
+      (kill-buffer dig))))
 
 (defun gnus-summary-isearch-article (&optional regexp-p)
   "Do incremental search forward on the current article.
@@ -11155,22 +11186,24 @@ This will have permanent effect only in mail groups.
 If FORCE is non-nil, allow editing of articles even in read-only
 groups."
   (interactive "P")
-  (gnus-set-global-variables)
-  (when (and (not force)
-            (gnus-group-read-only-p))
-    (error "The current newsgroup does not support article editing."))
-  (gnus-summary-select-article t nil t)
-  (gnus-configure-windows 'article)
-  (select-window (get-buffer-window gnus-article-buffer))
-  (gnus-message 6 "C-c C-c to end edits")
-  (setq buffer-read-only nil)
-  (text-mode)
-  (use-local-map (copy-keymap (current-local-map)))
-  (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
-  (buffer-enable-undo)
-  (widen)
-  (goto-char (point-min))
-  (search-forward "\n\n" nil t))
+  (save-excursion
+    (set-buffer gnus-summary-buffer)
+    (gnus-set-global-variables)
+    (when (and (not force)
+              (gnus-group-read-only-p))
+      (error "The current newsgroup does not support article editing."))
+    (gnus-summary-select-article t nil t)
+    (gnus-configure-windows 'article)
+    (select-window (get-buffer-window gnus-article-buffer))
+    (gnus-message 6 "C-c C-c to end edits")
+    (setq buffer-read-only nil)
+    (text-mode)
+    (use-local-map (copy-keymap (current-local-map)))
+    (local-set-key "\C-c\C-c" 'gnus-summary-edit-article-done)
+    (buffer-enable-undo)
+    (widen)
+    (goto-char (point-min))
+    (search-forward "\n\n" nil t)))
 
 (defun gnus-summary-edit-article-done ()
   "Make edits to the current article permanent."
@@ -12060,15 +12093,14 @@ Returns nil if no threads were there to be hidden."
     ;; Go forward until either the buffer ends or the subthread
     ;; ends.
     (when (and (not (eobp))
-              (or (and (zerop (gnus-summary-next-thread 1 t))
-                       (gnus-summary-find-prev))
+              (or (zerop (gnus-summary-next-thread 1 t))
                   (goto-char (gnus-data-pos (car (gnus-data-list 'rev))))))
       (setq end (point))
       (prog1
          (if (and (> (point) start)
                   (search-backward "\n" start t))
              (progn
-               (subst-char-in-region start end ?\n ?\^M)
+               (subst-char-in-region start (point) ?\n ?\^M)
                (gnus-summary-goto-subject article))
            (goto-char start)
            nil)
@@ -12237,10 +12269,20 @@ Argument REVERSE means reverse order."
 (defun gnus-summary-sort (predicate reverse)
   "Sort summary buffer by PREDICATE.  REVERSE means reverse order."
   (gnus-set-global-variables)
-  (let* ((gnus-thread-sort-functions
-         (list (intern (format "gnus-thread-sort-by-%s" predicate))))
+  (let* ((thread (intern (format "gnus-thread-sort-by-%s" predicate)))
+        (article (intern (format "gnus-article-sort-by-%s" predicate)))
+        (gnus-thread-sort-functions
+         (list
+          (if (not reverse)
+              thread
+            `(lambda (t1 t2)
+               (,thread t2 t1)))))
         (gnus-article-sort-functions
-         (list (intern (format "gnus-article-sort-by-%s" predicate))))
+         (list
+          (if (not reverse)
+              article
+            `(lambda (t1 t2)
+               (,article t2 t1)))))
         (buffer-read-only)
         (gnus-summary-prepare-hook nil))
     ;; We do the sorting by regenerating the threads.
@@ -13163,11 +13205,11 @@ always hide."
                                 ((listp gnus-ignored-headers)
                                  (mapconcat 'identity gnus-ignored-headers
                                             "\\|")))))
-               (visible (cond ((stringp gnus-visible-headers)
-                               gnus-visible-headers)
-                              ((listp gnus-visible-headers)
-                               (mapconcat 'identity gnus-visible-headers
-                                          "\\|"))))
+               (visible
+                (cond ((stringp gnus-visible-headers)
+                       gnus-visible-headers)
+                      ((listp gnus-visible-headers)
+                       (mapconcat 'identity gnus-visible-headers "\\|"))))
                want-list beg want-l)
            ;; First we narrow to just the headers.
            (widen)
@@ -13544,13 +13586,15 @@ matches, the text in question is not a signature.")
 
 (defun gnus-article-check-hidden-text (type arg)
   "Return nil if hiding is necessary."
-  (let ((hide (gnus-article-hidden-text-p 'signature)))
-    (cond ((or (and (null arg) (eq hide 'hidden))
-              (and arg (< 0 (prefix-numeric-value arg))))
-          (gnus-article-show-hidden-text 'signature))
-         ((eq hide 'shown)
-          (gnus-article-show-hidden-text 'signature t))
-         (t nil))))
+  (save-excursion
+    (set-buffer gnus-article-buffer)
+    (let ((hide (gnus-article-hidden-text-p type)))
+      (cond ((or (and (null arg) (eq hide 'hidden))
+                (and arg (< 0 (prefix-numeric-value arg))))
+            (gnus-article-show-hidden-text type))
+           ((eq hide 'shown)
+            (gnus-article-show-hidden-text type t))
+           (t nil)))))
 
 (defun gnus-article-hidden-text-p (type)
   "Say whether the current buffer contains hidden text of type TYPE."
@@ -14072,6 +14116,7 @@ If NEWSGROUP is nil, return the global kill file name instead."
 (defvar gnus-dribble-eval-file nil)
 
 (defun gnus-dribble-file-name ()
+  "Return the dribble file for the current .newsrc."
   (concat
    (if gnus-dribble-directory
        (concat (file-name-as-directory gnus-dribble-directory)
@@ -14080,6 +14125,7 @@ If NEWSGROUP is nil, return the global kill file name instead."
    "-dribble"))
 
 (defun gnus-dribble-enter (string)
+  "Enter STRING into the dribble buffer."
   (if (and (not gnus-dribble-ignore)
           gnus-dribble-buffer
           (buffer-name gnus-dribble-buffer))
@@ -14090,6 +14136,7 @@ If NEWSGROUP is nil, return the global kill file name instead."
        (set-buffer obuf))))
 
 (defun gnus-dribble-read-file ()
+  "Read the dribble file from disk."
   (let ((dribble-file (gnus-dribble-file-name)))
     (save-excursion
       (set-buffer (setq gnus-dribble-buffer
@@ -14104,16 +14151,23 @@ If NEWSGROUP is nil, return the global kill file name instead."
       (set-buffer-modified-p nil)
       (let ((auto (make-auto-save-file-name))
            (gnus-dribble-ignore t))
-       (if (or (file-exists-p auto) (file-exists-p dribble-file))
-           (progn
-             (if (file-newer-than-file-p auto dribble-file)
-                 (setq dribble-file auto))
-             (insert-file-contents dribble-file)
-             (if (not (zerop (buffer-size)))
-                 (set-buffer-modified-p t))
-             (if (gnus-y-or-n-p
-                  "Auto-save file exists.  Do you want to read it? ")
-                 (setq gnus-dribble-eval-file t))))))))
+       (when (or (file-exists-p auto) (file-exists-p dribble-file))
+         ;; Load whichever file is newest -- the auto save file
+         ;; or the "real" file.
+         (if (file-newer-than-file-p auto dribble-file)
+             (insert-file-contents auto)
+           (insert-file-contents dribble-file))
+         (unless (zerop (buffer-size))
+           (set-buffer-modified-p t))
+         ;; Set the file modes to reflect the .newsrc file modes.
+         (save-buffer)
+         (when (file-exists-p gnus-current-startup-file)
+           (set-file-modes dribble-file
+                           (file-modes gnus-current-startup-file)))
+         ;; Possibly eval the file later.
+         (when (gnus-y-or-n-p
+                "Auto-save file exists.  Do you want to read it? ")
+           (setq gnus-dribble-eval-file t)))))))
 
 (defun gnus-dribble-eval-file ()
   (if (not gnus-dribble-eval-file)
index 035027f..58d23b5 100644 (file)
        (dont-check
        (nnheader-report 'nnbabyl "Selected group %s" group)
        t)
-       ((> (car active) (cdr active))
-       (nnheader-report 'nnbabyl "Empty group %s" group))
        (t
        (nnheader-report 'nnbabyl "Selected group %s" group)
        (nnheader-insert "211 %d %d %d %s\n" 
index 3cc8726..111d8d9 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index eb720ad..009f4ba 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -326,7 +327,7 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
       (setcdr entry
              (list
               (cons 'head-end "^ ?$")
-              (cons 'body-begin "^ \n")
+              (cons 'body-begin "^ ?\n")
               (cons 'article-begin b-delimiter)
               (cons 'body-end-function 'nndoc-digest-body-end)
 ;             (cons 'body-end 
@@ -447,7 +448,7 @@ One of `mbox', `babyl', `digest', `news', `rnews', `mmdf', `forward',
          (and (re-search-backward nndoc-article-begin nil t)
               (setq end (point))
               (search-forward "\n\n" beg t)
-              (re-search-backward "^Content-Length: \\([0-9]+\\) *$" end t)
+              (re-search-backward "^Content-Length:[ \t]*\\([0-9]+\\) *$" end t)
               (setq len (string-to-int (match-string 1)))
               (search-forward "\n\n" beg t)
               (or (= (setq len (+ (point) len)) (point-max))
index fede30d..f75303d 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index d6308e0..971b560 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index b947024..f2d4a49 100644 (file)
@@ -19,8 +19,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -118,7 +119,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
     (erase-buffer)
     (let ((delim-string (concat "^" rmail-unix-mail-delimiter))
          article art-string start stop)
-      (nnfolder-possibly-change-group newsgroup)
+      (nnfolder-possibly-change-group newsgroup server)
       (set-buffer nnfolder-current-buffer)
       (goto-char (point-min))
       (if (stringp (car sequence))
@@ -187,7 +188,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
   nnfolder-status-string)
 
 (defun nnfolder-request-article (article &optional newsgroup server buffer)
-  (nnfolder-possibly-change-group newsgroup)
+  (nnfolder-possibly-change-group newsgroup server)
   (save-excursion
     (set-buffer nnfolder-current-buffer)
     (goto-char (point-min))
@@ -222,29 +223,26 @@ such things as moving mail.  All buffers always get killed upon server close.")
 (defun nnfolder-request-group (group &optional server dont-check)
   (save-excursion
     (nnmail-activate 'nnfolder)
-    (when (assoc group nnfolder-group-alist)
-      (nnfolder-possibly-change-group group)
-      (cond 
-       (dont-check
-       (nnheader-report 'nnfolder "Selected group %s" group)
-       t)
-       (t
+    (if (not (assoc group nnfolder-group-alist))
+       (nnheader-report 'nnfolder "No such group: %s" group)
+      (nnfolder-possibly-change-group group server)
+      (if dont-check
+         (progn 
+           (nnheader-report 'nnfolder "Selected group %s" group)
+           t)
        (let* ((active (assoc group nnfolder-group-alist))
               (group (car active))
               (range (car (cdr active)))
               (minactive (car range))
               (maxactive (cdr range)))
-         (set-buffer nntp-server-buffer)
-         (erase-buffer)
          (cond 
           ((null active)
            (nnheader-report 'nnfolder "No such group: %s" group))
           (t
            (nnheader-report 'nnfolder "Selected group %s" group)
-           (insert (format "211 %d %d %d %s\n" 
-                           (1+ (- maxactive minactive))
-                           minactive maxactive group))
-           t))))))))
+           (nnheader-insert "211 %d %d %d %s\n" 
+                            (1+ (- maxactive minactive))
+                            minactive maxactive group))))))))
 
 (defun nnfolder-request-scan (&optional group server)
   (nnmail-get-new-mail
@@ -272,7 +270,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
   (if (or (assoc group nnfolder-buffer-alist)
          (equal group nnfolder-current-group))
       (progn
-       (nnfolder-possibly-change-group group)
+       (nnfolder-possibly-change-group group server)
        (save-excursion
          (set-buffer nnfolder-current-buffer)
          ;; If the buffer was modified, write the file out now.
@@ -293,12 +291,9 @@ such things as moving mail.  All buffers always get killed upon server close.")
 
 (defun nnfolder-request-create-group (group &optional server) 
   (nnmail-activate 'nnfolder)
-  (or (assoc group nnfolder-group-alist)
-      (let (active)
-       (setq nnfolder-group-alist 
-             (cons (list group (setq active (cons 1 0)))
-                   nnfolder-group-alist))
-       (nnmail-save-active nnfolder-group-alist nnfolder-active-file)))
+  (unless (assoc group nnfolder-group-alist)
+    (push (list group (cons 1 0)) nnfolder-group-alist)
+    (nnmail-save-active nnfolder-group-alist nnfolder-active-file))
   t)
 
 (defun nnfolder-request-list (&optional server)
@@ -318,7 +313,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
 
 (defun nnfolder-request-expire-articles 
   (articles newsgroup &optional server force)
-  (nnfolder-possibly-change-group newsgroup)
+  (nnfolder-possibly-change-group newsgroup server)
   (let* ((is-old t)
         rest)
     (nnmail-activate 'nnfolder)
@@ -359,7 +354,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
 
 (defun nnfolder-request-move-article
   (article group server accept-form &optional last)
-  (nnfolder-possibly-change-group group)
+  (nnfolder-possibly-change-group group server)
   (let ((buf (get-buffer-create " *nnfolder move*"))
        result)
     (and 
@@ -379,7 +374,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
        (kill-buffer buf)
        result)
      (save-excursion
-       (nnfolder-possibly-change-group group)
+       (nnfolder-possibly-change-group group server)
        (set-buffer nnfolder-current-buffer)
        (goto-char (point-min))
        (if (search-forward (nnfolder-article-string article) nil t)
@@ -444,7 +439,7 @@ such things as moving mail.  All buffers always get killed upon server close.")
   t)
 
 (defun nnfolder-request-rename-group (group new-name &optional server)
-  (nnfolder-possibly-change-group group)
+  (nnfolder-possibly-change-group group server)
   (save-excursion
     (set-buffer nnfolder-current-buffer)
     (and (file-writable-p buffer-file-name)
@@ -493,9 +488,12 @@ such things as moving mail.  All buffers always get killed upon server close.")
             (point-max))))
       (delete-region (point-min) (point-max)))))
 
-(defun nnfolder-possibly-change-group (group)
-  (or (file-exists-p nnfolder-directory)
-      (make-directory (directory-file-name nnfolder-directory) t))
+(defun nnfolder-possibly-change-group (group &optional server)
+  (when (and server
+            (not (nnfolder-server-opened server)))
+    (nnfolder-open-server server))
+  (unless (file-exists-p nnfolder-directory)
+    (make-directory (directory-file-name nnfolder-directory) t))
   (nnfolder-possibly-activate-groups nil)
   (or (assoc group nnfolder-group-alist)
       (not (file-exists-p (concat (file-name-as-directory nnfolder-directory)
index c0cd683..39abb16 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index c3fefe6..98504f4 100644 (file)
@@ -17,8 +17,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -288,7 +289,7 @@ parameter.  It should return nil, `warn' or `delete'.")
         (concat dir group "/")
        ;; If not, we translate dots into slashes.
        (concat dir (nnheader-replace-chars-in-string group ?. ?/) "/")))
-   (if file file "")))
+   (or file "")))
   
 (defun nnmail-date-to-time (date)
   "Convert DATE into time."
@@ -489,7 +490,7 @@ nn*-request-list should have been called before calling this function."
       ;; Look for a Content-Length header.
       (if (not (save-excursion
                 (and (re-search-backward 
-                      "^Content-Length: \\([0-9]+\\)" start t)
+                      "^Content-Length:[ \t]*\\([0-9]+\\)" start t)
                      (setq content-length (string-to-int
                                            (buffer-substring 
                                             (match-beginning 1)
@@ -560,7 +561,7 @@ nn*-request-list should have been called before calling this function."
          (insert "Message-ID: " (setq message-id (nnmail-message-id)) "\n"))
        ;; Look for a Content-Length header.
        (goto-char (point-min))
-       (if (not (re-search-forward "^Content-Length: \\([0-9]+\\)" nil t))
+       (if (not (re-search-forward "^Content-Length:[ \t]*\\([0-9]+\\)" nil t))
            (setq content-length nil)
          (setq content-length (string-to-int (match-string 1)))
          ;; We destroy the header, since none of the backends ever 
@@ -1002,9 +1003,13 @@ See the documentation for the variable `nnmail-split-fancy' for documentation."
   ;; If this is a duplicate message, then we do not save it.
   (let* ((duplication (nnmail-cache-id-exists-p message-id))
         (action (when duplication
-                  (if (nnheader-functionp nnmail-treat-duplicates)
-                      (funcall nnmail-treat-duplicates message-id)
-                    nnmail-treat-duplicates))))
+                  (cond
+                   ((memq nnmail-treat-duplicates '(warn delete))
+                    nnmail-treat-duplicates)
+                   ((nnheader-functionp nnmail-treat-duplicates)
+                    (funcall nnmail-treat-duplicates message-id))
+                   (t
+                    nnmail-treat-duplicates)))))
     (cond
      ((not duplication)
       (nnmail-cache-insert message-id)
index 5e4c472..09682e0 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
      (dont-check
       (nnheader-report 'nnmbox "Selected group %s" group)
       (nnheader-insert ""))
-     ((> (car active) (cdr active))
-      (nnheader-report 'nnmbox "Empty group %s" group)
-      (nnheader-insert "211 0 0 0 %s\n" group))
      (t
       (nnheader-report 'nnmbox "Selected group %s" group)
       (nnheader-insert "211 %d %d %d %s\n" 
index 667cfc3..0df04f2 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index 1ea1c84..acb2d26 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -321,6 +322,10 @@ all. This may very well take some time.")
   (article group server accept-form &optional last)
   (let ((buf (get-buffer-create " *nnml move*"))
        result)
+    (nnml-possibly-change-directory group)
+    (unless nnml-article-file-alist
+      (setq nnml-article-file-alist
+           (nnheader-article-to-file-alist nnml-current-directory)))
     (and 
      (nnml-deletable-article-p group article)
      (nnml-request-article article group server)
index 858c484..b182038 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -339,7 +340,7 @@ The SOUP packet file name will be inserted at the %s.")
       (when (not mod-time)
        (setcdr (cdr total-infolist) (delq info (cddr total-infolist)))))
     (if (cddr total-infolist)
-       (setcar active (car (car (cdr (car (cdr (cdr total-infolist)))))))
+       (setcar active (car (car (car (cdr (cdr total-infolist))))))
       (setcar active (1+ (cdr active))))
     (nnsoup-write-active-file)
     ;; Return the articles that weren't expired.
@@ -718,6 +719,30 @@ The SOUP packet file name will be inserted at the %s.")
       (setq active (cdr active)))
     (nnsoup-write-active-file)))
 
+(defun nnsoup-delete-unreferenced-message-files ()
+  "Delete any *.MSG and *.IDX files that aren't known by nnsoup."
+  (interactive)
+  (let* ((known (apply 'nconc (mapcar 
+                              (lambda (ga)
+                                (mapcar
+                                 (lambda (area)
+                                   (gnus-soup-area-prefix (cadr area)))
+                                 (cddr ga)))
+                              nnsoup-group-alist)))
+        (regexp "\\.MSG$\\|\\.IDX$")
+        (files (directory-files nnsoup-directory nil regexp))
+        non-files file)
+    ;; Find all files that aren't known by nnsoup.
+    (while (setq file (pop files))
+      (string-match regexp file)
+      (unless (member (substring file 0 (match-beginning 0)) known)
+       (push file non-files)))
+    ;; Sort and delete the files.
+    (setq non-files (sort non-files 'string<))
+    (map-y-or-n-p "Delete file %s? "
+                 (lambda (file) (delete-file (concat nnsoup-directory file)))
+                 non-files)))
+
 (provide 'nnsoup)
 
 ;;; nnsoup.el ends here
index 5fe6a30..5157d03 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index 760d4b2..df9e897 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
@@ -1008,27 +1009,24 @@ It will prompt for a password."
 (defun nntp-send-region-to-server (begin end)
   "Send the current buffer region (from BEGIN to END) to the server."
   (save-excursion
-    ;; If we're not the the nntp server buffer, we copy the region
-    ;; over to that buffer.  
-    (if (eq (get-buffer nntp-server-buffer) (current-buffer))
-       (let ((orig (current-buffer)))
-         (set-buffer nntp-server-buffer)
-         (erase-buffer)
-         (insert-buffer-substring orig begin end))
-      ;; We are in the nntp buffer, so we just narrow it.
-      (narrow-to-region begin end))
-    ;; `process-send-region' does not work if the text to be sent is very
-    ;; large, so we send it piecemeal.
-    (let ((last (point-min))
-         (size 100))                   ;Size of text sent at once.
-      (while (/= last (point-max))
-       (process-send-region 
-        nntp-server-process last (setq last (min (+ last size) (point-max))))
-       ;; Read any output from the server.  May be unnecessary.
-       (accept-process-output)))
-    ;; Delete the area we sent.
-    (delete-region (point-min) (point-max))
-    (widen)))
+    (let ((cur (current-buffer)))
+      ;; Copy the buffer over to the send buffer.
+      (nnheader-set-temp-buffer " *nntp send*")
+      (insert-buffer-substring cur begin end)
+      (save-excursion
+       (set-buffer cur)
+       (erase-buffer))
+      ;; `process-send-region' does not work if the text to be sent is very
+      ;; large, so we send it piecemeal.
+      (let ((last (point-min))
+           (size 100))                 ;Size of text sent at once.
+       (while (/= last (point-max))
+         (process-send-region 
+          nntp-server-process
+          last (setq last (min (+ last size) (point-max))))
+         ;; Read any output from the server.  May be unnecessary.
+         (accept-process-output)))
+      (kill-buffer (current-buffer)))))
 
 (defun nntp-open-server-semi-internal (server &optional service)
   "Open SERVER.
index b1d4d9d..fafff3d 100644 (file)
@@ -18,8 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to
-;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
 
 ;;; Commentary:
 
index cccfa0d..49b519d 100644 (file)
@@ -1,3 +1,21 @@
+Fri Feb  2 20:41:56 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Reading Mail): Addition.
+
+Wed Jan 31 20:20:43 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Mail): Addition.
+
+Sat Jan 27 21:13:34 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Topic Variables): Deletia.
+
+Fri Jan 26 13:50:23 1996  Lars Ingebrigtsen  <lars@eyesore.no>
+
+       * gnus.texi (Customizing Threading): Addition. 
+       (Topic Commands): Addition.
+       (Topic Variables): Addition.
+
 Thu Jan 25 18:35:12 1996  Lars Ingebrigtsen  <lars@eyesore.no>
 
        * gnus.texi (Summary Maneuvering): Addition.
index 742a4d9..32d1848 100644 (file)
@@ -3,6 +3,7 @@ EMACS=emacs
 MAKEINFO=$(EMACS) -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
 # MAKEINFO=makeinfo -o gnus.info gnus.texi
 LATEX=latex
+DVIPS=dvips
 
 all: gnus.info refcard.dvi
 
@@ -20,3 +21,12 @@ clean:
 
 makeinfo: 
        makeinfo -o gnus.info gnus.texi 
+
+latex: gnus.texi
+       $(EMACS) -batch -q -no-site-file gnus.texi -l ./texi2latex.elc -f latexi-translate
+
+latexps: gnus.latexi
+       $(LATEX) gnus.latexi ; $(DVIPS) -f gnus.dvi > gnus.ps
+
+latexboth: gnus.latexi
+       rm -f gnus-manual-a4.ps.gz gnus-manual-standard.ps.gz ; $(LATEX) gnus.latexi ; $(DVIPS) -f gnus.dvi > gnus-manual-a4.ps ; gzip gnus-manual-a4.ps ; sed 's/,a4paper//' gnus.latexi > gnus-standard.latexi ; $(LATEX) gnus.latexi ; $(DVIPS) -f gnus.dvi > gnus-manual-standard.ps ; gzip gnus-manual-standard.ps 
index 79507f2..1488c10 100644 (file)
 
 @iftex
 @iflatex
-\documentstyle[a4,pagestyle]{book}
-\input{epsf}
-%\addtolength{\oddsidemargin}{2cm}
-%\addtolength{\evensidemargin}{2cm}
+\documentclass[twoside,a4paper,openright]{book}
+\usepackage[latin1]{inputenc}
+% \usepackage{fontenc}
+% \usepackage{babel}
+\usepackage{pagestyle}
+\usepackage{epsfig}
+\fontfamily{bembo}\selectfont
+
 \makeindex
 \begin{document}
 
-\newcommand{\gnuscode}[1]{{\tt #1}}
-\newcommand{\gnussamp}[1]{{\tt #1}}
-\newcommand{\gnuslisp}[1]{{\tt #1}}
-\newcommand{\gnuskbd}[1]{{`\tt #1'}}
-\newcommand{\gnusfile}[1]{{`\tt #1'}}
-\newcommand{\gnusdfn}[1]{{\em #1}}
-\newcommand{\gnusstrong}[1]{{\bf #1}}
-\newcommand{\gnusemph}[1]{{\em #1}}
-\newcommand{\gnusvar}[1]{{\sl #1}}
-\newcommand{\gnussc}[1]{{\sc #1}}
-\newcommand{\gnustitle}[1]{{\huge #1}}
-\newcommand{\gnusauthor}[1]{{\huge #1}}
-\newcommand{\gnusbullet}{{.}}
+\newcommand{\gnuschaptername}{}
+\newcommand{\gnussectionname}{}
+
+\newcommand{\gnusbackslash}{/}
+
+\newcommand{\gnusxref}[1]{See ``#1'' on page \pageref{#1}}
+\newcommand{\gnuspxref}[1]{see ``#1'' on page \pageref{#1}}
+
+\newcommand{\gnuskindex}[1]{\index{#1}}
+\newcommand{\gnusindex}[1]{\index{#1}}
+
+\newcommand{\gnustt}[1]{{\textbf{\textsf{#1}}}}
+\newcommand{\gnuscode}[1]{\gnustt{#1}}
+\newcommand{\gnussamp}[1]{`\gnustt{#1}'}
+\newcommand{\gnuslisp}[1]{\gnustt{#1}}
+\newcommand{\gnuskbd}[1]{`\gnustt{#1}'}
+\newcommand{\gnusfile}[1]{`\gnustt{#1}'}
+\newcommand{\gnusdfn}[1]{\textit{#1}}
+\newcommand{\gnusi}[1]{\textit{#1}}
+\newcommand{\gnusstrong}[1]{\textbf{#1}}
+\newcommand{\gnusemph}[1]{\textit{#1}}
+\newcommand{\gnusvar}[1]{\textsl{\textsf{#1}}}
+\newcommand{\gnussc}[1]{\textsc{#1}}
+\newcommand{\gnustitle}[1]{{\huge\textbf{#1}}}
+\newcommand{\gnusauthor}[1]{{\large\textbf{#1}}}
+
+\newcommand{\gnusbullet}{{${\bullet}$}}
+\newcommand{\gnusdollar}{\$}
+\newcommand{\gnusampersand}{\&}
+\newcommand{\gnuspercent}{\%}
+\newcommand{\gnushash}{\#}
+\newcommand{\gnushat}{\%}
+\newcommand{\gnustilde}{\%}
+\newcommand{\gnusless}{{$<$}}
+\newcommand{\gnusgreater}{{$>$}}
+
+\newcommand{\gnushead}{\raisebox{-1cm}{\epsfig{figure=gnus-head.eps,height=1cm}}}
+\newcommand{\gnusinteresting}{
+\marginpar[\hspace{2.5cm}\gnushead]{\gnushead}
+}
+
+\newcommand{\gnuschapter}[1]{
+\chapter{#1}
+\renewcommand{\gnuschaptername}{#1}
+\thispagestyle{empty}
+% \epsfig{figure=gnus-herd-\arabic{chapter}.eps,height=15cm}
+\clearpage
+}
+
+\newcommand{\gnusitemx}[1]{{\itemsep=0pt\item#1}}
+
+\newcommand{\gnussection}[1]{
+\renewcommand{\gnussectionname}{#1}
+\section{#1}
+}
 
 \newenvironment{codelist}%
 {\begin{list}{}{
@@ -42,6 +88,7 @@
 
 \newenvironment{kbdlist}%
 {\begin{list}{}{
+\labelwidth=0cm
 }
 }{\end{list}}
 
 }
 }{\end{list}}
 
+\newlength{\headrulewidth}
+\setlength{\headrulewidth}{\headtextwidth}
+\addtolength{\headrulewidth}{-2.6ex}
+\newlength{\headwrule}
+\setlength{\headwrule}{\headrulewidth}
+\addtolength{\headwrule}{-0ex}
+
 \newpagestyle{gnus}%
 {
-{\underline{\makebox{\hfill}}}
+{
+\ifodd\count0
+{
+\hspace*{-2ex}
+\underline{
+\makebox[\headtextwidth]{
+\hspace*{-2.1ex}
+%\ifnum chapter=0\else
+\textbf{\arabic{chapter}.\arabic{section}}
+%\fi
+\textbf{\gnussectionname\hfill\arabic{page}}
+}}
+%\hspace*{-\headrulewidth}
+%\raisebox{-3pt}{\rule{\headwrule}{0.5pt}}
+}
+\else
+{
+\hspace*{-2.1cm}
+\underline{
+\hspace*{-2ex}
+\makebox[\headtextwidth]{
+\textbf{\arabic{page}\hfill\gnuschaptername}
+%\hspace*{-\headrulewidth}
+%\raisebox{-3pt}{\rule{\headwrule}{0.5pt}}
+}}
+}
+\fi
+}
 }
 {
 \ifodd\count0
-% \epsfbox{foot-gnus.ps} hei \hfill \arabic{page}
+\mbox{} \hfill 
+\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
 \else
-\arabic{page} \hfill hei % \epsfbox{foot-gnus}
+\raisebox{-0.5cm}{\epsfig{figure=gnus-big-logo.eps,height=1cm}}
+\hfill \mbox{}
 \fi
 }
 \pagestyle{gnus}
 @end iflatex
 @end iftex
 
+@iftex
+@iflatex
+\begin{titlepage}
+{
+
+%\addtolength{\oddsidemargin}{-5cm}
+%\addtolength{\evensidemargin}{-5cm}
+\parindent=0cm
+\addtolength{\textheight}{2cm}
+
+\gnustitle{\gnustitlename}\\
+\rule{15cm}{1mm}\\
+\vfill
+\hspace*{-1cm}\epsfig{figure=gnus-big-logo.eps,height=15cm}
+\vfill
+\rule{15cm}{1mm}\\
+\gnusauthor{by Lars Magne Ingebrigtsen}
+\newpage
+}
+
+\mbox{}
+\vfill
+
+\thispagestyle{empty}
+
+Copyright \copyright{} 1995 Free Software Foundation, Inc. 
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the
+entire resulting derived work is distributed under the terms of a
+permission notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions.
+
+\newpage
+\end{titlepage}
+@end iflatex
+@end iftex
+
 @ifinfo
 
 This file documents Gnus, the GNU Emacs newsreader.
@@ -112,7 +239,7 @@ Permission is granted to copy and distribute translations of this manual
 into another language, under the above conditions for modified versions.
 @end ifinfo
 
-@iftex
+@tex
 
 @titlepage
 @title September Gnus Manual
@@ -138,7 +265,7 @@ into another language, under the above conditions for modified versions.
 @end titlepage
 @page
 
-@end iftex
+@end tex
 
 
 @node Top
@@ -450,6 +577,8 @@ Many excellent functions, especially dealing with scoring and
 highlighting (as well as the @sc{soup} support) was written
 by Per Abrahamsen.
 @item
+Design and graphics were done by Luis Fernandes.
+@item
 Innumerable bug fixes were written by Sudish Joseph.
 @item 
 @code{gnus-topic} was written by Ilja Weis.
@@ -768,7 +897,8 @@ variables.
 @section Finding the News
 
 @vindex gnus-select-method
-The @code{gnus-select-method} variable controls how Gnus finds news.
+@c @head
+The @code{gnus-select-method} variable controls how Gnus finds news. 
 This variable should be a list where the first element says @dfn{how}
 and the second element says @dfn{where}.  This method is your native
 method.  All groups that are not fetched with this method are foreign
@@ -821,6 +951,7 @@ want to.  This also makes @file{.newsrc} maintenance much tidier.
 @xref{Foreign Groups}.
 
 @vindex gnus-secondary-select-methods
+@c @head
 A slightly different approach to foreign groups is to set the
 @code{gnus-secondary-select-methods} variable.  The select methods
 listed in this variable are in many ways just as native as the
@@ -881,6 +1012,7 @@ find it difficult to actually do anything in the group buffer.  But,
 hey, that's your problem.  Blllrph!
 
 @findex gnus-no-server
+@c @head
 If you know that the server is definitely down, or you just want to read
 your mail without bothering with the server at all, you can use the
 @code{gnus-no-server} command to start Gnus.  That might come in handy
@@ -1154,6 +1286,7 @@ ignore hierarchies you aren't ever interested in.
 @c if you set it to anything else.
 
 @vindex gnus-read-active-file
+@c @head
 The active file can be rather Huge, so if you have a slow network, you
 can set @code{gnus-read-active-file} to @code{nil} to prevent Gnus from
 reading the active file.  This variable is @code{t} by default.
@@ -1330,10 +1463,10 @@ Group name.
 Newsgroup description.
 
 @item o
-Moderated.
+@samp{m} if moderated.
 
 @item O
-Moderated.
+@samp{(m)} if moderated.
 
 @item s
 Select method.
@@ -2532,8 +2665,8 @@ and @code{news}.
 
 
 @node SOUP
-@subsection @sc{soup}
-@cindex @sc{SOUP}
+@subsection SOUP
+@cindex SOUP
 @cindex offline
 
 In the PC world people often talk about ``offline'' newsreaders.  These
@@ -2599,7 +2732,7 @@ reading and Gnus for packing/sending these @sc{soup} packets.
 
 
 @node SOUP Commands
-@subsubsection @sc{soup} Commands
+@subsubsection SOUP Commands
 
 @table @kbd
 @item G s b
@@ -2746,7 +2879,7 @@ Regular expression matching incoming @sc{soup} packets.  The default is
 
 
 @node SOUP Replies
-@subsubsection @sc{SOUP} Replies
+@subsubsection SOUP Replies
 
 Just using @code{nnsoup} won't mean that your postings and mailings end
 up in @sc{soup} reply packets automagically.  You have to work a bit
@@ -2896,6 +3029,28 @@ the @code{Message-ID} as a parameter.  The function must return either
 You can turn this feature off completely by setting the variable to
 @code{nil}.
 
+If you want all the duplicate mails to be put into a special
+@dfn{duplicates} group, you could do that using the normal mail split
+methods:
+
+@lisp
+(setq nnmail-split-fancy
+      '(| ;; Messages duplicates go to a separate group.
+          ("gnus-warning" "duplication of message" "duplicate")
+          ;; Message from deamons, postmaster, and the like to another.
+         (any mail "mail.misc")
+         ;; Other rules.
+         [ ... ] ))
+@end lisp
+
+Or something like:
+@lisp
+(setq nnmail-split-methods 
+      '(("duplicates" "^Gnus-Warning:")
+        ;; Other rules.
+        [...]))
+@end lisp
+
 Here's a neat feature: If you know that the recipient reads her mail
 with Gnus, and that she has @code{nnmail-treat-duplicates} set to
 @code{delete}, you can send her as many insults as you like, just by
@@ -3919,14 +4074,6 @@ the hook for the group mode:
 @cindex topic variables
 
 
-@vindex gnus-group-topic-topics-only
-Whoo, this is complicated.  If @code{gnus-group-topic-topics-only} is
-@code{nil}, all groups and topics will be listed, as you would expect.
-If this variable is non-@code{nil}, only the topics will be listed, and
-the groups will not be listed.  This makes the group buffer much shorter,
-I'm sure you'll agree.  This is all modified on a topic-by-topic basis
-by the @var{show} parameter.   It makes perfect sense, really.
-
 @vindex gnus-topic-unique
 If @code{gnus-topic-unique} is non-@code{nil}, each group will be member
 of (tops) one topic each.  If this is @code{nil}, each group might end
@@ -3957,6 +4104,11 @@ Number of unread articles in the topic.
 Number of unread articles in the topic and all its subtopics. 
 @end table
 
+@vindex gnus-topic-indent-level
+Each sub-topic (and the groups in the sub-topics) will be indented with
+@code{gnus-topic-indent-level} times the topic level number of spaces.
+The default is @samp{2}.
+
 
 @node Topic Commands
 @subsection Topic Commands
@@ -4011,6 +4163,13 @@ visible) or unfolded (if it was folded already).  So it's basically a
 toggling command on topics.  In addition, if you give a numerical
 prefix, group on that level (and lower) will be displayed.
 
+@item TAB
+@kindex TAB (Group)
+@findex gnus-topic-indent
+``Indent'' the current topic so that it becomes a sub-topic of the
+previous topic (@code{gnus-topic-indent}).  If given a prefix,
+``un-indent'' the topic instead.
+
 @item C-k
 @kindex C-k (Group)
 @findex gnus-topic-kill-group
@@ -4889,6 +5048,18 @@ I found that useful, so you can now also press @kbd{C-c C-p} to
 thing, you will be prompted for a mail group, and then the article will
 be put there.  This means that the article is @dfn{not} mailed.  
 
+@findex gnus-kill-message-buffer
+@cindex kill mail buffer
+@kindex C-x k (Mail)
+@kindex C-x k (Post)
+If enter a mail (or post) buffer and then decide not to compose a
+message after all, you'd normally just kill the buffer with @kbd{C-x k}.
+However, since the mail and post buffers are associated with articles in
+the draft group, this will leave lots of rubbish articles in the draft
+group.  To avoid that problem, kill mail and post buffer with @kbd{C-c
+C-k} (@code{gnus-kill-message-buffer}) instead.  This will make sure
+that everything is properly cleaned up before the buffer is killed.
+
 There are three ``methods'' for handling all mail.  The default is
 @code{sendmail}.  Some people like what @code{mh} does better, and some
 people prefer @code{vm}.
@@ -6335,6 +6506,9 @@ as 10, you might consider setting this variable to something sensible:
                   "\\)?\\]?:?[ \t]*"))
 @end lisp
 
+All words that match this regexp will be removed before comparing two
+subjects. 
+
 @item gnus-summary-gather-exclude-subject
 @vindex gnus-summary-gather-exclude-subject
 Since loose thread gathering is done on subjects only, that might lead