X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fnnoo.el;h=736d90fa2c546d1b1aa3ce587a9280180e492571;hb=4cacb5f23eb830e6950dba987063f413977708d7;hp=84924d93afdf00dbfc5c99019b51f74ca781b5d4;hpb=4131ea9653854d4dd1b73263c52b6c0962ab74de;p=elisp%2Fgnus.git- diff --git a/lisp/nnoo.el b/lisp/nnoo.el index 84924d9..736d90f 100644 --- a/lisp/nnoo.el +++ b/lisp/nnoo.el @@ -1,7 +1,9 @@ ;;; nnoo.el --- OO Gnus Backends -;; Copyright (C) 1996,97 Free Software Foundation, Inc. -;; Author: Lars Magne Ingebrigtsen +;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, +;; 2004, 2005 Free Software Foundation, Inc. + +;; Author: Lars Magne Ingebrigtsen ;; Keywords: news ;; This file is part of GNU Emacs. @@ -18,15 +20,15 @@ ;; 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. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. ;;; Commentary: ;;; Code: -(require 'nnheader) (eval-when-compile (require 'cl)) +(require 'nnheader) (defvar nnoo-definition-alist nil) (defvar nnoo-state-alist nil) @@ -36,7 +38,7 @@ "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) @@ -103,7 +105,13 @@ (nnoo-change-server pbackend (nnoo-current-server backend) (cdr (assq pbackend (nnoo-parents backend)))) - (apply function args))) + (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))))))) (defun nnoo-execute (backend function &rest args) "Execute FUNCTION on behalf of BACKEND." @@ -112,7 +120,13 @@ (nnoo-change-server pbackend (nnoo-current-server backend) (cdr (assq pbackend (nnoo-parents backend)))) - (apply function args))) + (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))))))) (defmacro nnoo-map-functions (backend &rest maps) `(nnoo-map-functions-1 ',backend ',maps)) @@ -187,9 +201,11 @@ (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)))) + (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))))) (while parents (nnoo-change-server (caar parents) (format "%s+%s" backend server) @@ -288,6 +304,20 @@ All functions will return nil and report an error." (&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) -;;; nnoo.el ends here. +;;; nnoo.el ends here