2000-10-30 00:49:33 ShengHuo ZHU <zsh@cs.rochester.edu>
authorShengHuo ZHU <zsh@cs.rochester.edu>
Mon, 30 Oct 2000 04:56:15 +0000 (04:56 +0000)
committerShengHuo ZHU <zsh@cs.rochester.edu>
Mon, 30 Oct 2000 04:56:15 +0000 (04:56 +0000)
* gnus-srvr.el (gnus-server-browse-in-group-buffer): New variable.
(gnus-server-read-server-in-server-buffer): New function.
(gnus-browse-foreign-server): Browse in group buffer.
* gnus-group.el (gnus-group-prepare-flat): List group not in list.
(gnus-group-prepare-flat-list-dead): Use gnus-group-insert-group-line.
* gnus-topic.el (gnus-group-prepare-topics): Ditto.
* gnus.el (gnus-server-browse-hashtb): New variable.

lisp/ChangeLog
lisp/gnus-group.el
lisp/gnus-srvr.el
lisp/gnus-topic.el
lisp/gnus.el

index f91b63d..b536f8b 100644 (file)
@@ -1,3 +1,13 @@
+2000-10-30 00:49:33  ShengHuo ZHU  <zsh@cs.rochester.edu>
+
+       * gnus-srvr.el (gnus-server-browse-in-group-buffer): New variable.
+       (gnus-server-read-server-in-server-buffer): New function.
+       (gnus-browse-foreign-server): Browse in group buffer.
+       * gnus-group.el (gnus-group-prepare-flat): List group not in list.
+       (gnus-group-prepare-flat-list-dead): Use gnus-group-insert-group-line.
+       * gnus-topic.el (gnus-group-prepare-topics): Ditto.
+       * gnus.el (gnus-server-browse-hashtb): New variable.
+
 2000-10-29 22:31:40  ShengHuo ZHU  <zsh@cs.rochester.edu>
 
        * nnfolder.el (nnfolder-open-nov): Use group.
index ccdbf49..92af017 100644 (file)
@@ -1052,6 +1052,9 @@ if it is a string, only list groups matching REGEXP."
   (let ((buffer-read-only nil)
        (newsrc (cdr gnus-newsrc-alist))
        (lowest (or lowest 1))
+       (not-in-list (and gnus-group-listed-groups
+                      (not (eq gnus-group-list-option 'limit))
+                      (copy-sequence gnus-group-listed-groups)))
        info clevel unread group params)
     (erase-buffer)
     (when (or (< lowest gnus-level-zombie)
@@ -1063,6 +1066,8 @@ if it is a string, only list groups matching REGEXP."
              params (gnus-info-params info)
              newsrc (cdr newsrc)
              unread (car (gnus-gethash group gnus-newsrc-hashtb)))
+       (if not-in-list 
+           (setq not-in-list (delete group not-in-list)))
        (and 
         (gnus-group-prepare-logic 
          group
@@ -1102,10 +1107,14 @@ if it is a string, only list groups matching REGEXP."
         (setq gnus-zombie-list (sort gnus-zombie-list 'string<))
         gnus-level-zombie ?Z
         regexp))
+    (if not-in-list 
+       (dolist (group gnus-zombie-list)
+         (setq not-in-list (delete group not-in-list))))
     (if (or gnus-group-listed-groups
            (and (>= level gnus-level-killed) (<= lowest gnus-level-killed)))
        (gnus-group-prepare-flat-list-dead
-        (setq gnus-killed-list (sort gnus-killed-list 'string<))
+        (or not-in-list
+            (setq gnus-killed-list (sort gnus-killed-list 'string<)))
         gnus-level-killed ?K regexp))
 
     (gnus-group-set-mode-line)
@@ -1125,16 +1134,21 @@ if it is a string, only list groups matching REGEXP."
             (or (not regexp)
                 (and (stringp regexp) (string-match regexp group))
                 (and (functionp regexp) (funcall regexp group))))
-       (gnus-add-text-properties
-        (point) (prog1 (1+ (point))
-                  (insert " " mark "     *: "
-                          (gnus-group-name-decode group 
-                                                  (gnus-group-name-charset
-                                                   nil group)) 
-                          "\n"))
-        (list 'gnus-group (gnus-intern-safe group gnus-active-hashtb)
-              'gnus-unread t
-              'gnus-level level))))))
+;;;    (gnus-add-text-properties
+;;;     (point) (prog1 (1+ (point))
+;;;               (insert " " mark "     *: "
+;;;                       (gnus-group-name-decode group 
+;;;                                               (gnus-group-name-charset
+;;;                                                nil group)) 
+;;;                       "\n"))
+;;;     (list 'gnus-group (gnus-intern-safe group gnus-active-hashtb)
+;;;           'gnus-unread t
+;;;           'gnus-level level))
+       (gnus-group-insert-group-line 
+        group level nil
+        (if gnus-server-browse-hashtb
+            (gnus-gethash group gnus-server-browse-hashtb) t)
+        (gnus-method-simplify (gnus-find-method-for-group group)))))))
 
 (defun gnus-group-update-group-line ()
   "Update the current line in the group buffer."
index 87155e7..b217086 100644 (file)
@@ -55,6 +55,9 @@ The following specs are understood:
 (defvar gnus-server-exit-hook nil
   "*Hook run when exiting the server buffer.")
 
+(defvar gnus-server-browse-in-group-buffer t
+  "Whether browse server in group buffer.")
+
 ;;; Internal variables.
 
 (defvar gnus-inserted-opened-servers nil)
@@ -117,7 +120,7 @@ The following specs are understood:
   (suppress-keymap gnus-server-mode-map)
 
   (gnus-define-keys gnus-server-mode-map
-    " " gnus-server-read-server
+    " " gnus-server-read-server-in-server-buffer
     "\r" gnus-server-read-server
     gnus-mouse-2 gnus-server-pick-server
     "q" gnus-server-exit
@@ -489,6 +492,12 @@ The following commands are available:
       (gnus-request-scan nil method)
       (gnus-message 3 "Scanning %s...done" server))))
 
+(defun gnus-server-read-server-in-server-buffer (server)
+  "Browse a server in server buffer."
+  (interactive (list (gnus-server-server-name)))
+  (let (gnus-server-browse-in-group-buffer)
+    (gnus-server-read-server server)))
+
 (defun gnus-server-read-server (server)
   "Browse a server."
   (interactive (list (gnus-server-server-name)))
@@ -569,6 +578,7 @@ The following commands are available:
   (setq gnus-browse-current-method (gnus-server-to-method server))
   (setq gnus-browse-return-buffer return-buffer)
   (let* ((method gnus-browse-current-method)
+        (orig-select-method gnus-select-method)
         (gnus-select-method method)
         groups group)
     (gnus-message 5 "Connecting to %s..." (nth 1 method))
@@ -587,18 +597,6 @@ The following commands are available:
        1 "Couldn't request list: %s" (gnus-status-message method))
       nil)
      (t
-      (gnus-get-buffer-create gnus-browse-buffer)
-      (when gnus-carpal
-       (gnus-carpal-setup-buffer 'browse))
-      (gnus-configure-windows 'browse)
-      (buffer-disable-undo)
-      (let ((buffer-read-only nil))
-       (erase-buffer))
-      (gnus-browse-mode)
-      (setq mode-line-buffer-identification
-           (list
-            (format
-             "Gnus: %%b {%s:%s}" (car method) (cadr method))))
       (save-excursion
        (set-buffer nntp-server-buffer)
        (let ((cur (current-buffer)))
@@ -626,28 +624,56 @@ The following commands are available:
       (setq groups (sort groups
                         (lambda (l1 l2)
                           (string< (car l1) (car l2)))))
-      (let ((buffer-read-only nil) charset)
-       (while groups
-         (setq group (car groups))
-         (setq charset (gnus-group-name-charset method group))
-         (gnus-add-text-properties
-          (point)
-          (prog1 (1+ (point))
-            (insert
-             (format "%c%7d: %s\n" 
-                     (let ((level
-                            (gnus-group-level
-                             (gnus-group-prefixed-name (car group) method))))
+      (if gnus-server-browse-in-group-buffer
+         (let* ((gnus-select-method orig-select-method)
+                (gnus-server-browse-hashtb 
+                 (gnus-make-hashtable (length groups)))
+                (gnus-group-listed-groups 
+                 (mapcar (lambda (group) 
+                           (let ((name
+                                  (gnus-group-prefixed-name 
+                                   (car group) method)))
+                             (gnus-sethash name (cdr group)
+                                           gnus-server-browse-hashtb)
+                             name))
+                         groups)))
+           (gnus-configure-windows 'group)
+           (funcall gnus-group-prepare-function 
+                    gnus-level-killed 'ignore 1 'ingore))
+       (gnus-get-buffer-create gnus-browse-buffer)
+       (when gnus-carpal
+         (gnus-carpal-setup-buffer 'browse))
+       (gnus-configure-windows 'browse)
+       (buffer-disable-undo)
+       (let ((buffer-read-only nil))
+         (erase-buffer))
+       (gnus-browse-mode)
+       (setq mode-line-buffer-identification
+             (list
+              (format
+               "Gnus: %%b {%s:%s}" (car method) (cadr method))))
+       (let ((buffer-read-only nil) charset)
+         (while groups
+           (setq group (car groups))
+           (setq charset (gnus-group-name-charset method group))
+           (gnus-add-text-properties
+            (point)
+            (prog1 (1+ (point))
+              (insert
+               (format "%c%7d: %s\n" 
+                       (let ((level
+                              (gnus-group-level
+                               (gnus-group-prefixed-name (car group) method))))
                        (cond 
                         ((<= level gnus-level-subscribed) ? )
                         ((<= level gnus-level-unsubscribed) ?U)
                         ((= level gnus-level-zombie) ?Z)
                         (t ?K)))
-                     (cdr group)
-                     (gnus-group-name-decode (car group) charset))))
-          (list 'gnus-group (car group)))
-         (setq groups (cdr groups))))
-      (switch-to-buffer (current-buffer))
+                       (cdr group)
+                       (gnus-group-name-decode (car group) charset))))
+            (list 'gnus-group (car group)))
+           (setq groups (cdr groups))))
+       (switch-to-buffer (current-buffer)))
       (goto-char (point-min))
       (gnus-group-position-point)
       (gnus-message 5 "Connecting to %s...done" (nth 1 method))
index d63a648..acf26da 100644 (file)
@@ -393,7 +393,11 @@ if it is t, list groups that have no unread articles.
 If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
   (set-buffer gnus-group-buffer)
   (let ((buffer-read-only nil)
-        (lowest (or lowest 1)))
+        (lowest (or lowest 1))
+       (not-in-list 
+        (and gnus-group-listed-groups
+             (not (eq gnus-group-list-option 'limit))
+             (copy-sequence gnus-group-listed-groups))))
 
     (when (or (not gnus-topic-alist)
              (not gnus-topology-checked-p))
@@ -415,7 +419,11 @@ If LOWEST is non-nil, list all newsgroups of level LOWEST or higher."
               (and (>= level gnus-level-killed) 
                    (<= lowest gnus-level-killed)))
       (gnus-group-prepare-flat-list-dead
-       (setq gnus-killed-list (sort gnus-killed-list 'string<))
+       (if not-in-list 
+          (gnus-delete-if (lambda (group)
+                            (< (gnus-group-level group) gnus-level-killed))
+                          not-in-list)
+        (setq gnus-killed-list (sort gnus-killed-list 'string<)))
        gnus-level-killed ?K
        regexp))
 
index ea3723e..256f108 100644 (file)
@@ -1636,6 +1636,9 @@ gnus-newsrc-hashtb should be kept so that both hold the same information.")
 (defvar gnus-moderated-hashtb nil
   "Hashtable of moderated newsgroups.")
 
+(defvar gnus-server-browse-hashtb nil
+  "Hashtable of existing articles.")
+
 ;; Save window configuration.
 (defvar gnus-prev-winconf nil)