Function: nnheader-find-nov-line
nnheader-find-nov-line is a byte-compiled function defined in
nnheader.el.gz.
Signature
(nnheader-find-nov-line ARTICLE)
Documentation
Put point at the NOV line that start with ARTICLE.
If ARTICLE doesn't exist, put point where that line would have been. The function will return non-nil if the line could be found.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/nnheader.el.gz
(defun nnheader-find-nov-line (article)
"Put point at the NOV line that start with ARTICLE.
If ARTICLE doesn't exist, put point where that line
would have been. The function will return non-nil if
the line could be found."
;; This function basically does a binary search.
(let ((max (point-max))
(min (goto-char (point-min)))
(cur (current-buffer))
(prev (point-min))
num found)
(while (not found)
(goto-char (+ min (/ (- max min) 2)))
(beginning-of-line)
(if (or (= (point) prev)
(eobp))
(setq found t)
(setq prev (point))
(while (and (not (numberp (setq num (read cur))))
(not (eobp)))
(gnus-delete-line))
(cond ((> num article)
(setq max (point)))
((< num article)
(setq min (point)))
(t
(setq found 'yes)))))
;; We may be at the first line.
(when (and (not num)
(not (eobp)))
(setq num (read cur)))
;; Now we may have found the article we're looking for, or we
;; may be somewhere near it.
(when (and (not (eq found 'yes))
(not (eq num article)))
(setq found (point))
(while (and (< (point) max)
(or (not (numberp num))
(< num article)))
(forward-line 1)
(setq found (point))
(unless (eobp)
(setq num (read cur))))
(unless (eq num article)
(goto-char found)))
(beginning-of-line)
(eq num article)))