Function: gnus-compute-read-articles
gnus-compute-read-articles is a byte-compiled function defined in
gnus-sum.el.gz.
Signature
(gnus-compute-read-articles GROUP ARTICLES)
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/gnus-sum.el.gz
(defun gnus-compute-read-articles (group articles)
(let* ((entry (gnus-group-entry group))
(info (nth 1 entry))
(active (gnus-active group))
ninfo)
(when entry
;; First peel off all invalid article numbers.
(when active
(let ((ids articles)
id) ;; first
(while (setq id (pop ids))
(when nil ;; (and first (> id (cdr active)))
;; We'll end up in this situation in one particular
;; obscure situation. If you re-scan a group and get
;; a new article that is cross-posted to a different
;; group that has not been re-scanned, you might get
;; crossposted article that has a higher number than
;; Gnus believes possible. So we re-activate this
;; group as well. This might mean doing the
;; crossposting thingy will *increase* the number
;; of articles in some groups. Tsk, tsk.
(setq active (or (gnus-activate-group group) active)))
(when (or (> id (cdr active))
(< id (car active)))
(setq articles (delq id articles))))))
;; If the read list is nil, we init it.
(if (and active
(null (gnus-info-read info))
(> (car active) 1))
(setq ninfo (cons 1 (1- (car active))))
(setq ninfo (gnus-info-read info)))
;; Then we add the read articles to the range.
(range-add-list
ninfo (setq articles (sort articles #'<))))))