Synch with Gnus.
authoryamaoka <yamaoka>
Wed, 20 Sep 2000 00:10:40 +0000 (00:10 +0000)
committeryamaoka <yamaoka>
Wed, 20 Sep 2000 00:10:40 +0000 (00:10 +0000)
lisp/ChangeLog
lisp/gnus-group.el
lisp/gnus-sum.el
lisp/nnheader.el
lisp/nnkiboze.el
texi/ChangeLog
texi/gnus-ja.texi
texi/gnus.texi

index fd23d5a..b5b0d63 100644 (file)
@@ -1,3 +1,15 @@
+2000-09-19 10:24:57  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-group.el (gnus-group-make-kiboze-group): Makedir.
+       * nnheader.el (nnheader-parse-nov): Remove Xref in mail-header-xref.
+       * gnus-sum.el (gnus-nov-parse-line): Ditto.
+       * nnkiboze.el (nnkiboze-file-coding-system): New.
+       (nnkiboze-retrieve-headers): Use it.
+       (nnkiboze-request-group): Ditto.
+       (nnkiboze-close-group): Ditto.
+       (nnkiboze-generate-group): Ditto.
+       (nnkiboze-enter-nov): Insert first Xref properly.
+
 2000-09-19  Dave Love  <fx@gnu.org>
 
        * nnmail.el (nnmail-cache-accepted-message-ids): Default to nil.
index 59cd3a9..da63fda 100644 (file)
@@ -2371,9 +2371,13 @@ score file entries for articles to include in the group."
        (push (cons header regexps) scores))
       scores)))
   (gnus-group-make-group group "nnkiboze" address)
-  (with-temp-file (gnus-score-file-name (concat "nnkiboze:" group))
-    (let (emacs-lisp-mode-hook)
-      (pp scores (current-buffer)))))
+  (let* ((score-file (gnus-score-file-name (concat "nnkiboze:" group)))
+        (score-dir (file-name-directory score-file)))
+    (unless (file-exists-p score-dir)
+      (make-directory score-dir))
+    (with-temp-file score-file
+      (let (emacs-lisp-mode-hook)
+       (pp scores (current-buffer))))))
 
 (defun gnus-group-add-to-virtual (n vgroup)
   "Add the current group to a virtual group."
index 51a0bfb..62ed97a 100644 (file)
@@ -3325,22 +3325,29 @@ Returns HEADER if it was entered in the DEPENDENCIES.  Returns nil otherwise."
        header)
 
     ;; overview: [num subject from date id refs chars lines misc]
-    (unless (eobp)
-      (forward-char))
-
-    (setq header
-         (make-full-mail-header
-          number                               ; number
-          (nnheader-nov-field)                 ; subject
-          (nnheader-nov-field)                 ; from
-          (nnheader-nov-field)                 ; date
-          (nnheader-nov-read-message-id)       ; id
-          (nnheader-nov-field)                 ; refs
-          (nnheader-nov-read-integer)          ; chars
-          (nnheader-nov-read-integer)          ; lines
-          (unless (eobp)
-            (nnheader-nov-field))              ; misc
-          (nnheader-nov-parse-extra)))         ; extra
+    (unwind-protect
+       (progn
+         (narrow-to-region (point) eol)
+         (unless (eobp)
+           (forward-char))
+
+         (setq header
+               (make-full-mail-header
+                number                         ; number
+                (nnheader-nov-field)           ; subject
+                (nnheader-nov-field)           ; from
+                (nnheader-nov-field)           ; date
+                (nnheader-nov-read-message-id) ; id
+                (nnheader-nov-field)           ; refs
+                (nnheader-nov-read-integer)    ; chars
+                (nnheader-nov-read-integer)    ; lines
+                (unless (eobp)
+                  (if (looking-at "Xref: ")
+                      (goto-char (match-end 0)))
+                  (nnheader-nov-field))        ; Xref
+                (nnheader-nov-parse-extra))))  ; extra
+
+      (widen))
 
     (when gnus-alter-header-function
       (funcall gnus-alter-header-function header))
index c2100c4..6239929 100644 (file)
@@ -348,7 +348,9 @@ This variable is a substitute for `mm-text-coding-system-for-write'.")
      (nnheader-nov-read-integer)       ; lines
      (if (eq (char-after) ?\n)
         nil
-       (nnheader-nov-field))           ; misc
+       (if (looking-at "Xref: ")
+          (goto-char (match-end 0)))
+       (nnheader-nov-field))           ; Xref
      (nnheader-nov-parse-extra))))     ; extra
 
 (defun nnheader-insert-nov (header)
index 10c5a0c..3c32a03 100644 (file)
@@ -57,6 +57,9 @@
 (defvoo nnkiboze-regexp nil
   "Regexp for matching component groups.")
 
+(defvoo nnkiboze-file-coding-system nnheader-text-coding-system
+  "Coding system for nnkiboze files.")
+
 \f
 
 (defconst nnkiboze-version "nnkiboze 1.0")
@@ -82,7 +85,8 @@
          (save-excursion
            (set-buffer nntp-server-buffer)
            (erase-buffer)
-           (nnheader-insert-file-contents nov)
+           (let ((nnheader-file-coding-system nnkiboze-file-coding-system))
+             (nnheader-insert-file-contents nov))
            (nnheader-nov-delete-outside-range
             (car articles) (car (last articles)))
            'nov))))))
          (nnkiboze-request-scan group))
        (if (not (file-exists-p nov-file))
            (nnheader-report 'nnkiboze "Can't select group %s" group)
-         (nnheader-insert-file-contents nov-file)
+         (let ((nnheader-file-coding-system nnkiboze-file-coding-system))
+           (nnheader-insert-file-contents nov-file))
          (if (zerop (buffer-size))
              (nnheader-insert "211 0 0 0 %s\n" group)
            (goto-char (point-min))
   ;; Remove NOV lines of articles that are marked as read.
   (when (and (file-exists-p (nnkiboze-nov-file-name))
             nnkiboze-remove-read-articles)
-    (with-temp-file (nnkiboze-nov-file-name)
-      (let ((cur (current-buffer)))
-       (nnheader-insert-file-contents (nnkiboze-nov-file-name))
-       (goto-char (point-min))
-       (while (not (eobp))
-         (if (not (gnus-article-read-p (read cur)))
-             (forward-line 1)
-           (gnus-delete-line))))))
-  (setq nnkiboze-current-group nil))
+    (let ((coding-system-for-write nnkiboze-file-coding-system)
+         (output-coding-system nnkiboze-file-coding-system))
+      (with-temp-file (nnkiboze-nov-file-name)
+       (let ((cur (current-buffer)) 
+             (nnheader-file-coding-system nnkiboze-file-coding-system))
+         (nnheader-insert-file-contents (nnkiboze-nov-file-name))
+         (goto-char (point-min))
+         (while (not (eobp))
+           (if (not (gnus-article-read-p (read cur)))
+               (forward-line 1)
+             (gnus-delete-line))))))
+    (setq nnkiboze-current-group nil)))
 
 (deffoo nnkiboze-open-server (server &optional defs)
   (unless (assq 'nnkiboze-regexp defs)
@@ -233,93 +241,95 @@ Finds out what articles are to be part of the nnkiboze groups."
     ;; Load the kiboze newsrc file for this group.
     (when (file-exists-p newsrc-file)
       (load newsrc-file))
-    (with-temp-file nov-file
-      (when (file-exists-p nov-file)
-       (nnheader-insert-file-contents nov-file))
-      (setq nov-buffer (current-buffer))
-      ;; Go through the active hashtb and add new all groups that match the
-      ;; kiboze regexp.
-      (mapatoms
-       (lambda (group)
-        (and (string-match nnkiboze-regexp
-                           (setq gname (symbol-name group))) ; Match
-             (not (assoc gname nnkiboze-newsrc)) ; It isn't registered
-             (numberp (car (symbol-value group))) ; It is active
-             (or (> nnkiboze-level 7)
-                 (and (setq glevel (nth 1 (nth 2 (gnus-gethash
-                                                  gname gnus-newsrc-hashtb))))
-                      (>= nnkiboze-level glevel)))
-             (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
-             (push (cons gname (1- (car (symbol-value group))))
-                   nnkiboze-newsrc)))
-       gnus-active-hashtb)
-      ;; `newsrc' is set to the list of groups that possibly are
-      ;; component groups to this kiboze group.  This list has elements
-      ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
-      ;; number that has been kibozed in GROUP in this kiboze group.
-      (setq newsrc nnkiboze-newsrc)
-      (while newsrc
-       (if (not (setq active (gnus-gethash
-                              (caar newsrc) gnus-active-hashtb)))
-           ;; This group isn't active after all, so we remove it from
-           ;; the list of component groups.
-           (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
-         (setq lowest (cdar newsrc))
-         ;; Ok, we have a valid component group, so we jump to it.
-         (switch-to-buffer gnus-group-buffer)
-         (gnus-group-jump-to-group (caar newsrc))
-         (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
-         (setq ginfo (gnus-get-info (gnus-group-group-name))
-               orig-info (gnus-copy-sequence ginfo)
-               num-unread (car (gnus-gethash (caar newsrc)
-                                             gnus-newsrc-hashtb)))
-         (unwind-protect
-             (progn
-               ;; We set all list of article marks to nil.  Since we operate
-               ;; on copies of the real lists, we can destroy anything we
-               ;; want here.
-               (when (nth 3 ginfo)
-                 (setcar (nthcdr 3 ginfo) nil))
-               ;; We set the list of read articles to be what we expect for
-               ;; this kiboze group -- either nil or `(1 . LOWEST)'.
-               (when ginfo
-                 (setcar (nthcdr 2 ginfo)
-                         (and (not (= lowest 1)) (cons 1 lowest))))
-               (when (and (or (not ginfo)
-                              (> (length (gnus-list-of-unread-articles
-                                          (car ginfo)))
-                                 0))
-                          (progn
-                            (ignore-errors
-                              (gnus-group-select-group nil))
-                            (eq major-mode 'gnus-summary-mode)))
-                 ;; We are now in the group where we want to be.
-                 (setq method (gnus-find-method-for-group
-                               gnus-newsgroup-name))
-                 (when (eq method gnus-select-method)
-                   (setq method nil))
-                 ;; We go through the list of scored articles.
-                 (while gnus-newsgroup-scored
-                   (when (> (caar gnus-newsgroup-scored) lowest)
-                     ;; If it has a good score, then we enter this article
-                     ;; into the kiboze group.
-                     (nnkiboze-enter-nov
-                      nov-buffer
-                      (gnus-summary-article-header
-                       (caar gnus-newsgroup-scored))
-                      gnus-newsgroup-name))
-                   (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
-                 ;; That's it.  We exit this group.
-                 (when (eq major-mode 'gnus-summary-mode)
-                   (kill-buffer (current-buffer)))))
-           ;; Restore the proper info.
-           (when ginfo
-             (setcdr ginfo (cdr orig-info)))
-           (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
-                   num-unread)))
-       (setcdr (car newsrc) (car active))
-       (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
-       (setq newsrc (cdr newsrc))))
+    (let ((coding-system-for-write nnkiboze-file-coding-system)
+         (output-coding-system nnkiboze-file-coding-system))
+      (with-temp-file nov-file
+       (when (file-exists-p nov-file)
+         (nnheader-insert-file-contents nov-file))
+       (setq nov-buffer (current-buffer))
+       ;; Go through the active hashtb and add new all groups that match the
+       ;; kiboze regexp.
+       (mapatoms
+        (lambda (group)
+          (and (string-match nnkiboze-regexp
+                             (setq gname (symbol-name group))) ; Match
+               (not (assoc gname nnkiboze-newsrc)) ; It isn't registered
+               (numberp (car (symbol-value group))) ; It is active
+               (or (> nnkiboze-level 7)
+                   (and (setq glevel (nth 1 (nth 2 (gnus-gethash
+                                                    gname gnus-newsrc-hashtb))))
+                        (>= nnkiboze-level glevel)))
+               (not (string-match "^nnkiboze:" gname)) ; Exclude kibozes
+               (push (cons gname (1- (car (symbol-value group))))
+                     nnkiboze-newsrc)))
+        gnus-active-hashtb)
+       ;; `newsrc' is set to the list of groups that possibly are
+       ;; component groups to this kiboze group.  This list has elements
+       ;; on the form `(GROUP . NUMBER)', where NUMBER is the highest
+       ;; number that has been kibozed in GROUP in this kiboze group.
+       (setq newsrc nnkiboze-newsrc)
+       (while newsrc
+         (if (not (setq active (gnus-gethash
+                                (caar newsrc) gnus-active-hashtb)))
+             ;; This group isn't active after all, so we remove it from
+             ;; the list of component groups.
+             (setq nnkiboze-newsrc (delq (car newsrc) nnkiboze-newsrc))
+           (setq lowest (cdar newsrc))
+           ;; Ok, we have a valid component group, so we jump to it.
+           (switch-to-buffer gnus-group-buffer)
+           (gnus-group-jump-to-group (caar newsrc))
+           (gnus-message 3 "nnkiboze: Checking %s..." (caar newsrc))
+           (setq ginfo (gnus-get-info (gnus-group-group-name))
+                 orig-info (gnus-copy-sequence ginfo)
+                 num-unread (car (gnus-gethash (caar newsrc)
+                                               gnus-newsrc-hashtb)))
+           (unwind-protect
+               (progn
+                 ;; We set all list of article marks to nil.  Since we operate
+                 ;; on copies of the real lists, we can destroy anything we
+                 ;; want here.
+                 (when (nth 3 ginfo)
+                   (setcar (nthcdr 3 ginfo) nil))
+                 ;; We set the list of read articles to be what we expect for
+                 ;; this kiboze group -- either nil or `(1 . LOWEST)'.
+                 (when ginfo
+                   (setcar (nthcdr 2 ginfo)
+                           (and (not (= lowest 1)) (cons 1 lowest))))
+                 (when (and (or (not ginfo)
+                                (> (length (gnus-list-of-unread-articles
+                                            (car ginfo)))
+                                   0))
+                            (progn
+                              (ignore-errors
+                                (gnus-group-select-group nil))
+                              (eq major-mode 'gnus-summary-mode)))
+                   ;; We are now in the group where we want to be.
+                   (setq method (gnus-find-method-for-group
+                                 gnus-newsgroup-name))
+                   (when (eq method gnus-select-method)
+                     (setq method nil))
+                   ;; We go through the list of scored articles.
+                   (while gnus-newsgroup-scored
+                     (when (> (caar gnus-newsgroup-scored) lowest)
+                       ;; If it has a good score, then we enter this article
+                       ;; into the kiboze group.
+                       (nnkiboze-enter-nov
+                        nov-buffer
+                        (gnus-summary-article-header
+                         (caar gnus-newsgroup-scored))
+                        gnus-newsgroup-name))
+                     (setq gnus-newsgroup-scored (cdr gnus-newsgroup-scored)))
+                   ;; That's it.  We exit this group.
+                   (when (eq major-mode 'gnus-summary-mode)
+                     (kill-buffer (current-buffer)))))
+             ;; Restore the proper info.
+             (when ginfo
+               (setcdr ginfo (cdr orig-info)))
+             (setcar (gnus-gethash (caar newsrc) gnus-newsrc-hashtb)
+                     num-unread)))
+         (setcdr (car newsrc) (car active))
+         (gnus-message 3 "nnkiboze: Checking %s...done" (caar newsrc))
+         (setq newsrc (cdr newsrc)))))
     ;; We save the kiboze newsrc for this group.
     (with-temp-file newsrc-file
       (insert "(setq nnkiboze-newsrc '")
@@ -343,19 +353,22 @@ Finds out what articles are to be part of the nnkiboze groups."
            (forward-line 1))
        (setq article 1))
       (mail-header-set-number oheader article)
-      (nnheader-insert-nov oheader)
-      (search-backward "\t" nil t 2)
-      (if (re-search-forward " [^ ]+:[0-9]+" nil t)
-         (goto-char (match-beginning 0))
+      (with-temp-buffer
+       (insert (mail-header-xref oheader))
+       (goto-char (point-min))
+       (if (re-search-forward " [^ ]+:[0-9]+" nil t)
+           (goto-char (match-beginning 0))
        (forward-char 1))
-      ;; The first Xref has to be the group this article
-      ;; really came for - this is the article nnkiboze
-      ;; will request when it is asked for the article.
-      (insert " " group ":"
-             (int-to-string (mail-header-number header)) " ")
-      (while (re-search-forward " [^ ]+:[0-9]+" nil t)
-       (goto-char (1+ (match-beginning 0)))
-       (insert prefix)))))
+       ;; The first Xref has to be the group this article
+       ;; really came for - this is the article nnkiboze
+       ;; will request when it is asked for the article.
+       (insert " " group ":"
+               (int-to-string (mail-header-number header)) " ")
+       (while (re-search-forward " [^ ]+:[0-9]+" nil t)
+         (goto-char (1+ (match-beginning 0)))
+         (insert prefix))
+       (mail-header-set-xref oheader (buffer-string)))
+      (nnheader-insert-nov oheader))))
 
 (defun nnkiboze-nov-file-name (&optional suffix)
   (concat (file-name-as-directory nnkiboze-directory)
index 91e231f..f8415b5 100644 (file)
@@ -1,3 +1,8 @@
+2000-09-19  Kai Grossjohann  <Kai.Grossjohann@CS.Uni-Dortmund.DE>
+
+       * gnus.texi (IMAP): Add pointer to description of ~/.authinfo file
+       format.
+
 2000-09-17 Felix Natter  <f.natter@ndh.net>
 
        * gnusref.tex: New version.
index 0025ad5..5ce5d07 100644 (file)
@@ -13151,14 +13151,15 @@ IMAP \e$B@\B3$K\e(B @code{shell} \e$B%9%H%j!<%`$r;H$&>l9g!"JQ\e(B
 \e$B%a!<%k%\%C%/%9$rJD$8$k$H$-$K!"\e(Bnnimap \e$B$,>C5n$5$l$?5-;v$r:o=|$9$k$+$I$&$+\e(B
 \e$B$r?R$M$^$9!#\e(B
 
+@end table
+
 @item nnimap-authinfo-file
 @vindex nnimap-authinfo-file
 
 \e$B%5!<%P$K%m%0%$%s$9$k$?$a$K;H$&G'>Z>pJs\e(B (authinfo) \e$B$r4^$`%U%!%$%k$G$9!#$=\e(B
 \e$B$N7A<0$O\e(B (\e$B$[$H$s$I\e(B) @code{ftp} \e$B$N\e(B @file{~/.netrc} \e$B%U%!%$%k$HF1$8$G$9!#87\e(B
-\e$BL)$?Dj5A$O\e(B `nntp-authinfo-file'\e$B$r8+$F2<$5$$!#\e(B
-
-@end table
+\e$BL)$JDj5A$O!"JQ?t\e(B @code{nntp-authinfo-file} \e$B$*$h$S\e(B @xref{NNTP} \e$B$r8+$F2<$5\e(B
+\e$B$$!#\e(B
 
 @end table
 
index 31b8c96..e40820b 100644 (file)
@@ -13721,14 +13721,15 @@ manually, @xref{Expunging mailboxes}.
 When closing mailboxes, nnimap will ask if you wish to expunge deleted
 articles or not.
 
+@end table
+
 @item nnimap-authinfo-file
 @vindex nnimap-authinfo-file
 
-A file containing credentials used to log in on servers.  The format
-is (almost) the same as the @code{ftp} @file{~/.netrc} file.  See
-`nntp-authinfo-file' for exact syntax.
-
-@end table
+A file containing credentials used to log in on servers.  The format is
+(almost) the same as the @code{ftp} @file{~/.netrc} file.  See the
+variable @code{nntp-authinfo-file} for exact syntax; also see
+@xref{NNTP}.
 
 @end table