changeset 72509:59dd12493697

Merge from gnus--rel--5.10 Patches applied: * gnus--rel--5.10 (patch 126-127) - Merge from emacs--devo--0 - Update from CVS 2006-08-23 Andreas Seltenreich <uwi7@rz.uni-karlsruhe.de> [ Backported bug fix from No Gnus. ] * lisp/gnus/gnus.el (gnus-find-method-for-group): On killed/unknown groups, try looking up the method using GROUP's prefix before inventing a new one. It is used on killed/unknown groups in various places where returning an all-new method isn't expected by the caller. * lisp/gnus/gnus-util.el (gnus-group-server): Copy required macro from No Gnus. Revision: emacs@sv.gnu.org/emacs--devo--0--patch-410
author Miles Bader <miles@gnu.org>
date Fri, 25 Aug 2006 02:15:02 +0000
parents 5d642f9eff22
children b35bf6359ff4
files lisp/gnus/ChangeLog lisp/gnus/gnus-util.el lisp/gnus/gnus.el
diffstat 3 files changed, 29 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog	Thu Aug 24 23:40:00 2006 +0000
+++ b/lisp/gnus/ChangeLog	Fri Aug 25 02:15:02 2006 +0000
@@ -1,3 +1,14 @@
+2006-08-23  Andreas Seltenreich  <uwi7@rz.uni-karlsruhe.de>
+
+	[ Backported bug fix from No Gnus. ]
+
+	* gnus.el (gnus-find-method-for-group): On killed/unknown groups, try
+	looking up the method using GROUP's prefix before inventing a new one.
+	It is used on killed/unknown groups in various places where returning
+	an all-new method isn't expected by the caller.
+
+	* gnus-util.el (gnus-group-server): Copy required macro from No Gnus.
+
 2006-08-13  Romain Francoise  <romain@orebokech.com>
 
 	* mm-extern.el (mm-extern-mail-server): End `y-or-n-p' prompt with a
--- a/lisp/gnus/gnus-util.el	Thu Aug 24 23:40:00 2006 +0000
+++ b/lisp/gnus/gnus-util.el	Fri Aug 25 02:15:02 2006 +0000
@@ -607,6 +607,17 @@
 	 (substring gname (match-end 0))
        gname)))
 
+(defmacro gnus-group-server (group)
+  "Find the server name of a foreign newsgroup.
+For example, (gnus-group-server \"nnimap+yxa:INBOX.foo\") would
+yield \"nnimap:yxa\"."
+  `(let ((gname ,group))
+     (if (string-match "^\\([^:+]+\\)\\(?:\\+\\([^:]*\\)\\)?:" gname)
+	 (format "%s:%s" (match-string 1 gname) (or
+						 (match-string 2 gname)
+						 ""))
+       (format "%s:%s" (car gnus-select-method) (cadr gnus-select-method)))))
+
 (defun gnus-make-sort-function (funs)
   "Return a composite sort condition based on the functions in FUNS."
   (cond
--- a/lisp/gnus/gnus.el	Thu Aug 24 23:40:00 2006 +0000
+++ b/lisp/gnus/gnus.el	Fri Aug 25 02:15:02 2006 +0000
@@ -4079,8 +4079,13 @@
   (or gnus-override-method
       (and (not group)
 	   gnus-select-method)
-      (and (not (gnus-group-entry group)) ;; a new group
-	   (gnus-group-name-to-method group))
+      (and (not (gnus-group-entry group))
+ 	   ;; Killed or otherwise unknown group.
+ 	   (or
+ 	    ;; If we know a virtual server by that name, return its method.
+ 	    (gnus-server-to-method (gnus-group-server group))
+ 	    ;; Guess a new method as last resort.
+ 	    (gnus-group-name-to-method group)))
       (let ((info (or info (gnus-get-info group)))
 	    method)
 	(if (or (not info)