Give a better error message in the "go offline" case.
[gnus] / lisp / nnoo.el
index 9c27786..083bedc 100644 (file)
@@ -1,15 +1,17 @@
 ;;; nnoo.el --- OO Gnus Backends
 ;;; nnoo.el --- OO Gnus Backends
-;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
+
+;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
+;;   2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
 
-;; GNU Emacs is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -17,9 +19,7 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING.  If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
 
 ;;; Commentary:
 
@@ -36,7 +36,7 @@
   "The same as `defvar', only takes list of variables to MAP to."
   `(prog1
        ,(if doc
   "The same as `defvar', only takes list of variables to MAP to."
   `(prog1
        ,(if doc
-           `(defvar ,var ,init ,doc)
+           `(defvar ,var ,init ,(concat doc "\n\nThis is a Gnus server variable.  See Info node `(gnus)Select Methods'."))
          `(defvar ,var ,init))
      (nnoo-define ',var ',map)))
 (put 'defvoo 'lisp-indent-function 2)
          `(defvar ,var ,init))
      (nnoo-define ',var ',map)))
 (put 'defvoo 'lisp-indent-function 2)
 
 (defmacro nnoo-declare (backend &rest parents)
   `(eval-and-compile
 
 (defmacro nnoo-declare (backend &rest parents)
   `(eval-and-compile
-     (push (list ',backend
-                (mapcar (lambda (p) (list p)) ',parents)
-                nil nil)
-          nnoo-definition-alist)
-     (push (list ',backend "*internal-non-initialized-backend*")
-          nnoo-state-alist)))
+     (if (assq ',backend nnoo-definition-alist)
+        (setcar (cdr (assq ',backend nnoo-definition-alist))
+                (mapcar 'list ',parents))
+       (push (list ',backend
+                  (mapcar 'list ',parents)
+                  nil nil)
+            nnoo-definition-alist))
+     (unless (assq ',backend nnoo-state-alist)
+       (push (list ',backend "*internal-non-initialized-backend*")
+            nnoo-state-alist))))
 (put 'nnoo-declare 'lisp-indent-function 1)
 
 (defun nnoo-parents (backend)
 (put 'nnoo-declare 'lisp-indent-function 1)
 
 (defun nnoo-parents (backend)
                        (cdr (assq pbackend (nnoo-parents backend))))
     (prog1
        (apply function args)
                        (cdr (assq pbackend (nnoo-parents backend))))
     (prog1
        (apply function args)
-    ;; Copy the changed variables back into the child.
-    (let ((vars (cdr (assq pbackend (nnoo-parents backend)))))
-      (while vars
-       (set (cadar vars) (symbol-value (caar vars)))
-       (setq vars (cdr vars)))))))
+      ;; Copy the changed variables back into the child.
+      (let ((vars (cdr (assq pbackend (nnoo-parents backend)))))
+       (while vars
+         (set (cadar vars) (symbol-value (caar vars)))
+         (setq vars (cdr vars)))))))
 
 (defun nnoo-execute (backend function &rest args)
   "Execute FUNCTION on behalf of BACKEND."
 
 (defun nnoo-execute (backend function &rest args)
   "Execute FUNCTION on behalf of BACKEND."
        (while (setq def (pop defs))
          (unless (assq (car def) bvariables)
            (nconc bvariables
        (while (setq def (pop defs))
          (unless (assq (car def) bvariables)
            (nconc bvariables
-                  (list (cons (car def) (and (boundp (car def))
-                                             (symbol-value (car def)))))))
+                  (list (cons (car def) (and (boundp (car def))
+                                             (symbol-value (car def)))))))
          (if (equal server "*internal-non-initialized-backend*")
              (set (car def) (symbol-value (cadr def)))
            (set (car def) (cadr def)))))
          (if (equal server "*internal-non-initialized-backend*")
              (set (car def) (symbol-value (cadr def)))
            (set (car def) (cadr def)))))
@@ -302,6 +306,20 @@ All functions will return nil and report an error."
                   (&rest args)
                 (nnheader-report ',backend ,(format "%s-%s not implemented"
                                                     backend function))))))))
                   (&rest args)
                 (nnheader-report ',backend ,(format "%s-%s not implemented"
                                                     backend function))))))))
+
+(defun nnoo-set (server &rest args)
+  (let ((parents (nnoo-parents (car server)))
+       (nnoo-parent-backend (car server)))
+    (while parents
+      (nnoo-change-server (caar parents)
+                         (cadr server)
+                         (cdar parents))
+      (pop parents)))
+  (nnoo-change-server (car server)
+                     (cadr server) (cddr server))
+  (while args
+    (set (pop args) (pop args))))
+
 (provide 'nnoo)
 
 (provide 'nnoo)
 
-;;; nnoo.el ends here.
+;;; nnoo.el ends here