-;;;; 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."
"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.
(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.")
(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.
(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 ":"