Sync up with gnus-6_2_3 to gnus-6_4_0
[elisp/gnus.git-] / lisp / gnus-srvr.el
index 3fda74f..24e9bfd 100644 (file)
@@ -1,7 +1,7 @@
 ;;; gnus-srvr.el --- virtual server support for Gnus
 ;; Copyright (C) 1995,96,97,98 Free Software Foundation, Inc.
 
-;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
@@ -221,7 +221,9 @@ The following commands are available:
     ;; Then we insert the list of servers that have been opened in
     ;; this session.
     (while opened
-      (unless (member (caar opened) done)
+      (when (and (not (member (caar opened) done))
+                ;; Just ignore ephemeral servers.
+                (not (member (caar opened) gnus-ephemeral-servers)))
        (push (caar opened) done)
        (gnus-server-insert-server-line
         (setq op-ser (format "%s:%s" (caaar opened) (nth 1 (caar opened))))
@@ -640,11 +642,15 @@ buffer.
   "Enter the group at the current line."
   (interactive)
   (let ((group (gnus-browse-group-name)))
-    (unless (gnus-group-read-ephemeral-group
-            group gnus-browse-current-method nil
-            (cons (current-buffer) 'browse))
-      (error "Couldn't enter %s" group))))
-
+    (if (or (not (gnus-get-info group))
+           (gnus-ephemeral-group-p group))
+       (unless (gnus-group-read-ephemeral-group
+                group gnus-browse-current-method nil
+                (cons (current-buffer) 'browse))
+         (error "Couldn't enter %s" group))
+      (unless (gnus-group-read-group nil no-article group)
+       (error "Couldn't enter %s" group)))))
+      
 (defun gnus-browse-select-group ()
   "Select the current group."
   (interactive)
@@ -698,15 +704,16 @@ buffer.
       ;; If this group it killed, then we want to subscribe it.
       (when (= (following-char) ?K)
        (setq sub t))
-      (when (cadr (gnus-gethash (setq group (gnus-browse-group-name))
-                         gnus-newsrc-hashtb))
+      (setq group (gnus-browse-group-name))
+      (when (and sub
+                (cadr (gnus-gethash group gnus-newsrc-hashtb)))
        (error "Group already subscribed"))
-      ;; Make sure the group has been properly removed before we
-      ;; subscribe to it.
-      (gnus-kill-ephemeral-group group)
       (delete-char 1)
       (if sub
          (progn
+           ;; Make sure the group has been properly removed before we
+           ;; subscribe to it.
+           (gnus-kill-ephemeral-group group)
            (gnus-group-change-level
             (list t group gnus-level-default-subscribed
                   nil nil (if (gnus-server-equal