Function: gnus-request-article-this-buffer
gnus-request-article-this-buffer is an autoloaded and byte-compiled
function defined in gnus-art.el.gz.
Signature
(gnus-request-article-this-buffer ARTICLE GROUP)
Documentation
Get an article and insert it into this buffer.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/gnus-art.el.gz
(defun gnus-request-article-this-buffer (article group)
"Get an article and insert it into this buffer."
(let (do-update-line sparse-header)
(prog1
(save-excursion
(erase-buffer)
(gnus-kill-all-overlays)
(setq bidi-paragraph-direction nil)
(setq group (or group gnus-newsgroup-name))
;; Using `gnus-request-article' directly will insert the article into
;; `nntp-server-buffer' - so we'll save some time by not having to
;; copy it from the server buffer into the article buffer.
;; We only request an article by message-id when we do not have the
;; headers for it, so we'll have to get those.
(when (stringp article)
(gnus-read-header article))
;; If the article number is negative, that means that this article
;; doesn't belong in this newsgroup (possibly), so we find its
;; message-id and request it by id instead of number.
(when (and (numberp article)
(gnus-buffer-live-p gnus-summary-buffer))
(with-current-buffer gnus-summary-buffer
(let ((header (gnus-summary-article-header article)))
(when (< article 0)
(cond
((memq article gnus-newsgroup-sparse)
;; This is a sparse gap article.
(setq do-update-line article)
(setq gnus-newsgroup-sparse
(delq article gnus-newsgroup-sparse))
(setq article (mail-header-id header))
(setq sparse-header (gnus-read-header article)))
((mail-header-p header)
;; It's a real article.
(setq article (mail-header-id header)))
(t
;; It is an extracted pseudo-article.
(setq article 'pseudo)
(gnus-request-pseudo-article header))))
(let ((method (gnus-find-method-for-group
gnus-newsgroup-name)))
(when (and (eq (car method) 'nneething)
(mail-header-p header))
(let ((dir (nneething-get-file-name
(mail-header-id header))))
(when (and (stringp dir)
(file-directory-p dir))
(setq article 'nneething)
(gnus-group-enter-directory dir))))))))
(cond
;; Refuse to select canceled articles.
((and (numberp article)
(gnus-buffer-live-p gnus-summary-buffer)
(eq (with-current-buffer gnus-summary-buffer
(cdr (assq article gnus-newsgroup-reads)))
gnus-canceled-mark))
nil)
;; We first check `gnus-original-article-buffer'.
((and (get-buffer gnus-original-article-buffer)
(numberp article)
(with-current-buffer gnus-original-article-buffer
(and (equal (car gnus-original-article) group)
(eq (cdr gnus-original-article) article))))
(insert-buffer-substring gnus-original-article-buffer)
'article)
;; Check the backlog.
((and gnus-keep-backlog
(gnus-backlog-request-article group article (current-buffer)))
'article)
;; Check asynchronous pre-fetch.
((gnus-async-request-fetched-article group article (current-buffer))
(gnus-async-prefetch-next group article gnus-summary-buffer)
(when (and (numberp article) gnus-keep-backlog)
(gnus-backlog-enter-article group article (current-buffer)))
'article)
;; Check the cache.
((and gnus-use-cache
(numberp article)
(gnus-cache-request-article article group))
'article)
;; Check the agent cache.
((gnus-agent-request-article article group)
'article)
;; Get the article and put into the article buffer.
((or (stringp article)
(numberp article))
(let ((gnus-override-method gnus-override-method)
(methods (and (stringp article)
(with-current-buffer gnus-summary-buffer
(gnus-refer-article-methods))))
(backend (car (gnus-find-method-for-group
gnus-newsgroup-name)))
result
(inhibit-read-only t))
(when (and (null gnus-override-method)
methods)
(setq gnus-override-method (pop methods)))
(while (not result)
(erase-buffer)
(gnus-kill-all-overlays)
(setq bidi-paragraph-direction nil)
(let ((gnus-newsgroup-name group))
(gnus-check-group-server))
(cond
((gnus-request-article article group (current-buffer))
(when (numberp article)
(gnus-async-prefetch-next group article
gnus-summary-buffer)
(when gnus-keep-backlog
(gnus-backlog-enter-article
group article (current-buffer)))
(when (and gnus-agent
gnus-agent-eagerly-store-articles
(gnus-agent-group-covered-p group))
(gnus-agent-store-article article group)))
(setq result 'article))
(methods
(setq gnus-override-method (pop methods)))
((not (string-match "^400 "
(nnheader-get-report backend)))
;; If we get 400 server disconnect, reconnect and
;; retry; otherwise, assume the article has expired.
(setq result 'done))))
(and (eq result 'article) 'article)))
;; It was a pseudo.
(t article)))
;; Associate this article with the current summary buffer.
(setq gnus-article-current-summary gnus-summary-buffer)
;; Take the article from the original article buffer
;; and place it in the buffer it's supposed to be in.
(when (and (get-buffer gnus-article-buffer)
(equal (buffer-name (current-buffer))
(buffer-name (get-buffer gnus-article-buffer))))
(save-excursion
(if (get-buffer gnus-original-article-buffer)
(set-buffer gnus-original-article-buffer)
(set-buffer (gnus-get-buffer-create gnus-original-article-buffer))
(buffer-disable-undo)
(setq major-mode 'gnus-original-article-mode)
(setq buffer-read-only t))
(let ((inhibit-read-only t))
(erase-buffer)
(insert-buffer-substring gnus-article-buffer))
(setq gnus-original-article (cons group article)))
;; Decode charsets.
(run-hooks 'gnus-article-decode-hook)
;; Mark article as decoded or not.
(setq gnus-article-decoded-p gnus-article-decode-hook))
;; Update sparse articles.
(when (and do-update-line
(or (numberp article)
(stringp article)))
(with-current-buffer gnus-summary-buffer
(gnus-summary-update-article do-update-line sparse-header)
(gnus-summary-goto-subject do-update-line nil t)
(set-window-point (gnus-get-buffer-window (current-buffer) t)
(point)))))))