From: yamaoka Date: Thu, 14 Jun 2001 08:21:05 +0000 (+0000) Subject: T-gnus 6.15.3 revision 02. X-Git-Tag: t-gnus-6_15_3-02 X-Git-Url: http://git.chise.org/gitweb/?a=commitdiff_plain;h=1b53e84004a494d1af0d9e3ee70570590ff33b66;p=elisp%2Fgnus.git- T-gnus 6.15.3 revision 02. Feedback the improvement of nnshimbun from the branch `t-gnus-6_15-quimby'. --- diff --git a/ChangeLog b/ChangeLog index ec84027..c014447 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,142 @@ +2001-06-14 Katsumi Yamaoka + + * lisp/gnus-vers.el (gnus-revision-number): Increment to 02. + +2001-06-14 Katsumi Yamaoka + + * 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 + + * 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 + + * 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 + + * 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 + + * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Fix + inhibiting the expiring when `nnshimbun-keep-unparsable-dated-articles' + is nil. + +2001-06-11 TSUCHIYA Masatoshi + + * 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 + + * 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 + + * lisp/nnshimbun.el: Remove some garbage. + +2001-06-10 Katsumi Yamaoka + + * 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 + + * 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 + + * 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 + + * 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 + + * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Prefer the + group parameter `expiry-wait' when expiring a closed group. + +2001-06-07 Katsumi Yamaoka + + * 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 + + * lisp/nnshimbun.el (nnshimbun-request-expire-articles): Fix + inhibiting the expiring. + +2001-06-06 Katsumi Yamaoka + + * 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 * lisp/gnus-clfns.el (find-cl-run-time-functions): Remove a diff --git a/lisp/gnus-group.el b/lisp/gnus-group.el index ff81bf7..11ab2d5 100644 --- a/lisp/gnus-group.el +++ b/lisp/gnus-group.el @@ -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." diff --git a/lisp/gnus-vers.el b/lisp/gnus-vers.el index 84cc3ee..748bf43 100644 --- a/lisp/gnus-vers.el +++ b/lisp/gnus-vers.el @@ -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. diff --git a/lisp/gnus.el b/lisp/gnus.el index 4995820..60ff855 100644 --- a/lisp/gnus.el +++ b/lisp/gnus.el @@ -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) diff --git a/lisp/nnshimbun.el b/lisp/nnshimbun.el index 3c48b1a..27e7229 100644 --- a/lisp/nnshimbun.el +++ b/lisp/nnshimbun.el @@ -1,4 +1,4 @@ -;;; nnshimbun.el --- interfacing with web newspapers -*- coding: junet; -*- +;;; nnshimbun.el --- interfacing with web newspapers ;; Authors: TSUCHIYA Masatoshi , ;; Akihiro Arisawa , @@ -35,30 +35,118 @@ ;; 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/") @@ -70,10 +158,15 @@ (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) @@ -96,7 +189,8 @@ ;;; 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 @@ -114,7 +208,8 @@ (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 @@ -129,7 +224,8 @@ (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)) @@ -139,20 +235,23 @@ (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) @@ -161,12 +260,12 @@ (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) @@ -194,6 +293,9 @@ (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 @@ -209,6 +311,11 @@ (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))) @@ -236,7 +343,8 @@ (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) @@ -249,7 +357,7 @@ (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)))))) @@ -302,7 +410,8 @@ (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) @@ -313,55 +422,127 @@ (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) @@ -390,11 +571,11 @@ (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)))) @@ -437,6 +618,66 @@ (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 @@ -465,9 +706,11 @@ (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))))) @@ -480,8 +723,46 @@ (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) diff --git a/texi/gnus-ja.texi b/texi/gnus-ja.texi index 49ef3c4..4782974 100644 --- a/texi/gnus-ja.texi +++ b/texi/gnus-ja.texi @@ -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 $B$O$=$N%a!<%k$rl9g$O!"$=$l(B $B$r(B @code{$B%]%9%H%^%9%?!<(B} $B$K$b:FAw$7$?$$$H;W$&$G$7$g(B -$B$&!#(BOrdnung mu.AN_ sein!) +$B$&!#(BOrdnung mu,A_(B sein!) $B$3$NL?Na$O%W%m%;%9(B/$B@\F,0z?t$N=,47$K=>$$$^$9(B (@pxref{Process/Prefix})$B!#(B @@ -11083,12 +11083,12 @@ UNDELETED} $B$O$*$=$i$/$?$$$F$$$N?M$K$O:GNI$NA*Br$G$7$g$&$,!"$H$-$I(B $B$-(B @sc{imap} $B%/%i%$%"%s%H$G%a!<%k%\%C%/%9$r=|$-!"$$$/$D$+$N5-;v$K4{(B $BFI(B ($B$b$7$/$O!"(BSEEN) $B$N0u$rIU$1$k$J$i!"(B@samp{nil} $B$K@_Dj$7$?$$$+$b$7$l$^(B $B$;$s!#$=$&$9$l$P!"%a!<%k%\%C%/%9$NA4$F$N5-;v$O0u$NG!2?$K4X$o$i$:C5n$N0u$rIU$1$^$9$,!"B>$K(B @samp{\Seen} $B$G$OC1$K4{FI$N0u$rIU$1$^$9!#(B -$B$3$l$i$O:G$b$"$j$=$&$JFs$D$NA*Br$G$9$,!"B>$N0u$b(B RFC2060 .AN'2.3.2 $B$GDj5A$5(B +$B$3$l$i$O:G$b$"$j$=$&$JFs$D$NA*Br$G$9$,!"B>$N0u$b(B RFC2060 ,A'(B2.3.2 $B$GDj5A$5(B $B$l$F$$$^$9!#(B @item :dontexpunge @@ -12639,19 +12639,29 @@ an_egroup RET egroups RET www.egroups.comRET your@@email.address RET}$B!#(B @cindex nnshimbun @cindex Web Newspaper -$B:G6a$G$O!"4v$D$+$N?7J9$,%&%'%V$G8x3+$5$l$F$$$^$9!#(BGnus $B$O!"$3$l$i$bE,@Z(B -$B$K\$7$$$3$H$O0J2<$N%Z!<%8$GCN$k$3$H$,$G$-$^$9!#(B -@code{nnshimbun} $B$O!"(B@code{shimbun} $B%i%$%V%i%j$K0MB8$7$F$$$^$9$N$G!"@h$K(B -$B%$%s%9%H!<%k$7$F$*$$$F$/$@$5$$(B @uref{http://namazu.org/~tsuchiya/emacs-w3m}$B!#(B +@example + @uref{http://namazu.org/~tsuchiya/emacs-w3m/} + @uref{http://ei5nazha.yz.yamagata-u.ac.jp/~aito/w3m/} +@end example @code{nnshimbun} $B$r;O$a$k$?$a$N0lHV4JC1$JJ}K!$O%0%k!<%W%P%C%U%!$G0J2<$N(B -$B$h$&$J$b$N$r$9$k$3$H$G$9(B: @kbd{M-x gnus-group-make-shimbun-group RET -asahi RET an_group RET}$B!#(B(@sc{an_group} $B$r1\Mw$7$?$$5-;v%0%k!<%W$KCV$-49(B -$B$($F$/$@$5$$!#(B) $B$^$?$O(B @kbd{B nnshimbun RET asahi RET} $B$G%P%C%/%(%s%I$r(B -$B%V%i%&%:$7$F2<$5$$!#(B +$B$h$&$J$b$N$r$9$k$3$H$G$9(B: + +@example + @kbd{M-x gnus-group-make-shimbun-group RET asahi RET a_group RET} +@end example + +$B>e$N(B @samp{a_group} $B$O1\Mw$7$?$$5-;v%0%k!<%W$KCV$-49$($F$/$@$5$$!#(B +$B$^$?$O(B @kbd{B nnshimbun RET asahi RET} $B$G%P%C%/%(%s%I$r%V%i%&%:$7$F2<$5(B +$B$$!#(B $B0J2<$N(B @code{nnshimbun} $BJQ?t$rJQ$($k$3$H$,2DG=$G$9(B: @@ -12660,12 +12670,166 @@ asahi RET an_group RET}$B!#(B(@sc{an_group} $B$r1\Mw$7$?$$5-;v%0%k!<%W$KCV$-4 @vindex nnshimbun-directory @code{nnshimbun} $B$,%U%!%$%k$rJ]B8$9$k%G%#%l%/%H%j!<$G$9!#=i4|CM(B $B$O(B @samp{~/News/shimbun} $B$G$9!#(B +@end table -@item nnshimbun-pre-fetch-article +@cindex group parameters +@code{nnshimbun} $B$O(B Gnus $B$,Ds6!$9$kHFMQ$N%0%k!<%W%Q%i%a!<(B +$B%?(B (@xref{Group Parameters}) $B$K2C$($F!"(B@code{nnshimbun} $B@lMQ$N%0%k!<%W%Q(B +$B%i%a!<%?$rMxMQ$9$k$3$H$,$G$-$^$9!#$=$l$i(B +$B$O(B @code{nnshimbun-group-parameters} $B$H$$$&C10l$N%0%k!<%W%Q%i%a!<%?$K$^(B +$B$H$a$i$l$F$$$^$9$,!"$=$l$,3F%0%k!<%WKh$K;}$D$3$H$,$G$-$kCM$O%W%m%Q%F%#%j(B +$B%9%H$G!"Nc$($P/$J$/$J$j$^$9!#(B +$B$3$N%0%k!<%W%Q%i%a!<%?$,(B @code{nil} $B0J30$NCM$K%;%C%H$5$l$F$$$k%0%k!<%W$G(B +$B$O!"(B@code{nnshimbun} $B$O?7Ce5-;v$r8!:w$HF1;~$K5-;v$N%@%&%s%m!<%I$b9T$$$^(B +$B$9!#$3$l$K$h$C$F?7Ce5-;v$N8!:w$OCY$/$J$j$^$9$,!"5-;v$N1\Mw;~$KBT$?$5$l$k(B +$B$3$H$O>/$J$/$J$j$^$9!#$b$7!"JQ(B +$B?t(B @code{nnshimbun-pre-fetch-article} $B$,(B @code{nil} $B0J30$NCM$K%;%C%H$5$l(B +$B$F$$$?$J$i$P!"%0%k!<%W%Q%i%a!<%?(B @code{prefetch-articles} $B$,@_Dj$5$l$F$$(B +$B$J$$$+!"$=$NCM$,(B @code{nil} $B$K$J$C$F$$$k%0%k!<%W$G$b!"A0$b$C$F5-;v$N%@%&(B +$B%s%m!<%I$r9T$J$$$^$9!#(B + +@item index-range +@vindex nnshimbun-index-range +$B%0%k!<%W%Q%i%a!<%?(B @code{index-range} $B$G!"%&%'%V%5!<%P!<$+$ie$KB8:_$9$kL\l9g$,(B +$B$"$j$^$9!#Nc$($P!"%a!<%j%s%0%j%9%H$N5-;v$rDs6!$7$F$$$k%5!<%P!<$N>l9g$O!"(B +$B$=$N5-;v$,Ej9F$5$l$?F|IU$K$h$C$FJ,N`$5$l$?L\l9g$O(B @code{last} $B$r(B +$B;H$C$F2<$5$$!#$3$&$9$k$H:G?7$NL\H$7$F?7Ce5-;v$N8!::$r9T$&$h$&(B +$B$K$J$j$^$9!#(B + +$B%0%k!<%W%Q%i%a!<%?(B @code{index-range} $B$,@_Dj$5$l$F$$$J$$$+!"CM(B +$B$,(B @code{nil} $B$K$J$C$F$$$k%0%k!<%W$G$O!"JQ(B +$B?t(B @code{nnshimbun-index-range} $B$NCM$,%G%#%U%)%k%H$H$7$F;H$o$l$^$9!#(B + +@item nnshimbun-group-parameters-alist +@vindex nnshimbun-group-parameters-alist +@code{nnshimbun-group-parameters-alist} $B$O%+%9%?%^%$%:2DG=$J%f!<%6%*%W%7%g(B +$B%s$G!"3FMWAG$K%0%k!<%WL>$N@55,I=8=$H(B @code{nnshimbun} $B@lMQ$N%0%k!<%W%Q%i(B +$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$l%0%k!<%W%Q%i%a!<%?$r$r@_Dj$9$kBe$o$j$K;H$&$3$H(B +$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$,(B +$B9T$J$o$l$F$$$?>l9g$O!"$=$N@_DjCM$NJ}$,M%@h$5$l$^$9!#(B +@end table + +@cindex article expiry +@cindex expiry-wait +@vindex nnmail-expiry-wait-function +@vindex nnmail-expiry-wait +$B$H$3$m$G(B @code{nnshimbun} $B%P%C%/%(%s%I$G$O!"5-;v$N4|8B@Z$l>C5n$r9T$J$&$3(B +$B$H$,$G$-$^$9!#$"$"!"$b$A$m$s$"$J$?$,;0F|A0$N?7J95-;v$r>C5n$9$k$h$&$K@_Dj(B +$B$7$?$+$i$H$$$C$F!"?7J9C$($F$7$^$&$o$1$G(B +$B$O$"$j$^$;$s!#>C$($k$N$O$"$J$?8D?M$,;}$C$F$$$k(B @code{nnshimbun} $BMQ(B +$B$N(B @sc{nov} $B%U%!%$%k$N3:Ev$9$kItJ,$G!"$=$l$K$h$C$F$=$N5-;v$OFsEY$H35N,%P%C(B +$B%U%!$K8=$l$J$/$J$j$^$9!#(B + +@code{nnshimbun} $B%P%C%/%(%s%I$G$O5-;v$N4|8B@Z$l>C5n$r9T$J$o$J$$(B +$B$H(B @sc{nov} $B%U%!%$%k$,:]8BL5$/B@$jB3$1!"?7J9l9g$K$O!"2a5n$NA45-;v$rJ]M-$7$F(B +$B$$$k>l9g$,>/$J$/$J$$$G$7$g$&!#@N$"$J$?$,6=$8$?0lO"$N5-;v$rFI$_JV$7$F2{$+(B +$B$7$`$?$a$K!"$=$&$$$&%0%k!<%W$G$O4|8B@Z$l>C5n$O$5$;$?$/$J$$$H;W$&$+$b$7$l(B +$B$^$;$s!#(B + +$B$N%a!<%k%P%C%/%(%s%I$HF1MM$NJ}(B +$BK!$G%0%k!<%WKh$K<+F04|8B@Z$l>C5n2DG=$K$7$?$j!";D$7$F$*$/4|4V$r@_Dj$9$k$3(B +$B$H$,$G$-$k$N$G$9(B (@xref{Expiring Mail})$B!#(B + +$B$?$@(B @code{nnshimbun} $B%P%C%/%(%s%I$N4|8B@Z$l>C5n$K$O!"B>$N%a!<%k%P%C%/%((B +$B%s%I$H>/$7$@$10c$&E@$,$"$j$^$9!#Bh0l$K!";D$7$F$*$/4|4V$N%G%#%U%)%k%HCM$K(B +@code{shimbun} $B%i%$%V%i%j$,Ds6!$9$kCM$,4X78$7!"0J2<$NM%@hEY$G4|4V$,7hDj(B +$B$5$l$k$3$H$G$9!#(B + +@example +$B%0%k!<%W%Q%i%a!<%?$N(B @code{expiry-wait} +@code{nnmail-expiry-wait-function} $B$rI>2A$7$?CM(B +@code{shimbun} $B%i%$%V%i%j$,Ds6!$9$k%0%k!<%WKh$N%G%#%U%)%k%HCM(B +@code{nnmail-expiry-wait} $B$NCM(B +@end example + +$BBhFs$K!"(B@code{nnmail-expiry-wait-function} $B$,4X?t$@$C$?>l9g$K!"$=$N0z?t(B +$B$KM?$($i$l$kJ8;zNs$K(B ``nnshimbin+asahi:national'' $B$N$h$&$K%P%C%/%(%s%I$H(B +$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!<(B +$B%WL>$@$1$,M?$($i$l$k$N$K!"$G$9!#0l$DNc$r5s$2$^$7$g$&!#(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 + +$B$3$l$O!"Nc$($P(B @code{nnml} $B$d(B @code{nnmh} $B$GC5n$9$k$,!"(B@code{nnshimbun} $B$GFI$`F1(B +$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(B +$B$9!#$I$&$G$9!"$J$+$J$+8-$$$G$7$g(B? + +$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(B +$B$$$F$*$-$^$9$,!"%0%k!<%W$N$9$Y$F$N5-;v$,4|8B@Z$l>C5n$NBP>]$K$J$C$F$7$^$C(B +$B$?$H$-$K!"(B@code{nnshimbun} $B$O:G8e$N0lDL$@$1$O>C$5$:$K;D$7$F$*$-$^$9!#$3(B +$B$l$O$"$J$?$NL$N}?4$rK~B-$5$;$k$?$a$G$O$J$/!"%5!<%P!<$+$i8E$$5-;v$r:F$S$N:v$J$N$G$9!#(B + +@code{nnshimbun} $B$N4|8B@Z$l>C5n$K4X78$9$k%0%k!<%W%Q%i%a!<%?$HJQ?t$O0J2<(B +$B$NDL$j$G$9!#(B + +@table @code +@item expiry-wait +@cindex expiry-wait +$B$I$&$+:.Mp$J$5$i$J$$$h$&$K!#(Bgnus $B$,Ds6!$7$F$$$kHFMQ$N%0%k!<%W%Q%i%a!<(B +$B%?(B @code{expiry-wait} $B$HF1$8L>A0$G0UL#$bF1$8$b$N$,(B @code{nnshimbun} $B@lMQ(B +$B$N%0%k!<%W%Q%i%a!<%?$K$bMQ0U$5$l$F$$$^$9!#$"$J$?$O$I$A$i$r;H$C$F$b9=$$$^(B +$B$;$s!#$b$7(B @code{nnshimbun} $B@lMQ$N%0%k!<%W%Q%i%a!<%?$NJ}$r(B @code{nil} $B0J(B +$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!#(B +$B$3$l$O!"%0%k!<%W%P%C%U%!$G(B @kbd{G c} $B$r%?%$%W$7$?$H$-$K8=$l$kJT=82hLL$K(B +$B$*$$$F!"(B@code{nnshimbun} $B$K4X78$9$k$b$N$r0l2U=j$K=8$a$k$?$a$H!"%f!<%6%*(B +$B%W%7%g%s(B @code{nnshimbun-group-parameters-alist} $B$G0l3g$7$F4IM}$G$-$k$h(B +$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!<(B +$B%?$HF1MM$K!";~8B>C5n$NF|?t!"(B@code{never} $B$^$?$O(B @code{immediate} $B$G$9!#(B + +@item nnshimbun-keep-unparsable-dated-articles +@vindex nnshimbun-keep-unparsable-dated-articles +$B$3$NJQ?t$NCM$,(B @code{nil} $B$G$J$$>l9g$O!":n@.$5$l$?$jAw?.$5$l$?;~9o$,$h$/(B +$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!#(B +$B=i4|CM$O(B @code{t} $B$G$9$,!"(B@code{nil} $B$K$9$k$H4|8B@Z$l>C5n$N=hM}$,9T$J$o(B +$B$l$k$H$-$K!"4|8B$,$o$+$i$J$$5-;v$G$bM-L5$r8@$o$:>C$7$F$7$^$$$^$9!#$^$"!"(B +$BG/$NJk$l$NBgA]=|$N$H$-$K$G$b;H$C$F2<$5$$!#(B @end table @node RSS @@ -16439,7 +16603,7 @@ bbbd $B%5!<%P!<$,A0$r;W$$IU$-$^$7$?!#$G$9$+$i!"H`$r@U$a$F(B $B2<$5$$!#(B @item -Fran.ANgois Pinard---$BB?$/$N!"B?$/$N6=L#?<$/40A4$J%P%0%l%]!<%H$H(B autoconf $B$N(B +Fran,Ag(Bois Pinard---$BB?$/$N!"B?$/$N6=L#?<$/40A4$J%P%0%l%]!<%H$H(B autoconf $B$N(B $B%5%]!<%H!#(B @end itemize @@ -18832,7 +18996,7 @@ Borges $B$K$h$C$F9;@5$5$l!"(BJost Krieger $B$K$h$C$F0lItJ,$r9;@5$5$l$^$7$?!# Christopher Davis, Andrew Eskilsson, Kai Grossjohann, -David K.ANegedal, +David K,Ae(Bgedal, Richard Pieri, Fabrice Popineau, Daniel Quinlan, @@ -18918,7 +19082,7 @@ Gunnar Horrigmo, Richard Hoskins, Brad Howes, Miguel de Icaza, -Fran.ANgois Felix Ingrand, +Fran,Ag(Bois Felix Ingrand, Tatsuya Ichikawa, @c ? Ishikawa Ichiro, @c Ishikawa Lee Iverson, diff --git a/texi/message-ja.texi b/texi/message-ja.texi index 5c8ecf3..8058bbe 100644 --- a/texi/message-ja.texi +++ b/texi/message-ja.texi @@ -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