*** empty log message ***
[gnus] / lisp / nnkiboze.el
index 9f20711..7e18d64 100644 (file)
@@ -1,4 +1,4 @@
-;;;; nnkiboze.el --- select virtual news access for (ding) Gnus
+;;; nnkiboze.el --- select virtual news access for (ding) Gnus
 ;; Copyright (C) 1995 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
   (nnkiboze-possibly-change-newsgroups group)
   (if (or gnus-nov-is-evil)
       nil
-    (let ((first (car articles))
-         (last (progn (while (cdr articles) (setq articles (cdr articles)))
-                      (car articles)))
-         (nov (nnkiboze-nov-file-name)))
-      (if (file-exists-p nov)
-         (save-excursion
-           (set-buffer nntp-server-buffer)
-           (erase-buffer)
-           (insert-file-contents nov)
-           (goto-char (point-min))
-           (while (and (not (eobp)) (< first (read (current-buffer))))
-             (forward-line 1))
-           (beginning-of-line)
-           (if (not (eobp)) (delete-region 1 (point)))
-           (while (and (not (eobp)) (>= last (read (current-buffer))))
-             (forward-line 1))
-           (beginning-of-line)
-           (if (not (eobp)) (delete-region (point) (point-max)))
-           'nov)))))
+    (if (stringp (car articles))
+       'headers
+      (let ((first (car articles))
+           (last (progn (while (cdr articles) (setq articles (cdr articles)))
+                        (car articles)))
+           (nov (nnkiboze-nov-file-name)))
+       (if (file-exists-p nov)
+           (save-excursion
+             (set-buffer nntp-server-buffer)
+             (erase-buffer)
+             (insert-file-contents nov)
+             (goto-char (point-min))
+             (while (and (not (eobp)) (< first (read (current-buffer))))
+               (forward-line 1))
+             (beginning-of-line)
+             (if (not (eobp)) (delete-region 1 (point)))
+             (while (and (not (eobp)) (>= last (read (current-buffer))))
+               (forward-line 1))
+             (beginning-of-line)
+             (if (not (eobp)) (delete-region (point) (point-max)))
+             'nov))))))
 
 (defun nnkiboze-open-server (newsgroups &optional something)
   "Open a virtual newsgroup that contains NEWSGROUPS."
@@ -83,7 +85,7 @@
   "Close news server."
   t)
 
-(fset 'nnkiboze-request-quit (symbol-function 'nnkiboze-close-server))
+(defalias 'nnkiboze-request-quit (symbol-function 'nnkiboze-close-server))
 
 (defun nnkiboze-server-opened (&optional server)
   "Return server process status, T or NIL.
@@ -120,45 +122,50 @@ If the stream is opened, return T, otherwise return NIL."
   (nnkiboze-possibly-change-newsgroups group)
   (if dont-check
       ()
-    (let (beg end total)
+    (let ((nov-file (nnkiboze-nov-file-name))
+         beg end total)
       (save-excursion
        (set-buffer nntp-server-buffer)
        (erase-buffer)
-       (insert-file-contents (nnkiboze-nov-file-name))
-       (if (zerop (buffer-size))
+       (if (not (file-exists-p nov-file))
            (insert (format "211 0 0 0 %s\n" group))
-         (goto-char (point-min))
-         (and (looking-at "[0-9]+") (setq beg (read (current-buffer))))
-         (goto-char (point-max))
-         (and (re-search-backward "^[0-9]" nil t)
-              (setq end (read (current-buffer))))
-         (setq total (count-lines (point-min) (point-max)))
-         (erase-buffer)
-         (insert (format "211 %d %d %d %s\n" total beg end group))))))
+         (insert-file-contents nov-file)
+         (if (zerop (buffer-size))
+             (insert (format "211 0 0 0 %s\n" group))
+           (goto-char (point-min))
+           (and (looking-at "[0-9]+") (setq beg (read (current-buffer))))
+           (goto-char (point-max))
+           (and (re-search-backward "^[0-9]" nil t)
+                (setq end (read (current-buffer))))
+           (setq total (count-lines (point-min) (point-max)))
+           (erase-buffer)
+           (insert (format "211 %d %d %d %s\n" total beg end group)))))))
   t)
 
 (defun nnkiboze-close-group (group &optional server)
   (nnkiboze-possibly-change-newsgroups group)
   ;; Remove NOV lines of articles that are marked as read.
-  (save-excursion
-    (let ((unreads gnus-newsgroup-unreads)
-         (unselected gnus-newsgroup-unselected))
-      (set-buffer (get-buffer-create "*nnkiboze work*"))
-      (buffer-disable-undo (current-buffer))
-      (erase-buffer)
-      (let ((cur (current-buffer))
-           article)
-       (insert-file-contents (nnkiboze-nov-file-name))
-       (goto-char (point-min))
-       (while (looking-at "[0-9]+")
-         (if (or (memq (setq article (read cur)) unreads)
-                 (memq article unselected))
-             (forward-line 1)
-           (delete-region (progn (beginning-of-line) (point))
-                          (progn (forward-line 1) (point)))))
-       (write-file (nnkiboze-nov-file-name))
-       (kill-buffer (current-buffer)))))
-  (setq nnkiboze-current-group nil))
+  (if (not (file-exists-p (nnkiboze-nov-file-name)))
+      ()
+    (save-excursion
+      (let ((unreads gnus-newsgroup-unreads)
+           (unselected gnus-newsgroup-unselected))
+       (set-buffer (get-buffer-create "*nnkiboze work*"))
+       (buffer-disable-undo (current-buffer))
+       (erase-buffer)
+       (let ((cur (current-buffer))
+             article)
+         (insert-file-contents (nnkiboze-nov-file-name))
+         (goto-char (point-min))
+         (while (looking-at "[0-9]+")
+           (if (or (memq (setq article (read cur)) unreads)
+                   (memq article unselected))
+               (forward-line 1)
+             (delete-region (progn (beginning-of-line) (point))
+                            (progn (forward-line 1) (point)))))
+         (write-file (nnkiboze-nov-file-name))
+         (kill-buffer (current-buffer)))))
+    (setq nnkiboze-current-group nil)))
 
 (defun nnkiboze-request-list (&optional server) 
   (setq nnkiboze-status-string "nnkiboze: LIST is not implemented.")
@@ -173,9 +180,9 @@ If the stream is opened, return T, otherwise return NIL."
   (setq nnkiboze-status-string "nnkiboze: LIST NEWSGROUPS is not implemented.")
   nil)
 
-(fset 'nnkiboze-request-post 'nntp-request-post)
+(defalias 'nnkiboze-request-post 'nntp-request-post)
 
-(fset 'nnkiboze-request-post-buffer 'nntp-request-post-buffer)
+(defalias 'nnkiboze-request-post-buffer 'nntp-request-post-buffer)
 
 \f
 ;;; Internal functions.
@@ -312,7 +319,7 @@ Finds out what articles are to be part of the nnkiboze groups."
          (if first
              ;; The first xref has to be the group this article
              ;; really came for - this is the article nnkiboze
-             ;; will to request when it is asked for the article.
+             ;; will request when it is asked for the article.
              (save-excursion
                (goto-char (match-beginning 0))
                (insert prefix group ":"