;;; nnoo.el --- OO Gnus Backends
-;; Copyright (C) 1996 Free Software Foundation, Inc.
+;; Copyright (C) 1996,97 Free Software Foundation, Inc.
;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
;; Keywords: news
(push (list ',backend
(mapcar (lambda (p) (list p)) ',parents)
nil nil)
- nnoo-definition-alist)))
+ nnoo-definition-alist)
+ (push (list ',backend "*internal-non-initialized-backend*")
+ nnoo-state-alist)))
(put 'nnoo-declare 'lisp-indent-function 1)
(defun nnoo-parents (backend)
(let* ((bstate (cdr (assq backend nnoo-state-alist)))
(current (car bstate))
(parents (nnoo-parents backend))
- state)
+ (bvariables (nnoo-variables backend))
+ state def)
(unless bstate
(push (setq bstate (list backend nil))
nnoo-state-alist)
(pop state))
(setcar bstate server)
(unless (cdr (assoc server (cddr bstate)))
- (while defs
- (set (caar defs) (cadar defs))
- (pop defs)))
+ (while (setq def (pop defs))
+ (unless (assq (car def) bvariables)
+ (nconc bvariables
+ (list (cons (car def) (and (boundp (car def))
+ (symbol-value (car def)))))))
+ (set (car def) (cadr def))))
(while parents
(nnoo-change-server
(caar parents) server
(defs (nnoo-variables backend)))
;; Remove the old definition.
(setcdr (cdr bstate) (delq (assoc current (cddr bstate)) (cddr bstate)))
+ ;; If this is the first time we push the server (i. e., this is
+ ;; the nil server), then we update the default values of
+ ;; all the variables to reflect the current values.
+ (when (equal current "*internal-non-initialized-backend*")
+ (let ((defaults (nnoo-variables backend))
+ def)
+ (while (setq def (pop defaults))
+ (setcdr def (symbol-value (car def))))))
(let (state)
(while defs
(push (cons (caar defs) (symbol-value (caar defs)))
(defun nnoo-define-skeleton-1 (backend)
(let ((functions '(retrieve-headers
request-close request-article
- open-group request-group close-group
+ request-group close-group
request-list request-post request-list-newsgroups))
function fun)
(while (setq function (pop functions))