X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fnnoo.el;h=9c27786bf68b9431380ded8ecc2f896b9c4eed6e;hb=6bcf4418c237eb47783cb4ea30da6e47da1f2fb7;hp=c28c888f30605dbd90a40b85f7e369ad74409b45;hpb=e85b83e8b076986fb7b0b0d805fbf3daec45e941;p=elisp%2Fgnus.git- diff --git a/lisp/nnoo.el b/lisp/nnoo.el index c28c888..9c27786 100644 --- a/lisp/nnoo.el +++ b/lisp/nnoo.el @@ -1,7 +1,7 @@ ;;; nnoo.el --- OO Gnus Backends -;; Copyright (C) 1996,97 Free Software Foundation, Inc. +;; Copyright (C) 1996,97,98 Free Software Foundation, Inc. -;; Author: Lars Magne Ingebrigtsen +;; Author: Lars Magne Ingebrigtsen ;; Keywords: news ;; This file is part of GNU Emacs. @@ -103,7 +103,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 +118,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)) @@ -189,7 +201,9 @@ (nconc bvariables (list (cons (car def) (and (boundp (car def)) (symbol-value (car 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))))) (while parents (nnoo-change-server (caar parents) (format "%s+%s" backend server) @@ -219,7 +233,10 @@ (nconc bstate (list (cons current state)))))) (defsubst nnoo-current-server-p (backend server) - (equal (nnoo-current-server backend) server)) + (equal (nnoo-current-server backend) + (if nnoo-parent-backend + (format "%s+%s" nnoo-parent-backend server) + server))) (defun nnoo-current-server (backend) (nth 1 (assq backend nnoo-state-alist)))