Function: eww-display-document
eww-display-document is a byte-compiled function defined in eww.el.gz.
Signature
(eww-display-document DOCUMENT &optional POINT BUFFER)
Source Code
;; Defined in /usr/src/emacs/lisp/net/eww.el.gz
(defun eww-display-document (document &optional point buffer)
(unless (fboundp 'libxml-parse-html-region)
(error "This function requires Emacs to be compiled with libxml2"))
(setq buffer (or buffer (current-buffer)))
(unless (buffer-live-p buffer)
(error "Buffer %s doesn't exist" buffer))
;; There should be a better way to abort loading images
;; asynchronously.
(setq url-queue nil)
(let ((url (when (eq (car document) 'base)
(alist-get 'href (cadr document)))))
(unless url
(error "Document is missing base URL"))
(with-current-buffer buffer
(setq bidi-paragraph-direction nil)
(plist-put eww-data :dom document)
(let ((inhibit-read-only t)
;; Possibly set by the caller, e.g., `eww-render' which
;; preserves the old URL #target before chasing redirects.
(shr-target-id (or shr-target-id
(url-target (url-generic-parse-url url))))
(shr-external-rendering-functions
(append
shr-external-rendering-functions
'((title . eww-tag-title)
(form . eww-tag-form)
(input . eww-tag-input)
(button . eww-form-submit)
(textarea . eww-tag-textarea)
(select . eww-tag-select)
(link . eww-tag-link)
(meta . eww-tag-meta)
(a . eww-tag-a)))))
;; Unregister any existing change tracker while we render the
;; document.
(when eww--change-tracker-id
(track-changes-unregister eww--change-tracker-id)
(setq eww--change-tracker-id nil))
(erase-buffer)
(with-delayed-message (2 "Rendering HTML...")
(shr-insert-document document))
(cond
(point
(goto-char point))
(shr-target-id
(goto-char (point-min))
(let ((match (text-property-search-forward
'shr-target-id shr-target-id #'member)))
(when match
(goto-char (prop-match-beginning match)))))
(t
(goto-char (point-min))
;; Don't leave point inside forms, because the normal eww
;; commands aren't available there.
(while (and (not (eobp))
(get-text-property (point) 'eww-form))
(forward-line 1)))))
;; We used to enable this in `eww-mode', but it cause tracking of
;; changes while we insert the document, whereas we only care
;; about changes performed afterwards.
(setq eww--change-tracker-id (track-changes-register
#'eww--track-changes :nobefore t))
(eww-size-text-inputs))))