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.