Synch with Oort Gnus.
authoryamaoka <yamaoka>
Mon, 27 Aug 2001 00:20:30 +0000 (00:20 +0000)
committeryamaoka <yamaoka>
Mon, 27 Aug 2001 00:20:30 +0000 (00:20 +0000)
17 files changed:
GNUS-NEWS
contrib/ChangeLog
contrib/gpg.el
lisp/ChangeLog
lisp/gnus-group.el
lisp/gnus-spec.el
lisp/gnus-sum.el
lisp/mml.el
lisp/nnfolder.el
lisp/nnml.el
lisp/nnrss.el
lisp/nnweb.el
texi/ChangeLog
texi/Makefile.in
texi/gnus-ja.texi
texi/gnus.texi
texi/splitindex

index 898c768..8f63ecb 100644 (file)
--- a/GNUS-NEWS
+++ b/GNUS-NEWS
@@ -8,17 +8,18 @@ For older news, see Gnus info node "New Features".
 \f
 * Changes in Oort Gnus
 
-** Nnml stores marks in the file ".marks" for each groups.
+** The nnml and nnfolder backends store marks for each groups.
 
-This makes it possible to take backup of nnml servers independently of
-.newsrc.eld.  It also makes it possible to share articles and marks
-between users (without sharing .newsrc.eld) within e.g. a department.
+This makes it possible to take backup of nnml/nnfolder servers/groups
+separately of .newsrc.eld, while preserving marks.  It also makes it
+possible to share articles and marks between users (without sharing
+.newsrc.eld) within e.g. a department.
 
 ** The menu bar (in Group and Summary buffer) named "Misc" has been
    renamed to "Gnus".
 
 ** The menu bar (in Message mode) named "MML" has been renamed to
-   "Attachment".
+   "Attachments".
 
 ** gnus-group-charset-alist and gnus-group-ignored-charsets-alist
 
index 2c857ba..be5b92b 100644 (file)
@@ -1,3 +1,7 @@
+2001-08-24 16:09:14  Fabien Penso  <penso@linuxfr.org>
+
+       * gpg.el (gpg-command-sign-detached): Doc fix.
+
 2001-08-07  Andreas Jaeger  <aj@suse.de>
 
        * gpg.el (gpg-passphrase-forget): Don't cache
index e28118c..fa1c5f3 100644 (file)
@@ -362,7 +362,7 @@ standard error."
   '(gpg-2comp . ("--batch" "--passphrase-fd=0" "--output=-"
                 armor textmode  "--clearsign"
                 sign-with-key))
-  "Command to create a create a \"clearsign\" text file.  
+  "Command to create a \"clearsign\" text file.  
 The invoked program has to read the passphrase from standard input,
 followed by the message to sign.  It should write the ASCII-amored
 signed text message to standard output, and diagnostic messages to
@@ -375,7 +375,7 @@ standard error."
   '(gpg-2comp . ("--batch" "--passphrase-fd=0" "--output=-"
                 armor textmode "--detach-sign" 
                 sign-with-key))
-  "Command to create a create a detached signature. 
+  "Command to create a detached signature. 
 The invoked program has to read the passphrase from standard input,
 followed by the message to sign.  It should write the ASCII-amored
 detached signature to standard output, and diagnostic messages to
index f445159..1739e1f 100644 (file)
@@ -1,3 +1,74 @@
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       * nnfolder.el (nnfolder-save-marks): Don't create directory named
+       after group in ~/.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+       From Andreas Jaeger  <aj@suse.de>
+
+       * nnfolder.el (nnfolder-open-marks): Fix typo.
+       * nnml.el (nnml-open-marks): Likewise.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       Make nnfolder groups self-contained as far as marks are concerned.
+
+       * nnfolder.el (nnfolder-marks-directory, nnfolder-marks-is-evil)
+       (nnfolder-marks, nnfolder-marks-file-suffix): New variables.
+       (nnfolder-open-server): Make marks directory.
+       (nnfolder-request-delete-group): Delete marks file.
+       (nnfolder-request-delete-group): Check of nov/marks file exist
+       before deleting.
+       (nnfolder-request-rename-group): Rename marks file.
+       (nnfolder-request-rename-group): Only rename nov/mark if they exists.
+       (nnfolder-request-set-mark, nnfolder-request-update-info)
+       (nnfolder-group-marks-pathname, nnfolder-save-marks)
+       (nnfolder-open-marks): New functions.
+       (top-level): Require gnus.
+
+2001-08-25 09:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * nnweb.el (nnweb-type-definition): Use google raw file.
+       (nnweb-google-parse-1): Ditto.
+       (nnweb-google-identity): Ditto.
+       (nnweb-reference-wash-article): Move nnweb-decode-entities here.
+       (nnweb-altavista-wash-article): Ditto.
+       (nnweb-request-article): Remove nnweb-decode-entities.
+
+       * nnml.el: Require 'gnus.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-marks-is-evil): Add doc.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       * nnml.el (nnml-save-marks): Wrap saving marks in a
+       condition-case, to allow user to start Gnus if saving marks failed
+       for some reason.
+
+2001-08-24 16:05:38  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-spec.el (gnus-compile): Don't compile gnus-version. 
+
+       * gnus-group.el (gnus-update-group-mark-positions): Bind
+       gnus-group-update-hook to nil.
+
+2001-08-24 13:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * mml.el (mml-generate-mime-1): Force as multibyte string.
+
+2001-08-24 12:00:00  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-sum.el (gnus-summary-insert-line) 
+       (gnus-summary-prepare-threads): gnus-tmp-lines should be a string.
+       From Martin Kretzschmar <Martin.Kretzschmar@inf.tu-dresden.de>
+
+       * gnus-spec.el (gnus-correct-substring): Take optional END.
+
+       * nnrss.el (nnrss-request-article): Remove \n.
+       (nnrss-retrieve-headers): Lines number is -1.
+
 2001-08-24  Simon Josefsson  <jas@extundo.com>
 
        * gnus-group.el (gnus-info-clear-data): Call
index cc9dacd..1b9fc0b 100644 (file)
@@ -965,6 +965,7 @@ The following commands are available:
 (defun gnus-update-group-mark-positions ()
   (save-excursion
     (let ((gnus-process-mark ?\200)
+         (gnus-group-update-hook nil)
          (gnus-group-marked '("dummy.group"))
          (gnus-active-hashtb (make-vector 10 0))
          (topic ""))
index fc6c03f..0171a91 100644 (file)
@@ -309,7 +309,7 @@ by `gnus-xmas-redefine'."
     (mapcar (lambda (char) (incf length (gnus-char-width char))) string)
     length))
 
-(defun gnus-correct-substring (string start end)
+(defun gnus-correct-substring (string start &optional end)
   (let ((wstart 0)
        (wend 0)
        (seek 0)
@@ -323,7 +323,8 @@ by `gnus-xmas-redefine'."
          wstart seek)
     ;; Find the end position.
     (while (and (< seek length)
-               (<= wend end))
+               (or (not end)
+                   (<= wend end)))
       (incf wend (gnus-char-width (aref string seek)))
       (incf seek))
     (setq wend seek)
@@ -670,7 +671,7 @@ If PROPS, insert the result."
       (while entries
        (setq entry (pop entries)
              type (car entry))
-       (if (memq type '(version gnus-version))
+       (if (memq type '(gnus-version version))
            (setq gnus-format-specs (delq entry gnus-format-specs))
          (let ((form (caddr entry)))
            (when (and (listp form)
index a5cafed..3537c3f 100644 (file)
@@ -2979,8 +2979,9 @@ buffer that was in action when the last article was fetched."
       (setq gnus-tmp-name gnus-tmp-from))
     (unless (numberp gnus-tmp-lines)
       (setq gnus-tmp-lines -1))
-    (when (= gnus-tmp-lines -1)
-      (setq gnus-tmp-lines "?"))
+    (if (= gnus-tmp-lines -1)
+       (setq gnus-tmp-lines "?")
+      (setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
     (gnus-put-text-property-excluding-characters-with-faces
      (point)
      (progn (eval gnus-summary-line-format-spec) (point))
@@ -4411,8 +4412,9 @@ or a straight list of headers."
              (setq gnus-tmp-name gnus-tmp-from))
            (unless (numberp gnus-tmp-lines)
              (setq gnus-tmp-lines -1))
-           (when (= gnus-tmp-lines -1)
-             (setq gnus-tmp-lines "?"))
+           (if (= gnus-tmp-lines -1)
+               (setq gnus-tmp-lines "?")
+             (setq gnus-tmp-lines (number-to-string gnus-tmp-lines)))
            (gnus-put-text-property
             (point)
             (progn (eval gnus-summary-line-format-spec) (point))
index 84693d8..2826144 100644 (file)
@@ -387,7 +387,7 @@ If MML is non-nil, return the buffer up till the correspondent mml tag."
               (t
                (insert (cdr (assq 'contents cont)))))
              (setq encoding (mm-encode-buffer type)
-                   coded (buffer-string))))
+                   coded (mm-string-as-multibyte (buffer-string)))))
          (mml-insert-mime-headers cont type charset encoding)
          (insert "\n")
          (insert coded)))
index f234b8d..2e89fc9 100644 (file)
@@ -1,8 +1,9 @@
 ;;; nnfolder.el --- mail folder access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
 ;;        Free Software Foundation, Inc.
 
-;; Author: ShengHuo Zhu <zsh@cs.rochester.edu> (adding NOV)
+;; Author: Simon Josefsson <simon@josefsson.org> (adding MARKS)
+;;      ShengHuo Zhu <zsh@cs.rochester.edu> (adding NOV)
 ;;      Scott Byer <byer@mv.us.adobe.com>
 ;;     Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
@@ -36,6 +37,7 @@
 (require 'message)
 (require 'nnmail)
 (require 'nnoo)
+(require 'gnus)
 (require 'gnus-util)
 (require 'gnus-range)
 
@@ -53,6 +55,10 @@ This variable is a virtual server slot.  See the Gnus manual for details.")
   "The name of the nnfolder NOV directory.
 If nil, `nnfolder-directory' is used.")
 
+(defvoo nnfolder-marks-directory nil
+  "The name of the nnfolder MARKS directory.
+If nil, `nnfolder-directory' is used.")
+
 (defvoo nnfolder-active-file
     (nnheader-concat nnfolder-directory "active")
   "The name of the active file.
@@ -142,6 +148,21 @@ This variable is a virtual server slot.  See the Gnus manual for details.")
 
 (defvar nnfolder-nov-buffer-file-name nil)
 
+(defvoo nnfolder-marks-is-evil nil
+  "If non-nil, Gnus will never generate and use marks file for mail groups.
+Using marks files makes it possible to backup and restore mail groups
+separately from `.newsrc.eld'.  If you have, for some reason, set
+this to t, and want to set it to nil again, you should always remove
+the corresponding marks file (usually base nnfolder file name
+concatenated with `.mrk', but see `nnfolder-marks-file-suffix') for
+the group.  Then the marks file will be regenerated properly by Gnus.
+
+This variable is a virtual server slot.  See the Gnus manual for details.")
+
+(defvoo nnfolder-marks nil)
+
+(defvoo nnfolder-marks-file-suffix ".mrk")
+
 \f
 
 ;;; Interface functions
@@ -188,6 +209,9 @@ This variable is a virtual server slot.  See the Gnus manual for details.")
   (unless (or gnus-nov-is-evil nnfolder-nov-is-evil)
     (and nnfolder-nov-directory
         (gnus-make-directory nnfolder-nov-directory)))
+  (unless nnfolder-marks-is-evil
+    (and nnfolder-marks-directory
+        (gnus-make-directory nnfolder-marks-directory)))
   (cond
    ((not (file-exists-p nnfolder-directory))
     (nnfolder-close-server)
@@ -539,7 +563,10 @@ This variable is a virtual server slot.  See the Gnus manual for details.")
     ;; Delete the file that holds the group.
     (ignore-errors
       (delete-file (nnfolder-group-pathname group))
-      (delete-file (nnfolder-group-nov-pathname group))))
+      (when (file-exists-p (nnfolder-group-nov-pathname group))
+       (delete-file (nnfolder-group-nov-pathname group)))
+      (when (file-exists-p (nnfolder-group-marks-pathname group))
+       (delete-file (nnfolder-group-marks-pathname group)))))
   ;; Remove the group from all structures.
   (setq nnfolder-group-alist
        (delq (assoc group nnfolder-group-alist) nnfolder-group-alist)
@@ -558,9 +585,14 @@ This variable is a virtual server slot.  See the Gnus manual for details.")
           (let ((new-file (nnfolder-group-pathname new-name)))
             (gnus-make-directory (file-name-directory new-file))
             (rename-file buffer-file-name new-file)
-            (setq new-file (nnfolder-group-nov-pathname new-name))
-            (rename-file (nnfolder-group-nov-pathname group)
-                         new-file))
+            (when (file-exists-p (nnfolder-group-nov-pathname group))
+              (setq new-file (nnfolder-group-nov-pathname new-name))
+              (gnus-make-directory (file-name-directory new-file))
+              (rename-file (nnfolder-group-nov-pathname group) new-file))
+            (when (file-exists-p (nnfolder-group-marks-pathname group))
+              (setq new-file (nnfolder-group-marks-pathname new-name))
+              (gnus-make-directory (file-name-directory new-file))
+              (rename-file (nnfolder-group-marks-pathname group) new-file)))
           t)
         ;; That went ok, so we change the internal structures.
         (let ((entry (assoc group nnfolder-group-alist)))
@@ -1111,6 +1143,86 @@ This command does not work if you use short group names."
     (mail-header-set-number headers article)
     (nnheader-insert-nov headers)))
 
+(deffoo nnfolder-request-set-mark (group actions &optional server)
+  (nnfolder-possibly-change-group group server)
+  (unless nnfolder-marks-is-evil
+    (nnfolder-open-marks group server)
+    (dolist (action actions)
+      (let ((range (nth 0 action))
+           (what  (nth 1 action))
+           (marks (nth 2 action)))
+       (assert (or (eq what 'add) (eq what 'del)) t
+               "Unknown request-set-mark action: %s" what)
+       (dolist (mark marks)
+         (setq nnfolder-marks (gnus-update-alist-soft
+                           mark
+                           (funcall (if (eq what 'add) 'gnus-range-add
+                                      'gnus-remove-from-range)
+                                    (cdr (assoc mark nnfolder-marks)) range)
+                           nnfolder-marks)))))
+    (nnfolder-save-marks group server))
+  nil)
+
+(deffoo nnfolder-request-update-info (group info &optional server)
+  (nnfolder-possibly-change-group group server)
+  (unless nnfolder-marks-is-evil
+    (nnfolder-open-marks group server)
+    ;; Update info using `nnfolder-marks'.
+    (mapcar (lambda (pred)
+             (gnus-info-set-marks
+              info
+              (gnus-update-alist-soft
+               (cdr pred)
+               (cdr (assq (cdr pred) nnfolder-marks))
+               (gnus-info-marks info))
+              t))
+           gnus-article-mark-lists)
+    (let ((seen (cdr (assq 'read nnfolder-marks))))
+      (gnus-info-set-read info
+                         (if (and (integerp (car seen))
+                                  (null (cdr seen)))
+                             (list (cons (car seen) (car seen)))
+                           seen))))
+  info)
+
+(defun nnfolder-group-marks-pathname (group)
+  "Make pathname for GROUP NOV."
+  (let ((nnfolder-directory (or nnfolder-marks-directory nnfolder-directory)))
+    (concat (nnfolder-group-pathname group) nnfolder-marks-file-suffix)))
+
+(defun nnfolder-save-marks (group server)
+  (let ((file-name-coding-system nnmail-pathname-coding-system)
+       (file (nnfolder-group-marks-pathname group)))
+    (condition-case err
+       (with-temp-file file
+         (erase-buffer)
+         (princ nnfolder-marks (current-buffer))
+         (insert "\n"))
+      (error (or (gnus-yes-or-no-p
+                 (format "Could not write to %s (%s).  Continue? " file err))
+                (error "Cannot write to %s (%s)" err))))))
+
+(defun nnfolder-open-marks (group server)
+  (let ((file (nnfolder-group-marks-pathname group)))
+    (if (file-exists-p file)
+       (setq nnfolder-marks (condition-case err
+                                (with-temp-buffer
+                                  (nnheader-insert-file-contents file)
+                                  (read (current-buffer)))
+                              (error (or (gnus-yes-or-no-p
+                                          (format "Error reading nnfolder marks file %s (%s).  Continuing will use marks from .newsrc.eld.  Continue? " file err))
+                                         (error "Cannot read nnfolder marks file %s (%s)" file err)))))
+      ;; User didn't have a .marks file.  Probably first time
+      ;; user of the .marks stuff.  Bootstrap it from .newsrc.eld.
+      (let ((info (gnus-get-info
+                  (gnus-group-prefixed-name
+                   group
+                   (gnus-server-to-method (format "nnfolder:%s" server))))))
+       (nnheader-message 6 "Bootstrapping nnfolder marks...")
+       (setq nnfolder-marks (gnus-info-marks info))
+       (push (cons 'read (gnus-info-read info)) nnfolder-marks)
+       (nnfolder-save-marks group server)))))
+
 (provide 'nnfolder)
 
 ;;; nnfolder.el ends here
index 18b651d..7e15778 100644 (file)
@@ -1,8 +1,9 @@
 ;;; nnml.el --- mail spool access for Gnus
-;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000
+;; Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
 ;;        Free Software Foundation, Inc.
 
-;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
+;; Author: Simon Josefsson <simon@josefsson.org> (adding MARKS)
+;;      Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;;     Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
 ;; Keywords: news, mail
 
@@ -34,6 +35,7 @@
 (eval-when-compile (require 'cl))
 (eval-when-compile (require 'gnus-clfns))
 
+(require 'gnus)
 (require 'nnheader)
 (require 'nnmail)
 (require 'nnoo)
@@ -63,7 +65,7 @@ This variable is a virtual server slot.  See the Gnus manual for details.")
 This variable is a virtual server slot.  See the Gnus manual for details.")
 
 (defvoo nnml-nov-is-evil nil
-  "If non-nil, Gnus will never generate and use nov databases for mail groups.
+  "If non-nil, Gnus will never generate and use nov databases for mail spools.
 Using nov databases will speed up header fetching considerably.
 This variable shouldn't be flipped much.  If you have, for some reason,
 set this to t, and want to set it to nil again, you should always run
@@ -73,6 +75,17 @@ all.  This may very well take some time.
 
 This variable is a virtual server slot.  See the Gnus manual for details.")
 
+(defvoo nnml-marks-is-evil nil
+  "If non-nil, Gnus will never generate and use marks file for mail spools.
+Using marks files makes it possible to backup and restore mail groups
+separately from `.newsrc.eld'.  If you have, for some reason, set this
+to t, and want to set it to nil again, you should always remove the
+corresponding marks file (usually named `.marks' in the nnml group
+directory, but see `nnml-marks-file-name') for the group.  Then the
+marks file will be regenerated properly by Gnus.
+
+This variable is a virtual server slot.  See the Gnus manual for details.")
+
 (defvoo nnml-prepare-save-mail-hook nil
   "Hook run narrowed to an article before saving.
 
@@ -90,6 +103,7 @@ This variable is a virtual server slot.  See the Gnus manual for details.")
   "nnml version.")
 
 (defvoo nnml-nov-file-name ".overview")
+(defvoo nnml-marks-file-name ".marks")
 
 (defvoo nnml-current-directory nil)
 (defvoo nnml-current-group nil)
@@ -108,6 +122,8 @@ check twice.")
 
 (defvoo nnml-file-coding-system nnmail-file-coding-system)
 
+(defvoo nnml-marks nil)
+
 \f
 
 ;;; Interface functions.
@@ -865,10 +881,6 @@ check twice.")
     (setq nnml-article-file-alist
          (nnheader-article-to-file-alist nnml-current-directory))))
 
-(defvoo nnml-marks-file-name ".marks")
-(defvoo nnml-marks-is-evil nil)
-(defvoo nnml-marks nil)
-
 (deffoo nnml-request-set-mark (group actions &optional server)
   (nnml-possibly-change-directory group server)
   (unless nnml-marks-is-evil
@@ -915,11 +927,16 @@ check twice.")
   (let ((file-name-coding-system nnmail-pathname-coding-system)
        (file (expand-file-name nnml-marks-file-name
                                (nnmail-group-pathname group nnml-directory))))
-    (nnml-possibly-create-directory group)
-    (with-temp-file file
-      (erase-buffer)
-      (princ nnml-marks (current-buffer))
-      (insert "\n"))))
+    (condition-case err
+       (progn
+         (nnml-possibly-create-directory group)
+         (with-temp-file file
+           (erase-buffer)
+           (princ nnml-marks (current-buffer))
+           (insert "\n")))
+      (error (or (gnus-yes-or-no-p
+                 (format "Could not write to %s (%s).  Continue? " file err))
+                (error "Cannot write to %s (%s)" err))))))
 
 (defun nnml-open-marks (group server)
   (let ((file (expand-file-name 
@@ -939,7 +956,7 @@ check twice.")
                   (gnus-group-prefixed-name
                    group
                    (gnus-server-to-method (format "nnml:%s" server))))))
-       (nnheader-message 6 "Boostrapping nnml marks...")
+       (nnheader-message 6 "Bootstrapping nnml marks...")
        (setq nnml-marks (gnus-info-marks info))
        (push (cons 'read (gnus-info-read info)) nnml-marks)
        (nnml-save-marks group server)))))
index f9af0e8..61c1e9b 100644 (file)
@@ -204,8 +204,8 @@ To use the description in headers, put this name into `nnmail-extra-headers'.")
                    (format "<%d@%s.nnrss>" (car e) group)
                    "\t" ;; id
                    "\t" ;; refs
-                   "0" "\t" ;; chars
-                   "0" "\t" ;; lines
+                   "-1" "\t" ;; chars
+                   "-1" "\t" ;; lines
                    "" "\t" ;; Xref
                    (if (and (nth 6 e)
                             (memq nnrss-description-field
@@ -262,7 +262,12 @@ To use the description in headers, put this name into `nnmail-extra-headers'.")
          (insert "\n")
          (if (nth 6 e)
              (let ((point (point)))
-               (insert (nnrss-string-as-multibyte (nth 6 e)) "\n\n")
+               (insert (nnrss-string-as-multibyte (nth 6 e)))
+               (goto-char point)
+               (while (search-forward "\n" nil t)
+                 (delete-char -1))
+               (goto-char (point-max))
+               (insert "\n\n")
                (fill-region point (point))))
          (if (nth 2 e)
              (insert (nth 2 e) "\n")))))
index 90c9d5d..760ef75 100644 (file)
@@ -63,9 +63,12 @@ and `altavista'.")
 (defvar nnweb-type-definition
   '(
     (dejanews ;; bought by google.com
-     (article . nnweb-google-wash-article)
-     (id . "http://groups.google.com/groups?as_umsgid=%s")
-     (reference . nnweb-google-reference)
+     ;;(article . nnweb-google-wash-article)
+     ;;(id . "http://groups.google.com/groups?as_umsgid=%s")
+     (article . ignore)
+     (id . "http://groups.google.com/groups?selm=%s&output=gplain")
+     ;;(reference . nnweb-google-reference)
+     (reference . identity)
      (map . nnweb-google-create-mapping)
      (search . nnweb-google-search)
      (address . "http://groups.google.com/groups")
@@ -189,7 +192,7 @@ and `altavista'.")
                       (when (string-match "^<\\(.*\\)>$" article)
                         (setq art (match-string 1 article)))
                       (when (and fetch art)
-                        (setq url (format fetch article))
+                        (setq url (format fetch art))
                         (mm-with-unibyte-current-buffer
                           (nnweb-fetch-url url))
                         (if (nnweb-definition 'reference t)
@@ -197,8 +200,7 @@ and `altavista'.")
                                   (funcall (nnweb-definition
                                             'reference) article)))))))
        (unless nnheader-callback-function
-         (funcall (nnweb-definition 'article))
-         (nnweb-decode-entities))
+         (funcall (nnweb-definition 'article)))
        (nnheader-report 'nnweb "Fetched article %s" article)
        (cons group (and (numberp article) article))))))
 
@@ -574,6 +576,7 @@ and `altavista'.")
        (while (search-forward "," nil t)
          (replace-match " " t t)))
       (widen)
+      (nnweb-decode-entities)
       (set-marker body nil))))
 
 (defun nnweb-reference-search (search)
@@ -678,7 +681,8 @@ and `altavista'.")
       (while (re-search-forward "<A.*\\?id@\\([^\"]+\\)\">[0-9]+</A>" nil t)
        (replace-match "&lt;\\1&gt; " t)))
     (widen)
-    (nnweb-remove-markup)))
+    (nnweb-remove-markup)
+    (nnweb-decode-entities)))
 
 (defun nnweb-altavista-search (search &optional part)
   (url-insert-file-contents
@@ -733,7 +737,7 @@ and `altavista'.")
        (case-fold-search t)
        (active (cadr (assoc nnweb-group nnweb-group-alist)))
        Subject Score Date Newsgroups From
-       map url)
+       map url mid)
     (unless active
       (push (list nnweb-group (setq active (cons 1 0))
                  nnweb-type nnweb-search)
@@ -741,10 +745,10 @@ and `altavista'.")
     ;; Go through all the article hits on this page.
     (goto-char (point-min))
     (while (re-search-forward
-           "a href=/groups\\(\\?[^ \">]*selm=[^ \">]*\\)" nil t)
-      (setq url
-           (concat (nnweb-definition 'address)
-                   (match-string 1)))
+           "a href=/groups\\(\\?[^ \">]*selm=\\([^ &\">]+\\)\\)" nil t)
+      (setq mid (match-string 2)
+           url (format 
+                "http://groups.google.com/groups?selm=%s&output=gplain" mid))
       (narrow-to-region (search-forward ">" nil t)
                        (search-forward "</a>" nil t))
       (nnweb-remove-markup)
@@ -779,7 +783,7 @@ and `altavista'.")
           (cdr active) (if Newsgroups
                            (concat  "(" Newsgroups ") " Subject)
                          Subject)
-          From Date Message-ID
+          From Date (or Message-ID mid)
           nil 0 0 url))
         map)
        (nnweb-set-hashtb (cadar map) (car map))))
@@ -827,7 +831,7 @@ and `altavista'.")
 
 (defun nnweb-google-identity (url)
   "Return an unique identifier based on URL."
-  (if (string-match "seld=\\([0-9]+\\)" url)
+  (if (string-match "selm=\\([^ &>]+\\)" url)
       (match-string 1 url)
     url))
 
index 9a5fc61..e3cc299 100644 (file)
@@ -1,3 +1,29 @@
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+
+       * gnus.texi (Mail Spool): Add marks.
+       (MH Spool): Doesn't use marks file.
+       (Mail Folders): Add marks.
+
+2001-08-25  Simon Josefsson  <jas@extundo.com>
+       From Henrik Enberg <henrik@enberg.org>
+
+       * gnus.texi (Group Parameters): Fix.
+
+2001-08-24 16:03:31  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Group Parameters): Fix.
+
+2001-08-24  Simon Josefsson  <jas@extundo.com>
+
+       * Makefile.in (latexps): Make tmps.
+
+2001-08-24  Simon Josefsson  <jas@extundo.com>
+       From Jesper Harder <harder@ifa.au.dk>
+
+       * Makefile.in (latexps): Escape {.
+
+       * splitindex: Ditto.
+
 2001-08-23 19:22:59  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * gnus.texi (Group Parameters): Fix.
index a2fea5c..0e42c1b 100644 (file)
@@ -113,7 +113,7 @@ texi2latex.elc: texi2latex.el
 latex gnus.latexi gnus-faq.latexi: $(srcdir)/gnus.texi $(srcdir)/gnus-faq.texi texi2latex.elc
        srcdir=$(srcdir) $(EMACSCOMP) -l ./texi2latex.elc -f latexi-translate
 
-latexps: gnus.latexi
+latexps: gnus.latexi tmps
        $(MAKE) texi2latex.elc
        rm -f gnus.aux
        egrep -v "label.*Index|chapter.*Index" gnus.latexi > gnus.tmplatexi1
@@ -124,7 +124,7 @@ latexps: gnus.latexi
        makeindex -o gnus.gind gnus.gidx
        sed 's/\\char 5E\\relax {}/\\symbol{"5E}/' < gnus.kind > gnus.tmpkind
        mv gnus.tmpkind gnus.kind
-       egrep -v "end{document}" gnus.tmplatexi1 > gnus.tmplatexi
+       egrep -v "end\{document\}" gnus.tmplatexi1 > gnus.tmplatexi
        cat postamble.tex >> gnus.tmplatexi
        $(LATEX) gnus.tmplatexi
        $(LATEX) gnus.tmplatexi
@@ -134,7 +134,7 @@ pss:
        $(MAKE) latex
        $(MAKE) latexps
 
-psout:
+psout: tmps
        $(MAKE) latex
        $(MAKE) latexboth
        $(MAKE) out
index 6a0a5e9..917c0fc 100644 (file)
@@ -2820,8 +2820,8 @@ kiboze \e$B%0%k!<%W$r:n@.$7$^$9!#%W%m%s%W%H$GL>A0$H!"\e(Bkiboze \e$B%0%k!<%W$K!V4^$
 \e$B$$$/$D$+Nc$r5s$2$^$9\e(B:
 
 @table @code
-@item [unread]
-\e$BL$FI$N5-;v$@$1$rI=<($7$^$9!#\e(B
+@item [read]
+\e$B4{FI$N5-;v$@$1$rI=<($7$^$9!#\e(B
 
 @item [not expire]
 \e$B4|8B@Z$l>C5n2DG=$J5-;v0J30$N$9$Y$F$rI=<($7$^$9!#\e(B
@@ -10767,7 +10767,7 @@ Emacs \e$B$N%;%C%7%g%sA4BN$r%i%C%W$7$F!"%G%#%U%)%k%H$N%a%=%C%I$r;H$&$H$$$&$N\e(B
 
 @item nntp-via-envuser
 @vindex nntp-via-envuser
-\e$B$b$7Hs\e(B-@code{nil}\e$B$J$i!"Cf4V$N\e(B @code{telnet} \e$B$N%;%C%7%g%s\e(B (\e$B%/%i%$%"%s%H$H\e(B
+\e$B$b$7Hs\e(B@code{nil}\e$B$J$i!"Cf4V$N\e(B @code{telnet} \e$B$N%;%C%7%g%s\e(B (\e$B%/%i%$%"%s%H$H\e(B
 \e$B%5!<%P!<$NN>J}\e(B) \e$B$G\e(B @code{ENVIRON} \e$B%*%W%7%g%s$r%5%]!<%H$7!"%m%0%$%sL>$NF~\e(B
 \e$BNO$rMW5a$7$^$;$s!#$3$l$ONc$($P\e(B Solaris \e$B$N\e(B @code{telnet} \e$B$GF0:n$7$^$9!#\e(B
 
@@ -12458,6 +12458,17 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#4{DjCM\e(B
 \e$B$N\e(B @sc{nov} \e$B%G!<%?%Y!<%9$b:n@.$7$J$1$l$P$J$j$^$;$s!#$3$l$N$?$a$K!"%a!<%k\e(B
 \e$B$rFI$`;v$K4X$7$F$O:GB.$N%P%C%/%(%s%I$K$J$j$^$9!#\e(B
 
+@cindex self contained nnml servers
+\e$B0u%U%!%$%k\e(B (\e$BLuCm\e(B: marks file) \e$B$,;H$o$l$k$H\e(B (\e$B$=$l$,%G%#%U%)%k%H$G$9$,\e(B)\e$B!"\e(B
+@code{nnml} \e$B%5!<%P!<$O\e(B @code{tar} \e$B$J$I$r;H$C$F%P%C%/%"%C%W$7$?$j!"8e$G$"\e(B
+\e$B$J$?$,IU$1$?0u$,$9$Y$FJ]$?$l$?>uBV$G\e(B gnus \e$B$KLa$9\e(B (\e$BK\Mh$N\e(B @code{nnml} \e$B%5!<\e(B
+\e$B%P!<$K$h$C$FDI2C$9$k\e(B) \e$B$3$H$,$G$-$kFC<A$r;}$D$h$&$K$J$j$^$9!#%0%k!<%W$N0u\e(B
+\e$B$O$=$l$>$l$N\e(B @code{nnml} \e$B%0%k!<%W$N%G%#%l%/%H%jFb$N!"DL\e(B
+\e$B>o\e(B @code{.marks} \e$B%U%!%$%k\e(B (@code{nnml-marks-file-name} \e$B$r;2>H\e(B) \e$B$K3JG<$5\e(B
+\e$B$l$^$9!#$^$?!"8D!9$N\e(B @code{nnml} \e$B%0%k!<%W$K$D$$$F$b%P%C%/%"%C%W$9$k$3$H\e(B
+\e$B$,2DG=$G!"\e(B(\e$B%P%C%/%"%C%W$r\e(B nnml \e$B%G%#%l%/%$%H%j$KLa$7$?8e$G\e(B) @kbd{G m} \e$B%-!<\e(B
+\e$B$r;H$C$F$=$N%0%k!<%W$r85$KLa$7$^$9!#\e(B
+
 \e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
 
 @table @code
@@ -12493,6 +12504,15 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#4{DjCM\e(B
 @item nnml-prepare-save-mail-hook
 @vindex nnml-prepare-save-mail-hook
 \e$BJ]B8$9$kA0$K5-;v$KHO0O$r69$a$F<B9T$9$k%U%C%/$G$9!#\e(B
+
+@item nnml-marks-is-evil
+@vindex nnml-marks-is-evil
+\e$BHs\e(B@code{nil} \e$B$G$"$k$H!"$3$N%P%C%/%(%s%I$O$$$+$J$k\e(B @sc{\e$B0u\e(B} \e$B%U%!%$%k$bL5;k\e(B
+\e$B$7$^$9!#%G%#%U%)%k%H$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item nnml-marks-file-name
+@vindex nnml-marks-file-name
+@sc{\e$B0u\e(B} \e$B%U%!%$%k$NL>A0$G$9!#%G%#%U%)%k%H$O\e(B @file{.marks} \e$B$G$9!#\e(B
 @end table
 
 @findex nnml-generate-nov-databases
@@ -12509,7 +12529,7 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#4{DjCM\e(B
 @cindex mh-e mail spool
 
 @code{nnmh} \e$B$O!"\e(B@sc{nov} \e$B%G!<%?%Y!<%9$r:n$i$J$$$3$H$H%"%/%F%#%V%U%!%$%k\e(B
-\e$B$rJ];}$7$J$$;v$r=|$$$F!"\e(B@code{nnml} \e$B$H;w$F$$$^$9!#$=$N$3$H\e(B
+\e$B$d0u%U%!%$%k$rJ];}$7$J$$;v$r=|$$$F!"\e(B@code{nnml} \e$B$H;w$F$$$^$9!#$=$N$3$H\e(B
 \e$B$O\e(B @code{nnmh} \e$B$r\e(B @code{nnml} \e$B$h$j\e(B @emph{\e$B$+$J$j\e(B} \e$BCY$$%P%C%/%(%s%I$K$7$F\e(B
 \e$B$$$^$9$,!"$=$l$O\e(B procmail \e$B$N%9%/%j%W%H$r=q$/$?$a$K$:$C$H$d$j$d$9$/$J$C$F\e(B
 \e$B$b$$$^$9!#\e(B
@@ -12548,6 +12568,17 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#4{DjCM\e(B
 @code{nnfolder} \e$B$O5-;vHV9f$HE~CeF|$r5-O?$7$F$*$/$?$a$NDI2C$N%X%C%@!<$r2C\e(B
 \e$B$($^$9!#\e(B
 
+@cindex self contained nnfolder servers
+\e$B0u%U%!%$%k\e(B (\e$BLuCm\e(B: marks file) \e$B$,;H$o$l$k$H\e(B (\e$B$=$l$,%G%#%U%)%k%H$G$9$,\e(B)\e$B!"\e(B
+@code{nnfolder} \e$B%5!<%P!<$O\e(B @code{tar} \e$B$J$I$r;H$C$F%P%C%/%"%C%W$7$?$j!"8e\e(B
+\e$B$G$"$J$?$,IU$1$?0u$,$9$Y$FJ]$?$l$?>uBV$G\e(B gnus \e$B$KLa$9\e(B (\e$BK\Mh\e(B
+\e$B$N\e(B @code{nnfolder} \e$B%5!<%P!<$K$h$C$FDI2C$9$k\e(B) \e$B$3$H$,$G$-$kFC<A$r;}$D$h$&\e(B
+\e$B$K$J$j$^$9!#%0%k!<%W$N0u$O\e(B @code{nnfolder} \e$B%G%#%l%/%H%jFb$N!"\e(Bmbox \e$B%U%!%$\e(B
+\e$B%k$KDL>o\e(B @code{.mrk} (@code{nnfolder-marks-file-name} \e$B$r;2>H\e(B) \e$B$,IU2C$5$l\e(B
+\e$B$?L>A0$N%U%!%$%k$K3JG<$5$l$^$9!#$^$?!"8D!9$N\e(B @code{nnfolder} \e$B%0%k!<%W$K\e(B
+\e$B$D$$$F$b%P%C%/%"%C%W$9$k$3$H$,2DG=$G!"\e(B(\e$B%P%C%/%"%C%W$r\e(B nnfolder \e$B%G%#%l%/\e(B
+\e$B%$%H%j$KLa$7$?8e$G\e(B) @kbd{G m} \e$B%-!<$r;H$C$F$=$N%0%k!<%W$r85$KLa$7$^$9!#\e(B
+
 \e$B;v<B>e$N%5!<%P!<$N@_Dj\e(B:
 
 @table @code
@@ -12596,6 +12627,19 @@ rmail box \e$B$N$?$a$N%"%/%F%#%V%U%!%$%k$NL>A0!#4{DjCM\e(B
 @vindex nnfolder-nov-is-evil
 \e$B$b$7Hs\e(B@code{nil}\e$B$J$i!"$3$N%P%C%/%(%s%I$O\e(B @sc{nov} \e$B%U%!%$%k$rL5;k$7$^$9!#\e(B
 \e$B4{DjCM$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item nnfolder-nov-file-suffix
+@vindex nnfolder-nov-file-suffix
+@sc{nov} \e$B%U%!%$%k$N3HD%;R$G$9!#%G%#%U%)%k%H$O\e(B @file{.nov} \e$B$G$9!#\e(B
+
+@item nnfolder-marks-is-evil
+@vindex nnfolder-marks-is-evil
+\e$BHs\e(B@code{nil} \e$B$G$"$k$H!"$3$N%P%C%/%(%s%I$O$$$+$J$k\e(B @sc{\e$B0u\e(B} \e$B%U%!%$%k$r$b\e(B
+\e$BL5;k$7$^$9!#%G%#%U%)%k%H$O\e(B @code{nil} \e$B$G$9!#\e(B
+
+@item nnfolder-marks-file-suffix
+@vindex nnfolder-marks-file-suffix
+@sc{\e$B0u\e(B} \e$B%U%!%$%k$N3HD%;R$G$9!#%G%#%U%)%k%H$O\e(B @file{.mrk} \e$B$G$9!#\e(B
 @end table
 
 @findex nnfolder-generate-active-file
@@ -14226,7 +14270,7 @@ nnimap \e$B$O$=$l$b%5%]!<%H$7$^$9!#$7$+$7!"\e(BSSLeay \e$B$N:G?7HG$G$"$k\e(B 0.9.x \e
 @item nnimap-importantize-dormant
 @vindex nnimap-importantize-dormant
 
-\e$BHs\e(B-nil \e$B$@$C$?$i!"B>$N\e(B IMAP \e$B%/%i%$%"%s%H$N$?$a$KJ]N15-;v$r0uIU$-$H$7$F$b\e(B
+\e$BHs\e(B nil \e$B$@$C$?$i!"B>$N\e(B IMAP \e$B%/%i%$%"%s%H$N$?$a$KJ]N15-;v$r0uIU$-$H$7$F$b\e(B
 \e$B0u$rIU$1$^$9!#\e(Bgnus \e$B$NFbIt$G$O!"J]N15-;v$O85!9$9$G$K0uIU$-$H$7$F$N$_0u$,\e(B
 \e$BIU$1$i$l$F$$$^$9!#$3$l$O!"B>$N\e(B IMAP \e$B%/%i%$%"%s%H$K$*$1$kJ]N15-;v$r!"$"$?\e(B
 \e$B$+$b0uIU$-$N$h$&$K$-$oN)$?$;$^$9!#\e(B(\e$BJL$N8@$$J}$r$9$k$H!"\e(Bgnus \e$B$OFs$D$N0u$r\e(B
index a076e8f..d9130a5 100644 (file)
@@ -2735,8 +2735,8 @@ Display articles that satisfy a predicate.
 Here are some examples:
 
 @table @code
-@item [unread]
-Display only unread articles.
+@item [read]
+Display only read articles.
 
 @item [not expire]
 Display everything except expirable articles.
@@ -2766,7 +2766,7 @@ gnus, but provide a place for you to store information on particular
 groups.
 
 @item charset
-@item charset
+@cindex charset
 Elements that look like @code{(charset . iso-8859-1)} will make
 @code{iso-8859-1} the default charset; that is, the charset that will be
 used for all articles that do not specify a charset.
@@ -2774,7 +2774,7 @@ used for all articles that do not specify a charset.
 See also @code{gnus-group-charset-alist}.
 
 @item ignored-charsets
-@item ignored-charset
+@cindex ignored-charset
 Elements that look like @code{(ignored-charsets x-known iso-8859-1)}
 will make @code{iso-8859-1} and @code{x-unknown} ignored; that is, the
 default charset will be used for decoding articles.
@@ -13044,6 +13044,17 @@ splitting.  It has to create lots of files, and it also generates
 @sc{nov} databases for the incoming mails.  This makes it the fastest
 backend when it comes to reading mail.
 
+@cindex self contained nnml servers
+When the marks file is used (which it is by default), @code{nnml}
+servers have the property that you may backup them using @code{tar} or
+similar, and later be able to restore them into Gnus (by adding the
+proper @code{nnml} server) and have all your marks be preserved.  Marks
+for a group is usually stored in the @code{.marks} file (but see
+@code{nnml-marks-file-name}) within each @code{nnml} group's directory.
+Individual @code{nnml} groups are also possible to backup, use @kbd{G m}
+to restore the group (after restoring the backup into the nnml
+directory).
+
 Virtual server settings:
 
 @table @code
@@ -13051,7 +13062,7 @@ Virtual server settings:
 @vindex nnml-directory
 All @code{nnml} directories will be placed under this directory.
 The default is the value of `message-directory' (whose default value is
-@file{~/Mail})
+@file{~/Mail}).
 
 @item nnml-active-file
 @vindex nnml-active-file
@@ -13066,12 +13077,12 @@ Format}.  The default is @file{~/Mail/newsgroups"}.
 @item nnml-get-new-mail
 @vindex nnml-get-new-mail
 If non-@code{nil}, @code{nnml} will read incoming mail.  The default is
-@code{t}
+@code{t}.
 
 @item nnml-nov-is-evil
 @vindex nnml-nov-is-evil
 If non-@code{nil}, this backend will ignore any @sc{nov} files.  The
-default is @code{nil}
+default is @code{nil}.
 
 @item nnml-nov-file-name
 @vindex nnml-nov-file-name
@@ -13081,6 +13092,15 @@ The name of the @sc{nov} files.  The default is @file{.overview}.
 @vindex nnml-prepare-save-mail-hook
 Hook run narrowed to an article before saving.
 
+@item nnml-marks-is-evil
+@vindex nnml-marks-is-evil
+If non-@code{nil}, this backend will ignore any @sc{marks} files.  The
+default is @code{nil}.
+
+@item nnml-marks-file-name
+@vindex nnml-marks-file-name
+The name of the @sc{marks} files.  The default is @file{.marks}.
+
 @end table
 
 @findex nnml-generate-nov-databases
@@ -13099,9 +13119,9 @@ Commands}).
 @cindex mh-e mail spool
 
 @code{nnmh} is just like @code{nnml}, except that is doesn't generate
-@sc{nov} databases and it doesn't keep an active file.  This makes
-@code{nnmh} a @emph{much} slower backend than @code{nnml}, but it also
-makes it easier to write procmail scripts for.
+@sc{nov} databases and it doesn't keep an active file or marks file.
+This makes @code{nnmh} a @emph{much} slower backend than @code{nnml},
+but it also makes it easier to write procmail scripts for.
 
 Virtual server settings:
 
@@ -13139,6 +13159,18 @@ file.  Each file is in the standard Un*x mbox format.  @code{nnfolder}
 will add extra headers to keep track of article numbers and arrival
 dates.
 
+@cindex self contained nnfolder servers
+When the marks file is used (which it is by default), @code{nnfolder}
+servers have the property that you may backup them using @code{tar} or
+similar, and later be able to restore them into Gnus (by adding the
+proper @code{nnfolder} server) and have all your marks be preserved.
+Marks for a group is usually stored in a file named as the mbox file
+with @code{.mrk} concatenated to it (but see
+@code{nnfolder-marks-file-suffix}) within the @code{nnfolder} directory.
+Individual @code{nnfolder} groups are also possible to backup, use
+@kbd{G m} to restore the group (after restoring the backup into the
+@code{nnfolder} directory).
+
 Virtual server settings:
 
 @table @code
@@ -13188,6 +13220,19 @@ extract some information from it before removing it.
 If non-@code{nil}, this backend will ignore any @sc{nov} files.  The
 default is @code{nil}.
 
+@item nnfolder-nov-file-suffix
+@vindex nnfolder-nov-file-suffix
+The extension for @sc{nov} files.  The default is @file{.nov}.
+
+@item nnfolder-marks-is-evil
+@vindex nnfolder-marks-is-evil
+If non-@code{nil}, this backend will ignore any @sc{marks} files.  The
+default is @code{nil}.
+
+@item nnfolder-marks-file-suffix
+@vindex nnfolder-marks-file-suffix
+The extension for @sc{marks} files.  The default is @file{.mrk}.
+
 @end table
 
 
index 956ad3d..cfd568c 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 match='M-x |(Group)|(Summary)|(Article)|(Server)|(Browse)|(Post)|(Mail)|(Score)|(Binary)|(Topic)|(Pick)'
-fun='{gnus-|{nn.*-|{grouplens-'
+fun='\{gnus-|\{nn.*-|\{grouplens-'
 egrep "$match" gnus.idx > gnus.kidx
 egrep "$fun" gnus.idx > gnus.gidx
 egrep -v "$match|$fun" gnus.idx > gnus.cidx