*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 02:37:55 +0000 (02:37 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Tue, 4 Mar 1997 02:37:55 +0000 (02:37 +0000)
lisp/ChangeLog
lisp/gnus-msg.el
lisp/gnus-score.el
lisp/gnus.el
lisp/nnkiboze.el
lisp/nntp.el
lisp/nnvirtual.el
texi/Makefile

index cd07b3d..7a1bf8c 100644 (file)
@@ -1,5 +1,58 @@
+Sat Jul  1 16:04:13 1995  Lars Magne Ingebrigtsen  <lingebri@sunscipw.cern.ch>
+
+       * gnus.el (gnus-summary-edit-article-done): No arguments to
+       buffer-disable-undo. 
+
+       * nnkiboze.el (nnkiboze-generate-group): Turn off slow stuff. 
+
+       * gnus-msg.el (gnus-inews-news): Don't restore the summary config
+       if posting is unsuccessful.
+
+       * gnus-score.el (gnus-score-find-trace): Don't pop to score window
+       if no scores apply.
+
+       * gnus-msg.el (gnus-summary-cancel-article): Don't mark article as
+       cancelled if they are not. 
+       (gnus-mail-reply-using-mail): Change map after running mail-setup. 
+
+       * gnus.el (gnus-group-best-unread-group): Would return a group
+       that was supposed to be excluded. 
+       (gnus-summary-next-group): Skip empty groups. 
+
+       * nntp.el (nntp-open-server-semi-internal): Don't attempt a second
+       async connection if the server is down. 
+
+       * gnus.el (gnus-summary-goto-last-article): Doc fix. 
+       (gnus-no-server): Use permanent levels. 
+
+       * gnus-msg.el: Unhide and hide was unnecessary when forwarding and
+       replying and stuff. 
+
+       * nnvirtual.el (nnvirtual-retrieve-headers): Mark cancelled and
+       expired articles as read in the component group. 
+       (nnvirtual-update-marked): When removing all marks, they wouldn't
+       go away.
+
+       * gnus.el (gnus-summary-catchup): Do thorough nnvirtual catchups. 
+
+Fri Jun 30 09:10:57 1995  Lars Magne Ingebrigtsen  <lingebri@sunscipw.cern.ch>
+
+       * gnus.el: gnus-bug wasn't interactive.
+
+Thu Jun 29 13:42:33 1995  Lars Magne Ingebrigtsen  <lingebri@sunscipw.cern.ch>
+
+       * gnus.el (gnus-summary-catchup-to-here): Would mark one article
+       too many. 
+       (gnus-articles-to-read): Accept whitespace.
+       (gnus-summary-go-to-next-thread): Didn't go to next thread when
+       threads were hidden.
+       (gnus-summary-display-article): When the first article was
+       cancelled, point would remain in the group buffer.
+
 Wed Jun 28 16:24:38 1995  Lars Magne Ingebrigtsen  <lingebri@sunscipw.cern.ch>
 
+       * gnus.el: 0.89 is released.
+
        * nnfolder.el (nnfolder-directory): file-name-as-directory thing. 
 
        * gnus-mh.el (gnus-mail-reply-using-mhe): Set gnus-mail-buffer to
index 451ffb2..e09a58e 100644 (file)
@@ -284,7 +284,7 @@ If prefix argument YANK is non-nil, original article is yanked automatically."
   (gnus-set-global-variables)
   (if yank-articles (gnus-summary-goto-subject (car yank-articles)))
   (save-window-excursion
-    (gnus-summary-select-article t))
+    (gnus-summary-select-article))
   (let ((headers gnus-current-headers)
        (gnus-newsgroup-name gnus-newsgroup-name))
     ;; Check Followup-To: poster.
@@ -298,8 +298,7 @@ If prefix argument YANK is non-nil, original article is yanked automatically."
        (gnus-summary-reply yank)
       (gnus-post-news nil gnus-newsgroup-name
                      headers gnus-article-buffer 
-                     (or yank-articles (not (not yank))))))
-  (gnus-article-hide-headers-if-wanted))
+                     (or yank-articles (not (not yank)))))))
 
 (defun gnus-summary-followup-with-original (n)
   "Compose a followup to an article and include the original article."
@@ -326,9 +325,9 @@ If prefix argument YANK is non-nil, original article is yanked automatically."
   (let ((articles (gnus-summary-work-articles n)))
     (while articles
       (gnus-summary-select-article t nil nil (car articles))
-      (gnus-eval-in-buffer-window gnus-article-buffer (gnus-cancel-news))
+      (and (gnus-eval-in-buffer-window gnus-article-buffer (gnus-cancel-news))
+          (gnus-summary-mark-as-read (car articles) gnus-canceled-mark))
       (gnus-summary-remove-process-mark (car articles))
-      (gnus-summary-mark-as-read (car articles) gnus-canceled-mark)
       (gnus-article-hide-headers-if-wanted)
       (setq articles (cdr articles)))))
 
@@ -531,7 +530,8 @@ will attempt to use the foreign server to post the article."
   (interactive "P")
   (let* ((case-fold-search nil)
         (server-running (gnus-server-opened gnus-select-method))
-        (reply gnus-article-reply))
+        (reply gnus-article-reply)
+        error)
     (save-excursion
       ;; Connect to default NNTP server if necessary.
       ;; Suggested by yuki@flab.fujitsu.junet.
@@ -693,6 +693,7 @@ will attempt to use the foreign server to post the article."
                    (gnus-summary-mark-article-as-replied 
                     (cdr reply))))))
        ;; We cannot signal an error.
+       (setq error t)
        (ding) (gnus-message 1 "Article rejected: %s" 
                             (gnus-status-message gnus-select-method)))
       (set-buffer-modified-p nil))
@@ -702,7 +703,7 @@ will attempt to use the foreign server to post the article."
     (let ((conf gnus-prev-winconf))
       (bury-buffer)
       ;; Restore last window configuration.
-      (and conf (set-window-configuration conf)))))
+      (and conf (not error) (set-window-configuration conf)))))
 
 (defun gnus-inews-check-post ()
   "Check whether the post looks ok."
@@ -869,7 +870,8 @@ will attempt to use the foreign server to post the article."
                (downcase (mail-strip-quoted-names from))
                (downcase (mail-strip-quoted-names (gnus-inews-user-name)))))
              (progn
-               (ding) (gnus-message 3 "This article is not yours."))
+               (ding) (gnus-message 3 "This article is not yours.")
+               nil)
            ;; Make control article.
            (set-buffer (get-buffer-create " *Gnus-canceling*"))
            (buffer-disable-undo (current-buffer))
@@ -884,13 +886,17 @@ will attempt to use the foreign server to post the article."
                    "This is a cancel message from " from ".\n")
            ;; Send the control article to NNTP server.
            (gnus-message 5 "Canceling your article...")
-           (if (funcall gnus-inews-article-function)
-               (gnus-message 5 "Canceling your article...done")
-             (ding) 
-             (gnus-message 1 "Cancel failed; %s" 
-                           (gnus-status-message gnus-newsgroup-name)))
-           ;; Kill the article buffer.
-           (kill-buffer (current-buffer)))))))
+           (prog1
+               (if (funcall gnus-inews-article-function)
+                   (gnus-message 5 "Canceling your article...done")
+                 (progn
+                   (ding) 
+                   (gnus-message 1 "Cancel failed; %s" 
+                                 (gnus-status-message gnus-newsgroup-name))
+                   nil)
+                 t)
+             ;; Kill the article buffer.
+             (kill-buffer (current-buffer))))))))
 
 \f
 ;;; Lowlevel inews interface
@@ -1319,11 +1325,10 @@ Customize the variable gnus-mail-reply-method to use another mailer."
   ;; Stripping headers should be specified with mail-yank-ignored-headers.
   (gnus-set-global-variables)
   (if yank-articles (gnus-summary-goto-subject (car yank-articles)))
-  (gnus-summary-select-article t)
+  (gnus-summary-select-article)
   (let ((gnus-newsgroup-name gnus-newsgroup-name))
     (bury-buffer gnus-article-buffer)
-    (funcall gnus-mail-reply-method (or yank-articles (not (not yank)))))
-  (gnus-article-hide-headers-if-wanted))
+    (funcall gnus-mail-reply-method (or yank-articles (not (not yank))))))
 
 (defun gnus-summary-reply-with-original (n)
   "Reply mail to news author with original article.
@@ -1336,13 +1341,12 @@ Customize the variable gnus-mail-reply-method to use another mailer."
 Customize the variable gnus-mail-forward-method to use another mailer."
   (interactive "P")
   (gnus-set-global-variables)
-  (gnus-summary-select-article t)
+  (gnus-summary-select-article)
   (gnus-copy-article-buffer)
   (let ((gnus-newsgroup-name gnus-newsgroup-name))
     (if post
        (gnus-forward-using-post gnus-article-copy)
-      (funcall gnus-mail-forward-method gnus-article-copy)))
-  (gnus-article-hide-headers-if-wanted))
+      (funcall gnus-mail-forward-method gnus-article-copy))))
 
 (defun gnus-summary-post-forward ()
   "Forward the current article to a newsgroup."
@@ -1390,8 +1394,6 @@ mailer."
       (setq gnus-article-reply cur)
       (make-local-variable 'gnus-prev-winconf)
       (setq gnus-prev-winconf winconf)
-      (use-local-map (copy-keymap mail-mode-map))
-      (local-set-key "\C-c\C-c" 'gnus-mail-send-and-exit)
       (if (and (buffer-modified-p)
               (> (buffer-size) 0)
               (not (gnus-y-or-n-p 
@@ -1441,6 +1443,9 @@ mailer."
                          (or follow-to reply-to from sender "")))
                    subject message-of nil gnus-article-copy nil)
 
+       (use-local-map (copy-keymap mail-mode-map))
+       (local-set-key "\C-c\C-c" 'gnus-mail-send-and-exit)
+
        (if (and follow-to (listp follow-to))
            (progn
              (goto-char (point-min))
index d0f8635..d182d97 100644 (file)
@@ -1547,11 +1547,10 @@ This mode is an extended emacs-lisp mode.
        trace)
     (setq gnus-score-trace nil)
     (gnus-possibly-score-headers 'trace)
+    (or (setq trace gnus-score-trace)
+       (error "No score rules apply to the current article."))
     (pop-to-buffer "*Gnus Scores*")
     (erase-buffer)
-    (setq trace gnus-score-trace)
-    (or trace
-       (error "No score rules apply to the current article."))
     (while trace
       (insert (format "%S\n" (cdr (car trace))))
       (setq trace (cdr trace)))
index 3763bdd..4b6d1a7 100644 (file)
@@ -1291,7 +1291,7 @@ variable (string, integer, character, etc).")
 (defconst gnus-maintainer "gnus-bug@ifi.uio.no (The Gnus Bugfixing Girls & Boys)"
   "The mail address of the Gnus maintainers.")
 
-(defconst gnus-version "(ding) Gnus v0.89"
+(defconst gnus-version "(ding) Gnus v0.90"
   "Version number for this version of Gnus.")
 
 (defvar gnus-info-nodes
@@ -1661,7 +1661,7 @@ Thank you for your help in stamping out bugs.
   (autoload 'gnus-mail-other-window-using-mail "gnus-msg")
   (autoload 'gnus-article-mail-with-original "gnus-msg")
   (autoload 'gnus-article-mail "gnus-msg")
-  (autoload 'gnus-bug "gnus-msg")
+  (autoload 'gnus-bug "gnus-msg" nil t)
 
   ;; gnus-vm
   (autoload 'gnus-summary-save-in-vm "gnus-vm" nil t)
@@ -3071,6 +3071,7 @@ If ARG is non-nil and not a positive number, Gnus will
 prompt the user for the name of an NNTP server to use.
 As opposed to `gnus', this command will not connect to the local server."
   (interactive "P")
+  (setq gnus-group-use-permanent-levels t)
   (gnus (or arg (1- gnus-level-default-subscribed)) t))
 
 (defalias '\(ding\) 'gnus)
@@ -3801,7 +3802,6 @@ If EXCLUDE-GROUP, do not go to that group."
     (while (setq unread (get-text-property (point) 'gnus-unread))
       (if (and (numberp unread) (> unread 0))
          (progn
-           (or best-point (setq best-point (point)))
            (if (and (< (get-text-property (point) 'gnus-level) best)
                     (or (not exclude-group)
                         (not (equal exclude-group (gnus-group-group-name)))))
@@ -4416,7 +4416,7 @@ specify which levels you are interested in re-scanning."
          (gnus-read-active-file)
          (gnus-get-unread-articles (or level (1+ gnus-level-subscribed))))
       (let ((gnus-read-active-file nil)
-           (gnus-have-read-active-file nil))
+           (gnus-have-read-active-file (not arg)))
        (gnus-get-unread-articles (or level (1+ gnus-level-subscribed)))))
     (gnus-group-list-groups (or (and gnus-group-use-permanent-levels level)
                                gnus-group-default-list-level
@@ -6232,7 +6232,7 @@ If READ-ALL is non-nil, all articles in the group are selected."
                               (format
                                "How many articles from %s (default %d): "
                                gnus-newsgroup-name number))))
-                        (if (string-equal input "")
+                        (if (string-match "^[ \t]*$" input)
                             number input)))
                      ((and (> scored marked) (< scored number))
                       (let ((input
@@ -6505,67 +6505,71 @@ The resulting hash table is returned, or nil if no Xrefs were found."
                            ;; Only do cross-references on subscribed
                            ;; groups, if that is what is wanted.  
                            (<= (nth 1 info) gnus-level-subscribed)))
-                  (progn
-                    (setq num 0)
-                    ;; Set the new list of read articles in this group.
-                    (setq active (gnus-gethash name gnus-active-hashtb))
-                    ;; First peel off all illegal article numbers.
-                    (if active
-                        (let ((ids idlist)
-                              (ticked (cdr (assq 'tick (nth 3 info))))
-                              (dormant (cdr (assq 'dormant (nth 3 info))))
-                              id)
-                          (setq exps nil)
-                          (while ids
-                            (setq id (car ids))
-                            (if (or (> id (cdr active))
-                                    (< id (car active))
-                                    (memq id ticked)
-                                    (memq id dormant))
-                                (setq idlist (delq id idlist)))
-                            (and (memq id expirable)
-                                 (setq exps (cons id exps)))
-                            (setq ids (cdr ids)))))
-                    ;; Update expirable articles.
-                    (gnus-add-marked-articles nil 'expirable exps info)
-                    (and active
-                         (null (nth 2 info))
-                         (> (car active) 1)
-                         (setcar (nthcdr 2 info) (cons 1 (1- (car active)))))
-                    (setcar (nthcdr 2 info)
-                            (setq range
-                                  (gnus-add-to-range 
-                                   (nth 2 info) 
-                                   (setq idlist (sort idlist '<)))))
-                    ;; Then we have to re-compute how many unread
-                    ;; articles there are in this group.
-                    (if active
-                        (progn
-                          (cond 
-                           ((not range)
-                            (setq num (- (1+ (cdr active)) (car active))))
-                           ((not (listp (cdr range)))
-                            (setq num (- (cdr active) (- (1+ (cdr range)) 
-                                                         (car range)))))
-                           (t
-                            (while range
-                              (if (numberp (car range))
-                                  (setq num (1+ num))
-                                (setq num (+ num (- (1+ (cdr (car range)))
-                                                    (car (car range))))))
-                              (setq range (cdr range)))
-                            (setq num (- (cdr active) num))))
-                          ;; Update the number of unread articles.
-                          (setcar 
-                           entry 
-                           (max 0 (- num 
-                                     (length (cdr (assq 'tick (nth 3 info))))
-                                     (length 
-                                      (cdr (assq 'dormant (nth 3 info)))))))
-                          ;; Update the group buffer.
-                          (gnus-group-update-group name t)))))))
+                  (gnus-group-make-articles-read name idlist expirable))))
           xref-hashtb)))))
 
+(defun gnus-group-make-articles-read (group articles expirable)
+  (let* ((num 0)
+        (entry (gnus-gethash group gnus-newsrc-hashtb))
+        (info (nth 2 entry))
+        (active (gnus-gethash name gnus-active-hashtb))
+        exps expirable range)
+    ;; First peel off all illegal article numbers.
+    (if active
+       (let ((ids articles)
+             (ticked (cdr (assq 'tick (nth 3 info))))
+             (dormant (cdr (assq 'dormant (nth 3 info))))
+             id)
+         (setq exps nil)
+         (while ids
+           (setq id (car ids))
+           (if (or (> id (cdr active))
+                   (< id (car active))
+                   (memq id ticked)
+                   (memq id dormant))
+               (setq articles (delq id articles)))
+           (and (memq id expirable)
+                (setq exps (cons id exps)))
+           (setq ids (cdr ids)))))
+    ;; Update expirable articles.
+    (gnus-add-marked-articles nil 'expirable exps info)
+    (and active
+        (null (nth 2 info))
+        (> (car active) 1)
+        (setcar (nthcdr 2 info) (cons 1 (1- (car active)))))
+    (setcar (nthcdr 2 info)
+           (setq range
+                 (gnus-add-to-range 
+                  (nth 2 info) 
+                  (setq articles (sort articles '<)))))
+    ;; Then we have to re-compute how many unread
+    ;; articles there are in this group.
+    (if active
+       (progn
+         (cond 
+          ((not range)
+           (setq num (- (1+ (cdr active)) (car active))))
+          ((not (listp (cdr range)))
+           (setq num (- (cdr active) (- (1+ (cdr range)) 
+                                        (car range)))))
+          (t
+           (while range
+             (if (numberp (car range))
+                 (setq num (1+ num))
+               (setq num (+ num (- (1+ (cdr (car range)))
+                                   (car (car range))))))
+             (setq range (cdr range)))
+           (setq num (- (cdr active) num))))
+         ;; Update the number of unread articles.
+         (setcar 
+          entry 
+          (max 0 (- num 
+                    (length (cdr (assq 'tick (nth 3 info))))
+                    (length 
+                     (cdr (assq 'dormant (nth 3 info)))))))
+         ;; Update the group buffer.
+         (gnus-group-update-group name t)))))
+
 (defun gnus-methods-equal-p (m1 m2)
   (let ((m1 (or m1 gnus-select-method))
        (m2 (or m2 gnus-select-method)))
@@ -7046,8 +7050,6 @@ article number."
   (or (cdr (assq (gnus-summary-article-number) gnus-newsgroup-scored))
       gnus-summary-default-score 0))
 
-;; Written by Sudish Joseph <joseph@cis.ohio-state.edu>.
-
 (defun gnus-summary-recenter ()
   "Center point in the summary window.
 If `gnus-auto-center-summary' is nil, or the article buffer isn't
@@ -7381,6 +7383,8 @@ If BACKWARD, go to previous group instead."
       (gnus-summary-exit t)            ;Update all information.
       (if (null group)
          (gnus-summary-exit-no-update t)
+       (gnus-group-jump-to-group ingroup)
+       (setq group (gnus-summary-search-group backward))
        (gnus-message 5 "Selecting %s..." group)
        (set-buffer gnus-group-buffer)
        ;; We are now in group mode buffer.
@@ -7395,6 +7399,8 @@ If BACKWARD, go to previous group instead."
                     (set-buffer (setq gnus-summary-buffer sumbuf))
                     (gnus-summary-exit-no-update t))))
          (let ((prevgroup group))
+           (gnus-group-jump-to-group ingroup)
+           (setq group (gnus-summary-search-group backward))
            (gnus-summary-read-group group nil no-article sumbuf)
            (while (and (string= gnus-newsgroup-name ingroup)
                        (bufferp sumbuf) 
@@ -7516,22 +7522,21 @@ If optional argument UNREAD is non-nil, only unread article is selected."
   (gnus-set-global-variables)
   (if (null article)
       nil
-    (gnus-article-prepare article all-header)
-    (gnus-summary-show-thread)
-    (if (eq (gnus-summary-article-mark) gnus-dummy-mark)
-       (progn
-         (forward-line 1)
-         (gnus-summary-position-cursor)))
-    (run-hooks 'gnus-select-article-hook)
-    (gnus-summary-recenter)
-;    (set-window-point (get-buffer-window (current-buffer)) (point-max))
-;    (sit-for 0)
-    (gnus-summary-goto-subject article)
-    ;; Successfully display article.
-    (gnus-summary-update-line)
-    (gnus-article-set-window-start 
-     (cdr (assq article gnus-newsgroup-bookmarks)))
-    t))
+    (prog1
+       (gnus-article-prepare article all-header)
+      (gnus-summary-show-thread)
+      (if (eq (gnus-summary-article-mark) gnus-dummy-mark)
+         (progn
+           (forward-line 1)
+           (gnus-summary-position-cursor)))
+      (run-hooks 'gnus-select-article-hook)
+      (gnus-summary-recenter)
+      (gnus-summary-goto-subject article)
+      ;; Successfully display article.
+      (gnus-summary-update-line)
+      (gnus-article-set-window-start 
+       (cdr (assq article gnus-newsgroup-bookmarks)))
+      t)))
 
 (defun gnus-summary-select-article (&optional all-headers force pseudo article)
   "Select the current article.
@@ -7815,7 +7820,7 @@ If ALL-HEADERS is non-nil, no header lines are hidden."
     (gnus-summary-position-cursor)))
 
 (defun gnus-summary-goto-last-article ()
-  "Go to the last article."
+  "Go to the previously read article."
   (interactive)
   (prog1
       (and gnus-last-article
@@ -8485,7 +8490,7 @@ This will have permanent effect only in mail groups."
     (gnus-article-mode)
     (use-local-map gnus-article-mode-map)
     (setq buffer-read-only t)
-    (buffer-disable-undo)
+    (buffer-disable-undo (current-buffer))
     (pop-to-buffer gnus-summary-buffer)))      
 
 (defun gnus-summary-fancy-query ()
@@ -9196,21 +9201,26 @@ The number of articles marked as read is returned."
            ;; have to do when using auto-expiry or adaptive scoring. 
            (let ((unreads (length gnus-newsgroup-unreads)))
              (if (gnus-summary-first-subject (not all))
-                 (while (and (gnus-summary-mark-as-read nil gnus-catchup-mark)
-                             (if to-here (< (point) to-here) t)
+                 (while (and (if to-here (< (point) to-here) t)
+                             (gnus-summary-mark-as-read nil gnus-catchup-mark)
                              (gnus-summary-search-subject nil (not all)))))
              (- unreads (length gnus-newsgroup-unreads))
              (or to-here
                  (setq gnus-newsgroup-unreads gnus-newsgroup-marked)))))
+    (let ((method (gnus-find-method-for-group gnus-newsgroup-name)))
+      (if (and (not to-here) (eq 'nnvirtual (car method)))
+         (nnvirtual-catchup-group
+          (gnus-group-real-name gnus-newsgroup-name) (nth 1 method) all)))
     (gnus-summary-position-cursor)))
 
 (defun gnus-summary-catchup-to-here (&optional all)
   "Mark all unticked articles before the current one as read.
 If ALL is non-nil, also mark ticked and dormant articles as read."
   (interactive)
-  (beginning-of-line)
-  (gnus-summary-catchup all t (point))
-  (gnus-set-mode-line 'summary)
+  (save-excursion
+    (end-of-line)
+    (gnus-summary-catchup all t (point))
+    (gnus-set-mode-line 'summary))
   (gnus-summary-position-cursor))
 
 (defun gnus-summary-catchup-all (&optional quietly)
@@ -9319,9 +9329,12 @@ Return the article number moved to, or nil if moving was impossible."
   (let ((level (gnus-summary-thread-level))
        (article (gnus-summary-article-number)))
     (if previous 
-       (while (and (zerop (gnus-summary-prev-subject 1))
+       (while (and (zerop (forward-line -1))
                    (> (gnus-summary-thread-level) level)))
-      (while (and (zerop (gnus-summary-next-subject 1))
+      (while (and (save-excursion
+                   (forward-line 1)
+                   (not (eobp)))
+                 (zerop (forward-line 1))
                  (> (gnus-summary-thread-level) level))))
     (gnus-summary-recenter)
     (gnus-summary-position-cursor)
@@ -9885,7 +9898,7 @@ is initialized from the SAVEDIR environment variable."
          "\M-g" "w" "\C-c\C-r" "\M-t" "C"
          "o" "\C-o" "|" "\M-k" "\M-K" "V" "\C-c\C-d"
          "\C-c\C-i" "x" "X" "s" "t" "g" "?" "l"
-         "\C-c\C-v\C-v" "\C-d" "v" "\C-c\C-b" 
+         "\C-c\C-v\C-v" "\C-d" "v" 
 ;;       "Mt" "M!" "Md" "Mr"
 ;;       "Mc" "M " "Me" "Mx" "M?" "Mb" "MB" "M#" "M\M-#" "M\M-r"
 ;;       "M\M-\C-r" "MD" "M\M-D" "MS" "MC" "MH" "M\C-c" "Mk" "MK"
index 7e18d64..94cf28e 100644 (file)
@@ -223,6 +223,8 @@ Finds out what articles are to be part of the nnkiboze groups."
         (gnus-expert-user t)
         (gnus-large-newsgroup nil)
         (gnus-score-find-score-files-function 'nnkiboze-score-file)
+        gnus-select-group-hook gnus-summary-prepare-hook 
+        gnus-thread-sort-functions gnus-show-threads 
         method nnkiboze-newsrc nov-buffer gname newsrc active
         ginfo lowest)
     (setq nnkiboze-current-score-group group)
index 75b67a4..25651e6 100644 (file)
@@ -1036,7 +1036,8 @@ If SERVICE, this this as the port number."
     (and timer (cancel-timer timer))
     (message "")
     (or status
-       (setq nntp-current-server nil))
+       (setq nntp-current-server nil
+             nntp-async-number nil))
     status))
 
 (defun nntp-open-server-internal (server &optional service)
index 9725d05..8c14c43 100644 (file)
@@ -62,7 +62,8 @@
        'headers
       (let ((map nnvirtual-current-mapping)
            (offset 0)
-           articles beg group active top article result prefix)
+           articles beg group active top article result prefix
+           fetched-articles)
        (while sequence
          (while (< (car (car map)) (car sequence))
            (setq offset (car (car map)))
                ;; parse a mixed HEAD/NOV buffer.
                (and (eq result 'headers) (nnvirtual-convert-headers))
                (goto-char (point-min))
+               (setq fetched-articles nil)
                (while (not (eobp))
-                 (setq beg (point))
-                 (setq article (read nntp-server-buffer))
+                 (setq beg (point)
+                       article (read nntp-server-buffer)
+                       fetched-articles (cons article fetched-articles))
                  (delete-region beg (point))
                  (insert (int-to-string (+ (- article active) offset)))
                  (beginning-of-line)
                        (insert ?\t)))
                  (forward-line 1))))
          (goto-char (point-max))
-         (insert-buffer-substring nntp-server-buffer))
+         (insert-buffer-substring nntp-server-buffer)
+         ;; We have now massaged and inserted the headers from one
+         ;; group. In case some of the articles have expired or been
+         ;; cancelled, we have to mark them as read in the component
+         ;; group. 
+         (let ((unfetched (gnus-sorted-complement 
+                           articles (nreverse fetched-articles))))
+           (and unfetched
+                (gnus-group-make-articles-read group unfetched nil))))
        ;; The headers are ready for reading, so they are inserted into
        ;; the nntp-server-buffer, which is where Gnus expects to find
        ;; them.
@@ -402,6 +413,7 @@ If the stream is opened, return T, otherwise return NIL."
        marks art-group group-alist g)
     (while mark-lists
       (setq marks (symbol-value (car (car mark-lists))))
+      ;; Find out what groups the mark belong to.
       (while marks
        (setq art-group (nnvirtual-art-group (car marks)))
        (if (setq g (assoc (car art-group) group-alist))
@@ -409,6 +421,13 @@ If the stream is opened, return T, otherwise return NIL."
          (setq group-alist (cons (list (car art-group) (cdr art-group)) 
                                  group-alist)))
        (setq marks (cdr marks)))
+      ;; The groups that don't have marks must have no marks. (Yup.)
+      (let ((groups nnvirtual-current-groups))
+       (while groups
+         (or (assoc (car groups) group-alist)
+             (setq group-alist (cons (list (car groups)) group-alist)))
+         (setq groups (cdr groups))))
+      ;; The we update the list of marks.
       (while group-alist
        (gnus-add-marked-articles 
         (car (car group-alist)) (cdr (car mark-lists)) 
index 54e4bbf..cac71d2 100644 (file)
@@ -1,9 +1,11 @@
 TEXI2DVI=texi2dvi
+MAKEINFO=emacs -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-every-node-update -f texinfo-format-buffer -f save-buffer
+# MAKEINFO=makeinfo -o gnus gnus.texi
 
 all: gnus
 
 gnus: gnus.texi
-       emacs -batch -q -no-site-file gnus.texi -l texinfmt -f texinfo-format-buffer -f save-buffer
+       $(MAKEINFO)
 
 dvi: gnus.texi
        $(TEXI2DVI) gnus.texi