Function: gnus-summary-insert-old-articles

gnus-summary-insert-old-articles is an interactive and byte-compiled function defined in gnus-sum.el.gz.

Signature

(gnus-summary-insert-old-articles &optional ALL)

Documentation

Insert all old articles in this group.

If ALL is non-nil, already read articles become readable. If ALL is a number, fetch this number of articles.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-sum.el.gz
(defun gnus-summary-insert-old-articles (&optional all)
  "Insert all old articles in this group.
If ALL is non-nil, already read articles become readable.
If ALL is a number, fetch this number of articles."
  (interactive "P" gnus-summary-mode)
  (prog1
      (let ((old (sort (mapcar #'gnus-data-number gnus-newsgroup-data) #'<))
	    older len)
	(setq older
	      ;; Some nntp servers lie about their active range.  When
	      ;; this happens, the active range can be in the millions.
	      ;; Use a compressed range to avoid creating a huge list.
	      (gnus-range-difference
	       (gnus-range-difference (list gnus-newsgroup-active) old)
	       gnus-newsgroup-unexist))
	(setq len (gnus-range-length older))
	(cond
	 ((null older) nil)
	 ((numberp all)
	  (if (< all len)
	      (let ((older-range (nreverse older)))
		(setq older nil)

		(while (> all 0)
		  (let* ((r (pop older-range))
			 (min (if (numberp r) r (car r)))
			 (max (if (numberp r) r (cdr r))))
		    (while (and (<= min max)
				(> all 0))
		      (push max older)
		      (setq all (1- all)
			    max (1- max))))))
	    (setq older (gnus-uncompress-range older))))
	 (all
	  (setq older (gnus-uncompress-range older)))
	 (t
	  (when (and (numberp gnus-large-newsgroup)
		   (> len gnus-large-newsgroup))
	      (let ((cursor-in-echo-area nil)
		    (initial (gnus-parameter-large-newsgroup-initial
			      gnus-newsgroup-name))
		    input)
		(when (eq initial 'all)
		  (setq initial len))
		(setq input
		      (read-string
		       (format
			"How many articles from %s (%s %d): "
			gnus-newsgroup-name
			(if initial "max" "default")
			len)
		       nil nil
		       (and initial
			    (number-to-string initial))))
		(unless (string-match "^[ \t]*$" input)
		  (setq all (string-to-number input))
		  (if (< all len)
		      (let ((older-range (nreverse older)))
			(setq older nil)

			(while (> all 0)
			  (let* ((r (pop older-range))
				 (min (if (numberp r) r (car r)))
				 (max (if (numberp r) r (cdr r))))
			    (while (and (<= min max)
					(> all 0))
			      (push max older)
			      (setq all (1- all)
				    max (1- max))))))))))
	  (setq older (gnus-uncompress-range older))))
	(if (not older)
	    (message "No old news.")
	  (gnus-summary-insert-articles older)
	  (gnus-summary-limit (gnus-sorted-nunion old older))))
    (gnus-summary-position-point)))