Function: gnus-agent-set-cat-groups

gnus-agent-set-cat-groups is a byte-compiled function defined in gnus-agent.el.gz.

Signature

(gnus-agent-set-cat-groups CATEGORY GROUPS)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-agent.el.gz
(defun gnus-agent-set-cat-groups (category groups)
  (unless (eq groups 'ignore)
    (let ((new-g groups)
          (old-g (gnus-agent-cat-groups category)))
      (cond ((eq new-g old-g)
             ;; gnus-agent-add-group is fiddling with the group
             ;; list. Still, Im done.
             nil
             )
            ((eq new-g (cdr old-g))
             ;; gnus-agent-add-group is fiddling with the group list
             (setcdr (or (assq 'agent-groups category)
                         (let ((cell (cons 'agent-groups nil)))
                           (setcdr category (cons cell (cdr category)))
                           cell))
                     new-g))
            (t
             (let ((groups groups))
               (while groups
                 (let* ((group        (pop groups))
                        (old-category (gnus-group-category group)))
                   (if (eq category old-category)
                       nil
                     (setf (gnus-agent-cat-groups old-category)
                           (delete group (gnus-agent-cat-groups
                                          old-category))))))
               ;; Purge cache as preceding loop invalidated it.
               (setq gnus-category-group-cache nil))

             (setcdr (or (assq 'agent-groups category)
                         (let ((cell (cons 'agent-groups nil)))
                           (setcdr category (cons cell (cdr category)))
                           cell))
                     groups))))))