T-gnus 6.15.3 revision 02. t-gnus-6_15_3-02
authoryamaoka <yamaoka>
Thu, 14 Jun 2001 08:21:05 +0000 (08:21 +0000)
committeryamaoka <yamaoka>
Thu, 14 Jun 2001 08:21:05 +0000 (08:21 +0000)
Feedback the improvement of nnshimbun from the branch `t-gnus-6_15-quimby'.

ChangeLog
lisp/gnus-group.el
lisp/gnus-vers.el
lisp/gnus.el
lisp/nnshimbun.el
texi/gnus-ja.texi
texi/message-ja.texi

index ec84027..c014447 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,142 @@
+2001-06-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/gnus-vers.el (gnus-revision-number): Increment to 02.
+
+2001-06-14  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Use
+       `nnshimbun-find-parameter'.
+       (nnshimbun-generate-nov-database): Bind a full group name while
+       processing.
+       (nnshimbun-find-parameter): New implementation to refer to the
+       nnshimbun group parameters.
+       (nnshimbun-index-range): Add a document that it's just a default.
+       (nnshimbun-pre-fetch-article): Ditto.
+       (nnshimbun-group-parameters): Specify a parameter type as `list'.
+       (TopLevel): Remove the local variable "-*- coding: junet; -*-".
+
+2001-06-13  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-group-parameters): New group
+       parameter.  It also provides the user option
+       `nnshimbun-group-parameters-alist' and the function
+       `nnshimbun-find-group-parameters'.
+       (nnshimbun-group-parameters-custom): New variable.
+       (TopLevel): Require `gnus' expressly.
+
+2001-06-12  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-find-parameter): New macro.
+       (nnshimbun-generate-nov-database): Use `nnshimbun-find-parameter'.
+       (nnshimbun-request-expire-articles): Fixed.
+
+2001-06-12  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (Gnus-p): Use `file-exists-p' instead of
+       `locate-library' to check for the existence of mailcap.el in the
+       same directory of gnus.el.
+       (nnshimbun-retrieve-headers-with-nov): Remove a redundant check
+       that I made.
+
+2001-06-11  Akihiro Arisawa  <ari@atesoft.advantest.co.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Fix
+       inhibiting the expiring when `nnshimbun-keep-unparsable-dated-articles'
+       is nil.
+
+2001-06-11  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/gnus-group.el (toplevel): Removed autoload code for
+       "nnshimbun".
+
+       * texi/gnus-ja.texi (Web Newspaper): Add documents about
+       `nnshimbun-index-range'.
+
+2001-06-11  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Don't
+       refer to the variable `nnshimbun-keep-last-article', we should
+       keep the last article anyway.
+       (nnshimbun-keep-last-article): Abolished.
+
+       * lisp/gnus.el: Autoload "nnshimbun" for the command `gnus-group-
+       make-shimbun-group'.
+
+2001-06-11  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el: Remove some garbage.
+
+2001-06-10  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * texi/message-ja.texi: Use `iso-2022-7bit' instead of
+       `iso-2022-7bit-ss2' to keep a compatibility between XEmacsen and
+       FSF Emacsen.
+       * texi/gnus-ja.texi: Ditto.
+
+2001-06-09  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (top-level): Updated comments.
+       (nnshimbun): New customize group.
+       (nnshimbun-keep-last-article): Defined as customize variable.
+       (nnshimbun-keep-unparsable-dated-articles): Ditto.
+       (nnshimbun-insert-nov): Use `when' instead of `if'.
+       (gnus-group-shimbun-server-history): Imported from
+       `gnus-group.el'.
+       (gnus-group-make-shimbun-group): Ditto.
+
+       * lisp/gnus-group.el (gnus-group-make-shimbun-group): Its real
+       definition is moved to `nnshimbun.el' and autload code is added.
+       (gnus-group-shimbun-server-history): Its definition is moved to
+       `nnshimbun.el'.
+
+2001-06-08  TSUCHIYA Masatoshi  <tsuchiya@pine.kuee.kyoto-u.ac.jp>
+
+       * lisp/nnshimbun.el (nnshimbun-use-entire-index): Removed.
+       (nnshimbun-index-range): New variable.
+       (nnshimbun-close-server): Check status strictly to close server
+       safely.
+       (nnshimbun-generate-nov-database): Refer the group paramter
+       `nnshimbun-index-range' as the second parameter of
+       `shimbun-headers'.
+       (shimbun-mua-use-entire-index): Removed.
+       (nnshimbun-request-article-1): Replace a date string in
+       `gnus-newsgroup-data' only when article header has non-nil value.
+       (nnshimbun-insert-nov): Fixed condition to decide whether
+       `X-Nnshimbun-Id' should be inseted or not.
+
+2001-06-08  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-expire-nov-databases): Removed.
+       (nnshimbun-request-expire-articles): Simplified; refer to the
+       shimbun's default expiration days.
+
+2001-06-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Prefer the
+       group parameter `expiry-wait' when expiring a closed group.
+
+2001-06-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-request-article-1): Replace a date
+       string in `gnus-newsgroup-data' based on the newly retrieved
+       article.
+
+2001-06-07  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Fix
+       inhibiting the expiring.
+
+2001-06-06  Katsumi Yamaoka <yamaoka@jpl.org>
+
+       * lisp/nnshimbun.el (nnshimbun-expire-nov-databases): New command.
+       (nnshimbun-request-expire-articles): New function.
+       (nnshimbun-keep-unparsable-dated-articles): New variable.
+       (nnshimbun-keep-last-article): New variable.
+       (nnshimbun-insert-nov): Rewrite using `nnshimbun-string-or'.
+       (nnshimbun-string-or): New macro.
+       (nnshimbun-tmp-string): New internal variable.
+       (TopLevel): Require `message' for `message-make-date'.
+
 2001-05-30  Katsumi Yamaoka <yamaoka@jpl.org>
 
        * lisp/gnus-clfns.el (find-cl-run-time-functions): Remove a
index ff81bf7..11ab2d5 100644 (file)
@@ -2426,43 +2426,6 @@ If SOLID (the prefix), create a solid group."
                       (nnwarchive-login ,login))))
     (gnus-group-make-group group method)))
 
-(defvar gnus-group-shimbun-server-history nil)
-
-(defun gnus-group-make-shimbun-group ()
-  "Create a nnshimbun group."
-  (interactive)
-  (require 'nnshimbun)
-  (let* ((minibuffer-setup-hook
-         (append minibuffer-setup-hook '(beginning-of-line)))
-        (alist
-         (apply 'nconc
-                (mapcar
-                 (lambda (d)
-                   (and (stringp d)
-                        (file-directory-p d)
-                        (delq nil
-                              (mapcar
-                               (lambda (f)
-                                 (and (string-match "^sb-\\(.*\\)\\.el$" f)
-                                      (list (match-string 1 f))))
-                               (directory-files d)))))
-                 load-path)))
-        (server (completing-read
-                 "Shimbun address: " 
-                 alist nil t
-                 (or (car gnus-group-shimbun-server-history)
-                     (caar alist))
-                 'gnus-group-shimbun-server-history))
-        (groups)
-        (nnshimbun-pre-fetch-article))
-    (require (intern (concat "sb-" server)))
-    (when (setq groups (intern-soft (concat "shimbun-" server "-groups")))
-      (gnus-group-make-group
-       (completing-read "Group name: "
-                       (mapcar 'list (symbol-value groups))
-                       nil t nil)
-       (list 'nnshimbun server)))))
-
 (defun gnus-group-make-archive-group (&optional all)
   "Create the (ding) Gnus archive group of the most recent articles.
 Given a prefix, create a full group."
index 84cc3ee..748bf43 100644 (file)
@@ -34,7 +34,7 @@
 (require 'product)
 (provide 'gnus-vers)
 
-(defconst gnus-revision-number "01"
+(defconst gnus-revision-number "02"
   "Revision number for this version of gnus.")
 
 ;; Product information of this gnus.
index 4995820..60ff855 100644 (file)
@@ -2123,6 +2123,9 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
             (subrp (symbol-function 'base64-encode-string)))
   (require 'base64))
 
+;; To make shimbun groups.
+(autoload 'gnus-group-make-shimbun-group "nnshimbun" nil t)
+
 ;; A tool for the developers.
 (autoload 'find-cl-run-time-functions "gnus-clfns" nil t)
 
index 3c48b1a..27e7229 100644 (file)
@@ -1,4 +1,4 @@
-;;; nnshimbun.el --- interfacing with web newspapers -*- coding: junet; -*-
+;;; nnshimbun.el --- interfacing with web newspapers
 
 ;; Authors: TSUCHIYA Masatoshi <tsuchiya@namazu.org>,
 ;;          Akihiro Arisawa    <ari@atesoft.advantest.co.jp>,
 ;;     http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/
 
 ;; If you would like to use this module in Gnus (not T-gnus), put this
-;; file into the lisp/ directory in the Gnus source tree and run
-;; `make install'.  And then, copy the function definition of
-;; `gnus-group-make-shimbun-group' from the file gnus-group.el of
-;; T-gnus to somewhere else, for example .gnus file as follows:
+;; file into the lisp/ directory in the Gnus source tree and run `make
+;; install'.  And then, put the following expression into your ~/.gnus.
 ;;
-;;(eval-after-load "gnus-group"
-;;  '(if (not (fboundp 'gnus-group-make-shimbun-group))
-;;       (defun gnus-group-make-shimbun-group ()
-;;         "Create a nnshimbun group."
-;;         [...a function definition...])))
+;; (autoload 'gnus-group-make-shimbun-group "nnshimbun" nil t)
 
-;;; Definitions:
 
-(gnus-declare-backend "nnshimbun" 'address)
+;;; Definitions:
 
 (eval-when-compile (require 'cl))
-
 (require 'nnheader)
 (require 'nnmail)
 (require 'nnoo)
+(require 'gnus)
 (require 'gnus-bcklg)
 (require 'shimbun)
-
-
+(require 'message)
+
+
+;; Customize variables
+(defgroup nnshimbun nil
+  "Reading Web Newspapers with Gnus."
+  :group 'gnus)
+
+(defvar nnshimbun-group-parameters-custom
+  '(list :format "%v"
+        (checklist :inline t
+                   (list :inline t :format "%v"
+                         (const :format "" index-range)
+                         (choice :tag "Index range"
+                                 :value all
+                                 (const all)
+                                 (const last)
+                                 (integer :tag "days")))
+                   (list :inline t :format "%v"
+                         (const :format "" prefetch-articles)
+                         (boolean :tag "Prefetch articles"
+                                  :on "on"
+                                  :off "off"))
+                   (list :inline t :format "%v"
+                         (const :format "" expiry-wait)
+                         (choice :tag "Expire wait"
+                                 :value never
+                                 (const never)
+                                 (const immediate)
+                                 (number :tag "days"))))
+        (repeat :inline t :tag "Others"
+                (list :inline t :format "%v"
+                      (symbol :tag "Keyword")
+                      (sexp :tag "Value"))))
+  "A type definition for customizing the nnshimbun group parameters.")
+
+;; The following definition provides the group parameter
+;; `nnshimbun-group-parameters', the user option
+;; `nnshimbun-group-parameters-alist' and the function
+;; `nnshimbun-find-group-parameters'.
+;; The group parameter `nnshimbun-group-parameters' will have a
+;; property list like the following:
+;;
+;; '(index-range all prefetch-articles t expiry-wait 6)
+
+(gnus-define-group-parameter
+ nnshimbun-group-parameters
+ :type list
+ :function nnshimbun-find-group-parameters
+ :function-document "\
+Return a nnshimbun GROUP's group parameters."
+ :variable nnshimbun-group-parameters-alist
+ :variable-default nil
+ :variable-document "\
+Alist of nnshimbun group parameters.  Each element should be a cons of
+a group name regexp and a plist which consists of a keyword and a value
+pairs like the following:
+
+'(\"^nnshimbun\\\\+asahi:\" index-range all prefetch-articles t expiry-wait 6)
+
+`index-range' specifies a range of header indices as described below:
+      all: Retrieve all header indices.
+     last: Retrieve the last header index.
+integer N: Retrieve N pages of header indices.
+
+`prefetch-articles' specifies whether to pre-fetch the unread articles
+when scanning the group.
+
+`expiry-wait' is similar to the generic group parameter `expiry-wait',
+but it has a preference."
+ :variable-group nnshimbun
+ :variable-type `(repeat (cons :format "%v" (regexp :tag "Group name regexp"
+                                                   :value "^nnshimbun\\+")
+                              ,nnshimbun-group-parameters-custom))
+ :parameter-type nnshimbun-group-parameters-custom
+ :parameter-document "\
+Group parameters for the nnshimbun group.
+
+`Index range' specifies a range of header indices as described below:
+      all: Retrieve all header indices.
+     last: Retrieve the last header index.
+integer N: Retrieve N pages of header indices.
+
+`Prefetch articles' specifies whether to pre-fetch the unread articles
+when scanning the group.
+
+`Expire wait' is similar to the generic group parameter `expiry-wait',
+but it has a preference.")
+
+(defcustom nnshimbun-keep-unparsable-dated-articles t
+  "*If non-nil, nnshimbun will never delete articles whose NOV date is unparsable."
+  :group 'nnshimbun
+  :type 'boolean)
+
+
+;; Define backend
+(gnus-declare-backend "nnshimbun" 'address)
 (nnoo-declare nnshimbun)
 
 (defvoo nnshimbun-directory (nnheader-concat gnus-directory "shimbun/")
 (defvoo nnshimbun-nov-file-name ".overview")
 
 (defvoo nnshimbun-pre-fetch-article nil
-  "*Non nil means that nnshimbun fetch unread articles when scanning groups.")
+  "*Non nil means that nnshimbun fetch unread articles when scanning
+groups.  Note that this variable has just a default value for all the
+nnshimbun groups.  You can specify the nnshimbun group parameter
+`prefecth-articles' for each nnshimbun group.")
 
-(defvoo nnshimbun-use-entire-index t
-  "*Nil means that nnshimbun check the last index of articles.")
+(defvoo nnshimbun-index-range nil
+  "*Range of indices to detect new pages.  Note that this variable has
+just a default value for all the nnshimbun groups.  You can specify
+the nnshimbun group parameter `index-range' for each nnshimbun group.")
 
 ;; set by nnshimbun-possibly-change-group
 (defvoo nnshimbun-buffer nil)
 ;;; backlog
 (defmacro nnshimbun-backlog (&rest form)
   `(let ((gnus-keep-backlog nnshimbun-keep-backlog)
-        (gnus-backlog-buffer (format " *nnshimbun backlog %s*" (nnoo-current-server 'nnshimbun)))
+        (gnus-backlog-buffer (format " *nnshimbun backlog %s*"
+                                     (nnoo-current-server 'nnshimbun)))
         (gnus-backlog-articles nnshimbun-backlog-articles)
         (gnus-backlog-hashtb nnshimbun-backlog-hashtb))
      (unwind-protect
   (push (list 'nnshimbun-shimbun
              (condition-case err
                  (shimbun-open server (luna-make-entity 'shimbun-gnus-mua))
-               (error (nnheader-report 'nnshimbun "%s" (error-message-string err)))))
+               (error (nnheader-report 'nnshimbun "%s" (error-message-string
+                                                        err)))))
        defs)
   ;; Set directory for server working files.
   (push (list 'nnshimbun-server-directory
   (cond
    ((not (file-exists-p nnshimbun-directory))
     (nnshimbun-close-server)
-    (nnheader-report 'nnshimbun "Couldn't create directory: %s" nnshimbun-directory))
+    (nnheader-report 'nnshimbun "Couldn't create directory: %s"
+                    nnshimbun-directory))
    ((not (file-directory-p (file-truename nnshimbun-directory)))
     (nnshimbun-close-server)
     (nnheader-report 'nnshimbun "Not a directory: %s" nnshimbun-directory))
     (cond
      ((not (file-exists-p nnshimbun-server-directory))
       (nnshimbun-close-server)
-      (nnheader-report 'nnshimbun "Couldn't create directory: %s" nnshimbun-server-directory))
+      (nnheader-report 'nnshimbun "Couldn't create directory: %s"
+                      nnshimbun-server-directory))
      ((not (file-directory-p (file-truename nnshimbun-server-directory)))
       (nnshimbun-close-server)
-      (nnheader-report 'nnshimbun "Not a directory: %s" nnshimbun-server-directory))
+      (nnheader-report 'nnshimbun "Not a directory: %s"
+                      nnshimbun-server-directory))
      (t
       (nnheader-report 'nnshimbun "Opened server %s using directory %s"
                       server nnshimbun-server-directory)
       t)))))
 
 (deffoo nnshimbun-close-server (&optional server)
-  (shimbun-close nnshimbun-shimbun)
-  (and (nnshimbun-server-opened server)
-       (gnus-buffer-live-p nnshimbun-buffer)
-       (kill-buffer nnshimbun-buffer))
+  (when (nnshimbun-server-opened server)
+    (when nnshimbun-shimbun
+      (shimbun-close nnshimbun-shimbun))
+    (when (gnus-buffer-live-p nnshimbun-buffer)
+      (kill-buffer nnshimbun-buffer)))
   (nnshimbun-backlog (gnus-backlog-shutdown))
   (nnshimbun-save-nov)
   (nnoo-close-server 'nnshimbun server)
 (eval-and-compile
   (let ((Gnus-p
         (eval-when-compile
-          (let ((gnus (locate-library "gnus"))
-                ;; Gnus has mailcap.el in the same directory of gnus.el.
-                (mailcap (locate-library "mailcap")))
-            (and gnus mailcap
-                 (string-equal (file-name-directory gnus)
-                               (file-name-directory mailcap)))))))
+          (let ((gnus (locate-library "gnus")))
+            (and gnus
+                 ;; Gnus has mailcap.el in the same directory of gnus.el.
+                 (file-exists-p (expand-file-name
+                                 "mailcap.el"
+                                 (file-name-directory gnus))))))))
     (if Gnus-p
        (progn
          (defmacro nnshimbun-mail-header-subject (header)
         (substring xref 6)
        xref))))
 
+(eval-when-compile
+  (require 'gnus-sum));; For the macro `gnus-summary-article-header'.
+
 (defun nnshimbun-request-article-1 (article &optional group server to-buffer)
   (if (nnshimbun-backlog
        (gnus-backlog-request-article
          (delete-region (point-min) (point-max))
          (shimbun-article nnshimbun-shimbun header)
          (when (> (buffer-size) 0)
+           ;; Kludge! replace a date string in `gnus-newsgroup-data'
+           ;; based on the newly retrieved article.
+           (let ((x (gnus-summary-article-header article)))
+             (when x
+               (mail-header-set-date x (shimbun-header-date header))))
            (nnshimbun-replace-nov-entry group article header original-id)
            (nnshimbun-backlog
              (gnus-backlog-enter-article group article (current-buffer)))
       (nnheader-report 'nnshimbun "Directory %s does not exist"
                       nnshimbun-current-directory))
      ((not (file-directory-p nnshimbun-current-directory))
-      (nnheader-report 'nnshimbun "%s is not a directory" nnshimbun-current-directory))
+      (nnheader-report 'nnshimbun "%s is not a directory"
+                      nnshimbun-current-directory))
      (dont-check
       (nnheader-report 'nnshimbun "Group %s selected" group)
       t)
          (forward-line -1)
          (setq end (ignore-errors (read (current-buffer)))
                lines (count-lines (point-min) (point-max))))
-       (nnheader-report 'nnshimbunw "Selected group %s" group)
+       (nnheader-report 'nnshimbun "Selected group %s" group)
        (nnheader-insert "211 %d %d %d %s\n"
                         lines (or beg 0) (or end 0) group))))))
 
 (defun nnshimbun-retrieve-headers-with-nov (articles &optional fetch-old)
   (if (or gnus-nov-is-evil nnshimbun-nov-is-evil)
       nil
-    (let ((nov (expand-file-name nnshimbun-nov-file-name nnshimbun-current-directory)))
+    (let ((nov (expand-file-name nnshimbun-nov-file-name
+                                nnshimbun-current-directory)))
       (when (file-exists-p nov)
        (save-excursion
          (set-buffer nntp-server-buffer)
            (nnheader-nov-delete-outside-range
             (if fetch-old (max 1 (- (car articles) fetch-old))
               (car articles))
-            (and articles (nth (1- (length articles)) articles)))
+            (nth (1- (length articles)) articles))
            t))))))
 
 
 
 ;;; Nov Database Operations
 
+(defvar nnshimbun-tmp-string nil
+  "Internal variable used to just a rest for a temporary string.  The
+macro `nnshimbun-string-or' uses it exclusively.")
+
+(defmacro nnshimbun-string-or (&rest strings)
+  "Return the first element of STRINGS that is a non-blank string.  It
+should run fast, especially if two strings are given.  Each string can
+also be nil."
+  (cond ((null strings)
+        nil)
+       ((= 1 (length strings))
+        ;; Return irregularly nil if one blank string is given.
+        `(unless (zerop (length (setq nnshimbun-tmp-string ,(car strings))))
+           nnshimbun-tmp-string))
+       ((= 2 (length strings))
+        ;; Return the second string when the first string is blank.
+        `(if (zerop (length (setq nnshimbun-tmp-string ,(car strings))))
+             ,(cadr strings)
+           nnshimbun-tmp-string))
+       (t
+        `(let ((strings (list ,@strings)))
+           (while strings
+             (setq strings (if (zerop (length (setq nnshimbun-tmp-string
+                                                    (car strings))))
+                               (cdr strings))))
+           nnshimbun-tmp-string))))
+
 (defsubst nnshimbun-insert-nov (number header &optional id)
-  (unless (and (stringp id)
-              (not (string= id (shimbun-header-id header))))
-    (setq id nil))
-  (princ number (current-buffer))
-  (let ((p (point)))
+  (insert "\n")
+  (backward-char 1)
+  (let ((header-id (nnshimbun-string-or (shimbun-header-id header)))
+       ;; Force `princ' to work in the current buffer.
+       (standard-output (current-buffer))
+       (xref (nnshimbun-string-or (shimbun-header-xref header)))
+       (start (point)))
+    (and (stringp id)
+        header-id
+        (string-equal id header-id)
+        (setq id nil))
+    (princ number)
     (insert
      "\t"
-     (or (shimbun-header-subject header) "(none)") "\t"
-     (or (shimbun-header-from header) "(nobody)") "\t"
-     (or (shimbun-header-date header) "") "\t"
-     (or (shimbun-header-id header) (nnmail-message-id)) "\t"
+     (nnshimbun-string-or (shimbun-header-subject header) "(none)") "\t"
+     (nnshimbun-string-or (shimbun-header-from header) "(nobody)") "\t"
+     (nnshimbun-string-or (shimbun-header-date header) (message-make-date))
+     "\t"
+     (or header-id (nnmail-message-id)) "\t"
      (or (shimbun-header-references header) "") "\t")
-    (princ (or (shimbun-header-chars header) 0) (current-buffer))
+    (princ (or (shimbun-header-chars header) 0))
     (insert "\t")
-    (princ (or (shimbun-header-lines header) 0) (current-buffer))
+    (princ (or (shimbun-header-lines header) 0))
     (insert "\t")
-    (when (shimbun-header-xref header)
-      (insert "Xref: " (shimbun-header-xref header)))
-    (when (or (shimbun-header-xref header) id)
-      (insert "\t"))
-    (when id
-      (insert "X-Nnshimbun-Id: " id "\t"))
-    (insert "\n")
-    (backward-char 1)
-    (while (search-backward "\n" p t)
-      (delete-char 1))
+    (if xref
+       (progn
+         (insert "Xref: " xref "\t")
+         (when id
+           (insert "X-Nnshimbun-Id: " id "\t")))
+      (when id
+       (insert "\tX-Nnshimbun-Id: " id "\t")))
+    ;; Replace newlines with spaces in the current NOV line.
+    (while (progn
+            (forward-line 0)
+            (> (point) start))
+      (backward-delete-char 1)
+      (insert " "))
     (forward-line 1)))
 
+(defmacro nnshimbun-find-parameter (group symbol &optional full-name-p)
+  "Return the value of a nnshimbun group parameter for GROUP which is
+associated with SYMBOL.  If FULL-NAME-P is non-nil, it treats that
+GROUP has a full name."
+  (let ((name (if full-name-p
+                 group
+               `(concat "nnshimbun+" (nnoo-current-server 'nnshimbun)
+                        ":" ,group))))
+    (cond ((eq 'index-range (eval symbol))
+          `(or (plist-get (nnshimbun-find-group-parameters ,name)
+                          'index-range)
+               nnshimbun-index-range))
+         ((eq 'prefetch-articles (eval symbol))
+          `(or (plist-get (nnshimbun-find-group-parameters ,name)
+                          'prefetch-articles)
+               nnshimbun-pre-fetch-article))
+         ((eq 'expiry-wait (eval symbol))
+          (if full-name-p
+              `(or (plist-get (nnshimbun-find-group-parameters ,group)
+                              'expiry-wait)
+                   (gnus-group-find-parameter ,group 'expiry-wait))
+            `(let ((name ,name))
+               (or (plist-get (nnshimbun-find-group-parameters name)
+                              'expiry-wait)
+                   (gnus-group-find-parameter name 'expiry-wait)))))
+         (t
+          `(plist-get (nnshimbun-find-group-parameters ,name) ,symbol)))))
+
 (defun nnshimbun-generate-nov-database (group)
   (nnshimbun-possibly-change-group group)
   (with-current-buffer (nnshimbun-open-nov group)
     (goto-char (point-max))
     (forward-line -1)
-    (let ((i (or (ignore-errors (read (current-buffer))) 0)))
-      (dolist (header (shimbun-headers nnshimbun-shimbun))
+    (let* ((i (or (ignore-errors (read (current-buffer))) 0))
+          (name (concat "nnshimbun+" (nnoo-current-server 'nnshimbun)
+                        ":" group))
+          (pre-fetch (nnshimbun-find-parameter name 'prefetch-articles t)))
+      (dolist (header
+              (shimbun-headers
+               nnshimbun-shimbun
+               (nnshimbun-find-parameter name 'index-range t)))
        (unless (nnshimbun-search-id group (shimbun-header-id header))
          (goto-char (point-max))
          (nnshimbun-insert-nov (setq i (1+ i)) header)
-         (when nnshimbun-pre-fetch-article
+         (when pre-fetch
            (nnshimbun-request-article-1 i group nil nnshimbun-buffer)))))
-  (nnshimbun-write-nov group)))
+    (nnshimbun-write-nov group)))
 
 (defun nnshimbun-replace-nov-entry (group article header &optional id)
   (with-current-buffer (nnshimbun-open-nov group)
              (forward-line 1)
            (forward-line 0)
            (setq found t))))
-      (if found
-         (if nov
-             (nnheader-parse-nov)
-           ;; We return the article number.
-           (ignore-errors (read (current-buffer))))))))
+      (when found
+       (if nov
+           (nnheader-parse-nov)
+         ;; We return the article number.
+         (ignore-errors (read (current-buffer))))))))
 
 (defun nnshimbun-open-nov (group)
   (let ((buffer (cdr (assoc group nnshimbun-nov-buffer-alist))))
        (kill-buffer (current-buffer)))
       (setq nnshimbun-nov-buffer-alist (cdr nnshimbun-nov-buffer-alist)))))
 
+(deffoo nnshimbun-request-expire-articles (articles group
+                                                   &optional server force)
+  "Do expiration for the specified ARTICLES in the nnshimbun GROUP.
+Notice that nnshimbun does not actually delete any articles, it just
+delete the corresponding entries in the NOV database locally.  The
+expiration will be performed only when the current SERVER is specified
+and the NOV is open.  The optional fourth argument FORCE is ignored."
+  (let ((buffer (cdr (assoc group nnshimbun-nov-buffer-alist))))
+    (if (and server
+            ;; Don't use 'string-equal' in the following.
+            (equal server (nnoo-current-server 'nnshimbun))
+            (buffer-live-p buffer))
+       (let* ((expirable (copy-sequence articles))
+              (name (concat "nnshimbun+" server ":" group))
+              ;; If the group's parameter `expiry-wait' is non-nil,
+              ;; `nnmail-expiry-wait' is bound to that value, and
+              ;; `nnmail-expiry-wait-function' is bound to nil.
+              ;; See the source code of `gnus-summary-expire-articles'.
+              ;; Prefer the shimbun's default to `nnmail-expiry-wait'
+              ;; only when the group's parameter is nil.
+              (nnmail-expiry-wait
+               (or (nnshimbun-find-parameter name 'expiry-wait t)
+                   (shimbun-article-expiration-days nnshimbun-shimbun)
+                   nnmail-expiry-wait))
+              article end time)
+         (save-excursion
+           (set-buffer buffer)
+           (while expirable
+             (setq article (pop expirable))
+             (when (and (nnheader-find-nov-line article)
+                        (setq end (line-end-position))
+                        (not (= (point-max) (1+ end))))
+               (setq time (and (search-forward "\t" end t)
+                               (search-forward "\t" end t)
+                               (search-forward "\t" end t)
+                               (parse-time-string
+                                (buffer-substring
+                                 (point)
+                                 (if (search-forward "\t" end t)
+                                     (1- (point))
+                                   end)))))
+               (when (cond ((setq time (condition-case nil
+                                           (apply 'encode-time time)
+                                         (error nil)))
+                            (nnmail-expired-article-p name time nil))
+                           (t
+                            ;; Inhibit expiration if there's no parsable
+                            ;; date and the following option is non-nil.
+                            (not nnshimbun-keep-unparsable-dated-articles)))
+                 (beginning-of-line)
+                 (delete-region (point) (1+ end))
+                 (setq articles (delq article articles)))))
+           (when (buffer-modified-p)
+             (nnmail-write-region 1 (point-max)
+                                  nnshimbun-nov-buffer-file-name
+                                  nil 'nomesg)
+             (set-buffer-modified-p nil))
+           articles))
+      t)))
+
 
 
 ;;; Server Initialize
        (ignore-errors (make-directory nnshimbun-current-directory t)))
       (cond
        ((not (file-exists-p nnshimbun-current-directory))
-       (nnheader-report 'nnshimbun "Couldn't create directory: %s" nnshimbun-current-directory))
+       (nnheader-report 'nnshimbun "Couldn't create directory: %s"
+                        nnshimbun-current-directory))
        ((not (file-directory-p (file-truename nnshimbun-current-directory)))
-       (nnheader-report 'nnshimbun "Not a directory: %s" nnshimbun-current-directory))
+       (nnheader-report 'nnshimbun "Not a directory: %s"
+                        nnshimbun-current-directory))
        (t t)))))
 
 
    (shimbun-current-group-internal (shimbun-mua-shimbun-internal mua))
    id))
 
-(luna-define-method shimbun-mua-use-entire-index ((mua shimbun-gnus-mua))
-  nnshimbun-use-entire-index)
+
+
+;;; Command to create nnshimbun group
+
+(defvar nnshimbun-server-history nil)
+
+;;;###autoload
+(defun gnus-group-make-shimbun-group ()
+  "Create a nnshimbun group."
+  (interactive)
+  (let* ((minibuffer-setup-hook
+         (append minibuffer-setup-hook '(beginning-of-line)))
+        (alist
+         (apply 'nconc
+                (mapcar
+                 (lambda (d)
+                   (and (stringp d)
+                        (file-directory-p d)
+                        (delq nil
+                              (mapcar
+                               (lambda (f)
+                                 (and (string-match "^sb-\\(.*\\)\\.el$" f)
+                                      (list (match-string 1 f))))
+                               (directory-files d)))))
+                 load-path)))
+        (server (completing-read
+                 "Shimbun address: "
+                 alist nil t
+                 (or (car nnshimbun-server-history)
+                     (caar alist))
+                 'nnshimbun-server-history))
+        (groups)
+        (nnshimbun-pre-fetch-article))
+    (require (intern (concat "sb-" server)))
+    (when (setq groups (intern-soft (concat "shimbun-" server "-groups")))
+      (gnus-group-make-group
+       (completing-read "Group name: "
+                       (mapcar 'list (symbol-value groups))
+                       nil t nil)
+       (list 'nnshimbun server)))))
 
 
 (provide 'nnshimbun)
index 49ef3c4..4782974 100644 (file)
@@ -1,4 +1,4 @@
-@c \input texinfo @c -*- mode: texinfo; coding: iso-2022-7bit-ss2; -*-
+@c \input texinfo @c -*- mode: texinfo; coding: iso-2022-7bit; -*-
 
 @setfilename gnus-ja
 @settitle T-gnus 6.15 Manual
@@ -4674,7 +4674,7 @@ gnus \e$B$O$=$N%a!<%k$r<hF@$7$F!"$=$l$N%X%C%@!<$N@:L)D4::$,$G$-$k$h$&$K2hLL\e(B
 @code{\e$B%]%9%H%^%9%?!<\e(B} (postmaster) \e$B$G$b$"$j!"\e(B@code{\e$B%k!<%H\e(B} \e$B$K\e(B @code{\e$B%]%9\e(B
 \e$B%H%^%9%?!<\e(B} \e$B$X$N%a!<%k$r<u$1<h$C$?>l9g$O!"$=$l\e(B
 \e$B$r\e(B @code{\e$B%]%9%H%^%9%?!<\e(B} \e$B$K$b:FAw$7$?$$$H;W$&$G$7$g\e(B
-\e$B$&!#\e(BOrdnung mu\e.A\eN_ sein!)
+\e$B$&!#\e(BOrdnung mu\e,A_\e(B sein!)
 
 \e$B$3$NL?Na$O%W%m%;%9\e(B/\e$B@\F,0z?t$N=,47$K=>$$$^$9\e(B (@pxref{Process/Prefix})\e$B!#\e(B
 
@@ -11083,12 +11083,12 @@ UNDELETED} \e$B$O$*$=$i$/$?$$$F$$$N?M$K$O:GNI$NA*Br$G$7$g$&$,!"$H$-$I\e(B
 \e$B$-\e(B @sc{imap} \e$B%/%i%$%"%s%H$G%a!<%k%\%C%/%9$r=|$-!"$$$/$D$+$N5-;v$K4{\e(B
 \e$BFI\e(B (\e$B$b$7$/$O!"\e(BSEEN) \e$B$N0u$rIU$1$k$J$i!"\e(B@samp{nil} \e$B$K@_Dj$7$?$$$+$b$7$l$^\e(B
 \e$B$;$s!#$=$&$9$l$P!"%a!<%k%\%C%/%9$NA4$F$N5-;v$O0u$NG!2?$K4X$o$i$:<hF@$5$l\e(B
-\e$B$^$9!#=R8l$N40A4$J0lMw$O!"\e(BRFC2060 \e.A\eN'6.4.4 \e$B$rFI$s$G$/$@$5$$!#\e(B
+\e$B$^$9!#=R8l$N40A4$J0lMw$O!"\e(BRFC2060 \e,A'\e(B6.4.4 \e$B$rFI$s$G$/$@$5$$!#\e(B
 
 @item :fetchflag
 \e$B%5!<%P!<$G!"<hF@$7$?5-;v$K0u$rIU$1$kJ}K!!#=i4|CM$N\e(B @samp{\Deleted} \e$B$O$=\e(B
 \e$B$l$i$K>C5n$N0u$rIU$1$^$9$,!"B>$K\e(B @samp{\Seen} \e$B$G$OC1$K4{FI$N0u$rIU$1$^$9!#\e(B
-\e$B$3$l$i$O:G$b$"$j$=$&$JFs$D$NA*Br$G$9$,!"B>$N0u$b\e(B RFC2060 \e.A\eN'2.3.2 \e$B$GDj5A$5\e(B
+\e$B$3$l$i$O:G$b$"$j$=$&$JFs$D$NA*Br$G$9$,!"B>$N0u$b\e(B RFC2060 \e,A'\e(B2.3.2 \e$B$GDj5A$5\e(B
 \e$B$l$F$$$^$9!#\e(B
 
 @item :dontexpunge
@@ -12639,19 +12639,29 @@ an_egroup RET egroups RET www.egroups.comRET your@@email.address RET}\e$B!#\e(B
 @cindex nnshimbun
 @cindex Web Newspaper
 
-\e$B:G6a$G$O!"4v$D$+$N?7J9$,%&%'%V$G8x3+$5$l$F$$$^$9!#\e(BGnus \e$B$O!"$3$l$i$bE,@Z\e(B
-\e$B$K<h$j07$&$3$H$,=PMh$k$h$&$K$J$j$D$D$"$j$^$9!#8=;~E@$G$O!"D+F|?7J9!"FIGd\e(B
-\e$B?7J9!"%9%]%K%A!"\e(BCNET Japan\e$B!"\e(BHOTWIRED Japan\e$B!"\e(BZDNet Japan \e$B$J$I$KBP1~$7$F$$\e(B
-\e$B$^$9!#\e(B
+\e$B:G6a$G$O4v$D$+$N?7J9$,%&%'%V$G8x3+$5$l$F$$$^$9!#\e(BGnus \e$B$O$3$l$i$bE,@Z$K<h\e(B
+\e$B$j07$&$3$H$,=PMh$k$h$&$K$J$j$D$D$"$j$^$9!#8=;~E@$G$OD+F|?7J9!"FIGd?7J9!"\e(B
+\e$B%9%]%K%A!"\e(BCNET Japan\e$B!"\e(BHOTWIRED Japan\e$B!"\e(BZDNet Japan \e$B$J$I$KBP1~$7$F$$$^$9!#\e(B
+
+@code{nnshimbun} \e$B$O\e(B @code{shimbun} \e$B%i%$%V%i%j$K0MB8$7$F$$$^$9$N$G!"$=$l\e(B
+\e$B$r4^$s$G$$$k\e(B Emacs-W3M \e$B%Q%C%1!<%8$H30It%3%^%s%I\e(B W3M \e$B$r@h$K%$%s%9%H!<%k$7\e(B
+\e$B$F$*$$$F$/$@$5$$!#>\$7$$$3$H$O0J2<$N%Z!<%8$GCN$k$3$H$,$G$-$^$9!#\e(B
 
-@code{nnshimbun} \e$B$O!"\e(B@code{shimbun} \e$B%i%$%V%i%j$K0MB8$7$F$$$^$9$N$G!"@h$K\e(B
-\e$B%$%s%9%H!<%k$7$F$*$$$F$/$@$5$$\e(B @uref{http://namazu.org/~tsuchiya/emacs-w3m}\e$B!#\e(B
+@example
+  @uref{http://namazu.org/~tsuchiya/emacs-w3m/}
+  @uref{http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/}
+@end example
 
 @code{nnshimbun} \e$B$r;O$a$k$?$a$N0lHV4JC1$JJ}K!$O%0%k!<%W%P%C%U%!$G0J2<$N\e(B
-\e$B$h$&$J$b$N$r$9$k$3$H$G$9\e(B: @kbd{M-x gnus-group-make-shimbun-group RET
-asahi RET an_group RET}\e$B!#\e(B(@sc{an_group} \e$B$r1\Mw$7$?$$5-;v%0%k!<%W$KCV$-49\e(B
-\e$B$($F$/$@$5$$!#\e(B) \e$B$^$?$O\e(B @kbd{B nnshimbun RET asahi RET} \e$B$G%P%C%/%(%s%I$r\e(B
-\e$B%V%i%&%:$7$F2<$5$$!#\e(B
+\e$B$h$&$J$b$N$r$9$k$3$H$G$9\e(B:
+
+@example
+  @kbd{M-x gnus-group-make-shimbun-group RET asahi RET a_group RET}
+@end example
+
+\e$B>e$N\e(B @samp{a_group} \e$B$O1\Mw$7$?$$5-;v%0%k!<%W$KCV$-49$($F$/$@$5$$!#\e(B
+\e$B$^$?$O\e(B @kbd{B nnshimbun RET asahi RET} \e$B$G%P%C%/%(%s%I$r%V%i%&%:$7$F2<$5\e(B
+\e$B$$!#\e(B
 
 \e$B0J2<$N\e(B @code{nnshimbun} \e$BJQ?t$rJQ$($k$3$H$,2DG=$G$9\e(B:
 
@@ -12660,12 +12670,166 @@ asahi RET an_group RET}\e$B!#\e(B(@sc{an_group} \e$B$r1\Mw$7$?$$5-;v%0%k!<%W$KCV$-4
 @vindex nnshimbun-directory
 @code{nnshimbun} \e$B$,%U%!%$%k$rJ]B8$9$k%G%#%l%/%H%j!<$G$9!#=i4|CM\e(B
 \e$B$O\e(B @samp{~/News/shimbun} \e$B$G$9!#\e(B
+@end table
 
-@item nnshimbun-pre-fetch-article
+@cindex group parameters
+@code{nnshimbun} \e$B$O\e(B Gnus \e$B$,Ds6!$9$kHFMQ$N%0%k!<%W%Q%i%a!<\e(B
+\e$B%?\e(B (@xref{Group Parameters}) \e$B$K2C$($F!"\e(B@code{nnshimbun} \e$B@lMQ$N%0%k!<%W%Q\e(B
+\e$B%i%a!<%?$rMxMQ$9$k$3$H$,$G$-$^$9!#$=$l$i\e(B
+\e$B$O\e(B @code{nnshimbun-group-parameters} \e$B$H$$$&C10l$N%0%k!<%W%Q%i%a!<%?$K$^\e(B
+\e$B$H$a$i$l$F$$$^$9$,!"$=$l$,3F%0%k!<%WKh$K;}$D$3$H$,$G$-$kCM$O%W%m%Q%F%#%j\e(B
+\e$B%9%H$G!"Nc$($P<!$N$h$&$JCM$G$9!#\e(B
+
+@example
+  '(index-range all prefetch-articles t expiry-wait 6)
+@end example
+
+\e$B0J9_$O!"$3$l$i$N%0%k!<%W%Q%i%a!<%?$H!"$=$l$K4XO"$9$kJQ?t$N@bL@$G$9!#\e(B
+
+@table @code
+@item prefetch-articles
 @vindex nnshimbun-pre-fetch-article
-\e$B$3$NJQ?t$,\e(B @code{nil} \e$B0J30$NCM$K%;%C%H$5$l$F$$$k$H!"\e(B@code{nnshimbun} \e$B$O\e(B
-\e$B?7Ce5-;v$r8!:w$HF1;~$K5-;v$N%@%&%s%m!<%I$b9T$$$^$9!#$3$l$K$h$C$F!"?7Ce5-\e(B
-\e$B;v$N8!:w$OCY$/$J$j$^$9$,!"5-;v$N1\Mw;~$KBT$?$5$l$k$3$H$O>/$J$/$J$j$^$9!#\e(B
+\e$B$3$N%0%k!<%W%Q%i%a!<%?$,\e(B @code{nil} \e$B0J30$NCM$K%;%C%H$5$l$F$$$k%0%k!<%W$G\e(B
+\e$B$O!"\e(B@code{nnshimbun} \e$B$O?7Ce5-;v$r8!:w$HF1;~$K5-;v$N%@%&%s%m!<%I$b9T$$$^\e(B
+\e$B$9!#$3$l$K$h$C$F?7Ce5-;v$N8!:w$OCY$/$J$j$^$9$,!"5-;v$N1\Mw;~$KBT$?$5$l$k\e(B
+\e$B$3$H$O>/$J$/$J$j$^$9!#$b$7!"JQ\e(B
+\e$B?t\e(B @code{nnshimbun-pre-fetch-article} \e$B$,\e(B @code{nil} \e$B0J30$NCM$K%;%C%H$5$l\e(B
+\e$B$F$$$?$J$i$P!"%0%k!<%W%Q%i%a!<%?\e(B @code{prefetch-articles} \e$B$,@_Dj$5$l$F$$\e(B
+\e$B$J$$$+!"$=$NCM$,\e(B @code{nil} \e$B$K$J$C$F$$$k%0%k!<%W$G$b!"A0$b$C$F5-;v$N%@%&\e(B
+\e$B%s%m!<%I$r9T$J$$$^$9!#\e(B
+
+@item index-range
+@vindex nnshimbun-index-range
+\e$B%0%k!<%W%Q%i%a!<%?\e(B @code{index-range} \e$B$G!"%&%'%V%5!<%P!<$+$i<hF@$9$k5-;v\e(B
+\e$B$NHO0O$r;XDj$9$k$3$H$,$G$-$^$9!#HO0O$N;XDj$K$O0J2<$NCM$r;H$C$F2<$5$$!#\e(B
+
+@example
+@code{nil}, @code{all}:
+        \e$B$9$Y$F\e(B
+@code{last}:
+        \e$B:G?7$N$_\e(B
+@samp{\e$B@0?t\e(BN}:
+        \e$B:G?7$+$i\e(B N \e$B%Z!<%8\e(B
+@end example
+
+@code{nnshimbun} \e$B$O%5!<%P!<>e$KB8:_$9$kL\<!%Z!<%8$r;H$C$F?7Ce5-;v$NM-L5\e(B
+\e$B$rD4$Y$^$9$,!"%5!<%P!<$K$h$C$F$O$=$N$h$&$JL\<!%Z!<%8$,J#?tB8:_$9$k>l9g$,\e(B
+\e$B$"$j$^$9!#Nc$($P!"%a!<%j%s%0%j%9%H$N5-;v$rDs6!$7$F$$$k%5!<%P!<$N>l9g$O!"\e(B
+\e$B$=$N5-;v$,Ej9F$5$l$?F|IU$K$h$C$FJ,N`$5$l$?L\<!$K$J$C$F$$$k$3$H$,0lHLE*$G\e(B
+\e$B$9!#FC$KCY$$2s@~$rMxMQ$7$F$$$k;~$K!"$3$N$h$&$KJ#?t!&BgNL$NL\<!$rD4$Y$k$3\e(B
+\e$B$H$K$J$k$H!"BgJQ;~4V$,$+$+$k$3$H$K$J$j$^$9!#\e(B
+
+@code{nnshimbun} \e$B$OA02s$N@\B3;~$KD4$Y$?L\<!$K$D$$$F$O!"$J$k$Y$/D4$Y$:$K\e(B
+\e$B:Q$^$;$k$h$&$K$J$C$F$$$^$9$,!"99$K;~4V$r@aLs$7$?$$>l9g$O\e(B @code{last} \e$B$r\e(B
+\e$B;H$C$F2<$5$$!#$3$&$9$k$H:G?7$NL\<!$N$_$r;2>H$7$F?7Ce5-;v$N8!::$r9T$&$h$&\e(B
+\e$B$K$J$j$^$9!#\e(B
+
+\e$B%0%k!<%W%Q%i%a!<%?\e(B @code{index-range} \e$B$,@_Dj$5$l$F$$$J$$$+!"CM\e(B
+\e$B$,\e(B @code{nil} \e$B$K$J$C$F$$$k%0%k!<%W$G$O!"JQ\e(B
+\e$B?t\e(B @code{nnshimbun-index-range} \e$B$NCM$,%G%#%U%)%k%H$H$7$F;H$o$l$^$9!#\e(B
+
+@item nnshimbun-group-parameters-alist
+@vindex nnshimbun-group-parameters-alist
+@code{nnshimbun-group-parameters-alist} \e$B$O%+%9%?%^%$%:2DG=$J%f!<%6%*%W%7%g\e(B
+\e$B%s$G!"3FMWAG$K%0%k!<%WL>$N@55,I=8=$H\e(B @code{nnshimbun} \e$B@lMQ$N%0%k!<%W%Q%i\e(B
+\e$B%a!<%?$HF1$8%W%m%Q%F%#%j%9%H$r;}$D$3$H$,$G$-$kO"A[%j%9%H$G$9!#3FMWAG$O<!\e(B
+\e$B$N$h$&$JCM$r;}$A$^$9!#\e(B
+
+@lisp
+'("^nnshimbun\\+asahi:"
+  index-range all prefetch-articles t expiry-wait 6)
+@end lisp
+
+\e$B;w$?@-3J$r;}$DJ#?t$N%0%k!<%W$KBP$7$FF1$8@_Dj$r9T$J$&$3$H$,$G$-$k$N$G!"8D!9\e(B
+\e$B$N%0%k!<%W$KBP$7$F$=$l$>$l%0%k!<%W%Q%i%a!<%?$r$r@_Dj$9$kBe$o$j$K;H$&$3$H\e(B
+\e$B$,$G$-$^$9!#$b$7@55,I=8=$K%^%C%A$9$k%0%k!<%W$G%0%k!<%W%Q%i%a!<%?$N@_Dj$,\e(B
+\e$B9T$J$o$l$F$$$?>l9g$O!"$=$N@_DjCM$NJ}$,M%@h$5$l$^$9!#\e(B
+@end table
+
+@cindex article expiry
+@cindex expiry-wait
+@vindex nnmail-expiry-wait-function
+@vindex nnmail-expiry-wait
+\e$B$H$3$m$G\e(B @code{nnshimbun} \e$B%P%C%/%(%s%I$G$O!"5-;v$N4|8B@Z$l>C5n$r9T$J$&$3\e(B
+\e$B$H$,$G$-$^$9!#$"$"!"$b$A$m$s$"$J$?$,;0F|A0$N?7J95-;v$r>C5n$9$k$h$&$K@_Dj\e(B
+\e$B$7$?$+$i$H$$$C$F!"?7J9<R$N%5!<%P!<$K$"$k;0F|A0$N5-;v$,>C$($F$7$^$&$o$1$G\e(B
+\e$B$O$"$j$^$;$s!#>C$($k$N$O$"$J$?8D?M$,;}$C$F$$$k\e(B @code{nnshimbun} \e$BMQ\e(B
+\e$B$N\e(B @sc{nov} \e$B%U%!%$%k$N3:Ev$9$kItJ,$G!"$=$l$K$h$C$F$=$N5-;v$OFsEY$H35N,%P%C\e(B
+\e$B%U%!$K8=$l$J$/$J$j$^$9!#\e(B
+
+@code{nnshimbun} \e$B%P%C%/%(%s%I$G$O5-;v$N4|8B@Z$l>C5n$r9T$J$o$J$$\e(B
+\e$B$H\e(B @sc{nov} \e$B%U%!%$%k$,:]8BL5$/B@$jB3$1!"?7J9<R$N%5!<%P!<$G$O$H$C$/$KL5$/\e(B
+\e$B$J$C$F$7$^$C$?;0G/A0$N5-;v$,!"35N,%P%C%U%!$G$O$"$?$+$bB8:_$7$F$$$k$h$&$K\e(B
+\e$B8+$($^$9!#$=$l$rFI$b$&$H$7$F$b5-;v%P%C%U%!$K$O2?$b8=$l$^$;$s!#0lJ}%a!<%j\e(B
+\e$B%s%0%j%9%H$N5-;v$rDs6!$7$F$$$k%5!<%P!<$N>l9g$K$O!"2a5n$NA45-;v$rJ]M-$7$F\e(B
+\e$B$$$k>l9g$,>/$J$/$J$$$G$7$g$&!#@N$"$J$?$,6=$8$?0lO"$N5-;v$rFI$_JV$7$F2{$+\e(B
+\e$B$7$`$?$a$K!"$=$&$$$&%0%k!<%W$G$O4|8B@Z$l>C5n$O$5$;$?$/$J$$$H;W$&$+$b$7$l\e(B
+\e$B$^$;$s!#\e(B
+
+\e$B<B$O\e(B @code{nnshimbun} \e$B%P%C%/%(%s%I$G$b!"B>$N%a!<%k%P%C%/%(%s%I$HF1MM$NJ}\e(B
+\e$BK!$G%0%k!<%WKh$K<+F04|8B@Z$l>C5n2DG=$K$7$?$j!";D$7$F$*$/4|4V$r@_Dj$9$k$3\e(B
+\e$B$H$,$G$-$k$N$G$9\e(B (@xref{Expiring Mail})\e$B!#\e(B
+
+\e$B$?$@\e(B @code{nnshimbun} \e$B%P%C%/%(%s%I$N4|8B@Z$l>C5n$K$O!"B>$N%a!<%k%P%C%/%(\e(B
+\e$B%s%I$H>/$7$@$10c$&E@$,$"$j$^$9!#Bh0l$K!";D$7$F$*$/4|4V$N%G%#%U%)%k%HCM$K\e(B
+@code{shimbun} \e$B%i%$%V%i%j$,Ds6!$9$kCM$,4X78$7!"0J2<$NM%@hEY$G4|4V$,7hDj\e(B
+\e$B$5$l$k$3$H$G$9!#\e(B
+
+@example
+\e$B%0%k!<%W%Q%i%a!<%?$N\e(B @code{expiry-wait}
+@code{nnmail-expiry-wait-function} \e$B$rI>2A$7$?CM\e(B
+@code{shimbun} \e$B%i%$%V%i%j$,Ds6!$9$k%0%k!<%WKh$N%G%#%U%)%k%HCM\e(B
+@code{nnmail-expiry-wait} \e$B$NCM\e(B
+@end example
+
+\e$BBhFs$K!"\e(B@code{nnmail-expiry-wait-function} \e$B$,4X?t$@$C$?>l9g$K!"$=$N0z?t\e(B
+\e$B$KM?$($i$l$kJ8;zNs$K\e(B ``nnshimbin+asahi:national'' \e$B$N$h$&$K%P%C%/%(%s%I$H\e(B
+\e$B%5!<%P!<$NL>A0$,4^$^$l$k$3$H$G$9!#B>$N%a!<%k%P%C%/%(%s%I$N>l9g$K$O%0%k!<\e(B
+\e$B%WL>$@$1$,M?$($i$l$k$N$K!"$G$9!#0l$DNc$r5s$2$^$7$g$&!#\e(B
+
+@lisp
+@c We should untabify the following to keep the correct indentations.
+(setq nnmail-expiry-wait-function
+      (lambda (group)
+        (cond ((string-equal group "wl") 7)
+              ((string-equal group "nnshimbun+airs:wl") 'never))))
+@end lisp
+
+\e$B$3$l$O!"Nc$($P\e(B @code{nnml} \e$B$d\e(B @code{nnmh} \e$B$G<u?.$7$F$$$k\e(B Wanderlust \e$B%a!<\e(B
+\e$B%j%s%0%j%9%H$N5-;v$O\e(B 7\e$BF|$G4|8B@Z$l>C5n$9$k$,!"\e(B@code{nnshimbun} \e$B$GFI$`F1\e(B
+\e$B$8%a!<%j%s%0%j%9%H$N%"!<%+%$%V$O$9$Y$FFI$a$k>uBV$K$7$F$*$/!"$H$$$&$3$H$G\e(B
+\e$B$9!#$I$&$G$9!"$J$+$J$+8-$$$G$7$g\e(B?
+
+\e$BBh;0$K!"$3$l$O$"$J$?$,IT?3$K;W$C$?$H$-$K;W$$=P$7$F$/$l$k$3$H$r4|BT$7$F=q\e(B
+\e$B$$$F$*$-$^$9$,!"%0%k!<%W$N$9$Y$F$N5-;v$,4|8B@Z$l>C5n$NBP>]$K$J$C$F$7$^$C\e(B
+\e$B$?$H$-$K!"\e(B@code{nnshimbun} \e$B$O:G8e$N0lDL$@$1$O>C$5$:$K;D$7$F$*$-$^$9!#$3\e(B
+\e$B$l$O$"$J$?$NL$N}?4$rK~B-$5$;$k$?$a$G$O$J$/!"%5!<%P!<$+$i8E$$5-;v$r:F$S<h\e(B
+\e$BF@$7$F$7$^$o$J$$$?$a$N5gM>$N:v$J$N$G$9!#\e(B
+
+@code{nnshimbun} \e$B$N4|8B@Z$l>C5n$K4X78$9$k%0%k!<%W%Q%i%a!<%?$HJQ?t$O0J2<\e(B
+\e$B$NDL$j$G$9!#\e(B
+
+@table @code
+@item expiry-wait
+@cindex expiry-wait
+\e$B$I$&$+:.Mp$J$5$i$J$$$h$&$K!#\e(Bgnus \e$B$,Ds6!$7$F$$$kHFMQ$N%0%k!<%W%Q%i%a!<\e(B
+\e$B%?\e(B @code{expiry-wait} \e$B$HF1$8L>A0$G0UL#$bF1$8$b$N$,\e(B @code{nnshimbun} \e$B@lMQ\e(B
+\e$B$N%0%k!<%W%Q%i%a!<%?$K$bMQ0U$5$l$F$$$^$9!#$"$J$?$O$I$A$i$r;H$C$F$b9=$$$^\e(B
+\e$B$;$s!#$b$7\e(B @code{nnshimbun} \e$B@lMQ$N%0%k!<%W%Q%i%a!<%?$NJ}$r\e(B @code{nil} \e$B0J\e(B
+\e$B30$NCM$K@_Dj$9$k$H!"HFMQ$N%0%k!<%W%Q%i%a!<%?$NCM$h$j$bM%@h$7$F;H$o$l$^$9!#\e(B
+\e$B$3$l$O!"%0%k!<%W%P%C%U%!$G\e(B @kbd{G c} \e$B$r%?%$%W$7$?$H$-$K8=$l$kJT=82hLL$K\e(B
+\e$B$*$$$F!"\e(B@code{nnshimbun} \e$B$K4X78$9$k$b$N$r0l2U=j$K=8$a$k$?$a$H!"%f!<%6%*\e(B
+\e$B%W%7%g%s\e(B @code{nnshimbun-group-parameters-alist} \e$B$G0l3g$7$F4IM}$G$-$k$h\e(B
+\e$B$&$K$9$k$3$H$rL\E*$KMQ0U$7$?$b$N$G$9!#@_Dj$G$-$kCM$OHFMQ$N%0%k!<%W%Q%i%a!<\e(B
+\e$B%?$HF1MM$K!";~8B>C5n$NF|?t!"\e(B@code{never} \e$B$^$?$O\e(B @code{immediate} \e$B$G$9!#\e(B
+
+@item nnshimbun-keep-unparsable-dated-articles
+@vindex nnshimbun-keep-unparsable-dated-articles
+\e$B$3$NJQ?t$NCM$,\e(B @code{nil} \e$B$G$J$$>l9g$O!":n@.$5$l$?$jAw?.$5$l$?;~9o$,$h$/\e(B
+\e$B$o$+$i$J$$5-;v$r4|8B@Z$l>C5n$7$^$;$s!#$J$K$7$m4|8B$,$o$+$i$J$$$s$G$9$+$i!#\e(B
+\e$B=i4|CM$O\e(B @code{t} \e$B$G$9$,!"\e(B@code{nil} \e$B$K$9$k$H4|8B@Z$l>C5n$N=hM}$,9T$J$o\e(B
+\e$B$l$k$H$-$K!"4|8B$,$o$+$i$J$$5-;v$G$bM-L5$r8@$o$:>C$7$F$7$^$$$^$9!#$^$"!"\e(B
+\e$BG/$NJk$l$NBgA]=|$N$H$-$K$G$b;H$C$F2<$5$$!#\e(B
 @end table
 
 @node RSS
@@ -16439,7 +16603,7 @@ bbbd \e$B%5!<%P!<$,<B9T$5$l$F$$$k%[%9%H$N%]!<%H$G$9!#=i4|CM$O\e(B 9000 \e$B$G$9!#\e(
 
 @item !
 @itemx not
-@itemx \e.A\eN,
+@itemx \e,A,\e(B
 \e$B$3$NO@M}:nMQ;R$OC10l$N0z?t$N$_$r$H$j$^$9!#$=$l$O$=$N0z?t$NCM$NO@M}H]Dj$r\e(B
 \e$BJV$7$^$9!#\e(B
 
@@ -18819,7 +18983,7 @@ Kevin Davidson---@dfn{ding} \e$B$NL>A0$r;W$$IU$-$^$7$?!#$G$9$+$i!"H`$r@U$a$F\e(B
 \e$B2<$5$$!#\e(B
 
 @item
-Fran\e.A\eNgois Pinard---\e$BB?$/$N!"B?$/$N6=L#?<$/40A4$J%P%0%l%]!<%H$H\e(B autoconf \e$B$N\e(B
+Fran\e,Ag\e(Bois Pinard---\e$BB?$/$N!"B?$/$N6=L#?<$/40A4$J%P%0%l%]!<%H$H\e(B autoconf \e$B$N\e(B
 \e$B%5%]!<%H!#\e(B
 
 @end itemize
@@ -18832,7 +18996,7 @@ Borges \e$B$K$h$C$F9;@5$5$l!"\e(BJost Krieger \e$B$K$h$C$F0lItJ,$r9;@5$5$l$^$7$?!#\e
 Christopher Davis,
 Andrew Eskilsson,
 Kai Grossjohann,
-David K\e.A\eNegedal,
+David K\e,Ae\e(Bgedal,
 Richard Pieri,
 Fabrice Popineau,
 Daniel Quinlan,
@@ -18918,7 +19082,7 @@ Gunnar Horrigmo,
 Richard Hoskins,
 Brad Howes,
 Miguel de Icaza,
-Fran\e.A\eNgois Felix Ingrand,
+Fran\e,Ag\e(Bois Felix Ingrand,
 Tatsuya Ichikawa, @c ?
 Ishikawa Ichiro, @c Ishikawa
 Lee Iverson,
index 5c8ecf3..8058bbe 100644 (file)
@@ -1,4 +1,4 @@
-\input texinfo                  @c -*-texinfo-*-
+\input texinfo @c -*- mode: texinfo; coding: iso-2022-7bit; -*-
 
 @setfilename message-ja
 @settitle T-gnus 6.15 Message Manual