diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 02fc575..738e462 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -57,6 +57,12 @@
:group 'eww
:type 'string)
+(defcustom eww-buffer-name "*eww*"
+ "Buffer name to use for rendering HTML."
+ :version "24.4"
+ :group 'eww
+ :type 'string)
+
(defcustom eww-use-external-browser-for-content-type
"\\`\\(video/\\|audio/\\|application/ogg\\)"
"Always use external browser for specified content-type."
@@ -125,6 +131,7 @@ See also `eww-form-checkbox-selected-symbol'."
:group 'eww)
(defvar eww-current-url nil)
+(defvar eww-current-buffer nil)
(defvar eww-current-dom nil)
(defvar eww-current-source nil)
(defvar eww-current-title ""
@@ -169,7 +176,8 @@ word(s) will be searched for via `eww-search-prefix'."
(setq url (concat url "/"))))
(setq url (concat eww-search-prefix
(replace-regexp-in-string " " "+" url))))))
- (url-retrieve url 'eww-render (list url)))
+ (url-retrieve url 'eww-render
+ (list url nil eww-current-buffer)))
;;;###autoload (defalias 'browse-web 'eww)
@@ -182,7 +190,7 @@ word(s) will be searched for via `eww-search-prefix'."
"/")
(expand-file-name file))))
-(defun eww-render (status url &optional point)
+(defun eww-render (status url &optional point buffer)
(let ((redirect (plist-get status :redirect)))
(when redirect
(setq url redirect)))
@@ -199,8 +207,10 @@ word(s) will be searched for via `eww-search-prefix'."
"utf8"))))
(data-buffer (current-buffer)))
(unwind-protect
- (progn
- (setq eww-current-title "")
+ (let ((eww-current-buffer (or buffer
+ eww-current-buffer)))
+ (with-current-buffer eww-current-buffer
+ (setq eww-current-title ""))
(cond
((and eww-use-external-browser-for-content-type
(string-match-p eww-use-external-browser-for-content-type
@@ -258,10 +268,11 @@ word(s) will be searched for via `eww-search-prefix'."
(or document
(list
'base (list (cons 'href url))
- (libxml-parse-html-region (point) (point-max))))))
- (setq eww-current-source (buffer-substring (point) (point-max)))
+ (libxml-parse-html-region (point) (point-max)))))
+ (source (buffer-substring (point) (point-max))))
(eww-setup-buffer)
- (setq eww-current-dom document)
+ (setq eww-current-dom document
+ eww-current-source source)
(let ((inhibit-read-only t)
(after-change-functions nil)
(shr-width nil)
@@ -381,8 +392,12 @@ word(s) will be searched for via `eww-search-prefix'."
(shr-put-image data nil))
(goto-char (point-min))))
-(defun eww-setup-buffer ()
- (switch-to-buffer (get-buffer-create "*eww*"))
+(defun eww-setup-buffer (&optional buffer)
+ (set-buffer
+ (cond ((not buffer) (or eww-current-buffer
+ (get-buffer-create eww-buffer-name)))
+ ((bufferp buffer) buffer)
+ (t (generate-new-buffer (or buffer eww-buffer-name)))))
(let ((inhibit-read-only t))
(remove-overlays)
(erase-buffer))
@@ -401,7 +416,7 @@ word(s) will be searched for via `eww-search-prefix'."
(source eww-current-source))
(with-current-buffer buf
(delete-region (point-min) (point-max))
- (insert (or eww-current-source "no source"))
+ (insert (or source "no source"))
(goto-char (point-min))
(when (fboundp 'html-mode)
(html-mode)))
@@ -479,6 +494,7 @@ word(s) will be searched for via `eww-search-prefix'."
(setq-local eww-current-dom nil)
(setq-local eww-current-source nil)
(setq-local eww-current-title "")
+ (setq-local eww-current-buffer (current-buffer))
(setq-local browse-url-browser-function 'eww-browse-url)
(setq-local after-change-functions 'eww-process-text-input)
(setq-local eww-history nil)
@@ -567,7 +583,7 @@ appears in a or tag."
"Reload the current page."
(interactive)
(url-retrieve eww-current-url 'eww-render
- (list eww-current-url (point))))
+ (list eww-current-url (point) eww-current-buffer)))
;; Form support.