Function: gnus-summary-refer-thread

gnus-summary-refer-thread is an interactive and byte-compiled function defined in gnus-sum.el.gz.

Signature

(gnus-summary-refer-thread &optional LIMIT)

Documentation

Fetch all articles in the current thread.

A non-numeric prefix arg will search the entire server; without a prefix arg only the current group is searched. If the variable gnus-refer-thread-use-search is t the prefix arg has the reverse meaning. If searching is not enabled for the current group, fetch LIMIT (the numerical prefix) old headers. If LIMIT is non-numeric or nil fetch the number specified by the gnus-refer-thread-limit variable.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-sum.el.gz
(defun gnus-summary-refer-thread (&optional limit)
  "Fetch all articles in the current thread.
A non-numeric prefix arg will search the entire server; without a
prefix arg only the current group is searched.  If the variable
`gnus-refer-thread-use-search' is t the prefix arg has the
reverse meaning.  If searching is not enabled for the current
group, fetch LIMIT (the numerical prefix) old headers.  If LIMIT
is non-numeric or nil fetch the number specified by the
`gnus-refer-thread-limit' variable."
  (interactive "P" gnus-summary-mode)
  (let* ((group gnus-newsgroup-name)
         (header (gnus-summary-article-header))
         (id (mail-header-id header))
         (gnus-inhibit-demon t)
         (gnus-summary-ignore-duplicates t)
         (gnus-refer-thread-use-search
          (if (or (null limit) (numberp limit))
              gnus-refer-thread-use-search
            (if (booleanp gnus-refer-thread-use-search)
                (not gnus-refer-thread-use-search)
              gnus-refer-thread-use-search)))
         article-ids new-unreads
         (new-headers
          (cond
           ;; If there is a backend-specific method, use it.
           ((gnus-check-backend-function
             'request-thread group)
            (gnus-request-thread header group))
           ;; If a search engine is configured, use it.
           ((ignore-errors
              (gnus-search-server-to-engine (gnus-group-server group)))
            (gnus-search-thread header))
           ;; Otherwise just retrieve some headers.
           (t
            (let* ((gnus-read-all-available-headers t)
                   (limit (if (numberp limit)
                              limit
                            gnus-refer-thread-limit))
                   (last (if (numberp limit)
                             (min (+ (mail-header-number header) limit)
                                  gnus-newsgroup-highest)
                           gnus-newsgroup-highest))
                   (subject (gnus-simplify-subject
                             (mail-header-subject header)))
                   (refs (split-string
                          (or (mail-header-references header) "")))
                   (gnus-parse-headers-hook
                    (let ((refs (append refs (list id subject))))
                      (lambda () (goto-char (point-min))
                        (keep-lines (regexp-opt refs))))))
              (gnus-fetch-headers
               (list last) (if (numberp limit) (* 2 limit) limit) t))))))
    (when (listp new-headers)
      (dolist (header new-headers)
        (push (mail-header-number header) article-ids))
      (setq article-ids (nreverse article-ids))
      (setq new-unreads
            (gnus-sorted-intersection gnus-newsgroup-unselected article-ids))
      (setq gnus-newsgroup-unselected
            (gnus-sorted-ndifference gnus-newsgroup-unselected new-unreads))
      (setq gnus-newsgroup-unreads
            (gnus-sorted-nunion gnus-newsgroup-unreads new-unreads))
      (setq gnus-newsgroup-headers
            (gnus-delete-duplicate-headers
             (cl-merge 'list gnus-newsgroup-headers new-headers
                       'gnus-article-sort-by-number)))
      (setq gnus-newsgroup-articles
            (gnus-sorted-nunion gnus-newsgroup-articles article-ids)))
    (gnus-summary-limit-include-thread id gnus-refer-thread-limit-to-thread))
  (gnus-summary-show-thread))