From 14fe3679c9b26b29872525c85f3278ecb50c8eac Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Mon, 10 Nov 2014 22:18:11 +0100 Subject: [PATCH] Allow using several eww buffers (bug#16211) * net/eww.el (eww-render, eww-display-html, eww-setup-buffer): Allow taking a buffer to render data in. This allows using several eww buffers (bug#16211). --- etc/ChangeLog | 4 ++++ etc/NEWS | 3 +++ lisp/ChangeLog | 6 ++++++ lisp/net/eww.el | 38 +++++++++++++++++++++++--------------- 4 files changed, 36 insertions(+), 15 deletions(-) diff --git a/etc/ChangeLog b/etc/ChangeLog index d8042977168..c2ed06ca523 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,7 @@ +2014-11-10 Lars Magne Ingebrigtsen + + * NEWS: Mention that you can have several eww buffers (bug#16211). + 2014-11-10 Glenn Morris * refcards/emacsver.tex.in: Rename from emacsver.tex. diff --git a/etc/NEWS b/etc/NEWS index f838fa1c5dc..05210df11b2 100644 --- a/etc/NEWS +++ b/etc/NEWS @@ -153,6 +153,9 @@ result of the calculation into the current buffer. textual parts of a web page and display only that, leaving menus and the like off the page. +*** You can now use several eww buffers in parallel by renaming eww +buffers you want to keep separate. + ** Message mode *** text/html messages that contain inline image parts will be diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 7cd867dd7da..efa44b009cb 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2014-11-10 Lars Magne Ingebrigtsen + + * net/eww.el (eww-render, eww-display-html, eww-setup-buffer): + Allow taking a buffer to render data in. This allows using several + eww buffers (bug#16211). + 2014-11-10 Charles Rendleman (tiny change) * net/eww.el (eww-download-callback): Save only the file contents, diff --git a/lisp/net/eww.el b/lisp/net/eww.el index f6ab07801c7..b867134db00 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -167,7 +167,10 @@ 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 + (and (eq major-mode 'eww-mode) + (current-buffer))))) ;;;###autoload (defalias 'browse-web 'eww) @@ -180,7 +183,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))) @@ -205,14 +208,14 @@ word(s) will be searched for via `eww-search-prefix'." (car content-type))) (eww-browse-with-external-browser url)) ((equal (car content-type) "text/html") - (eww-display-html charset url nil point)) + (eww-display-html charset url nil point buffer)) ((equal (car content-type) "application/pdf") (eww-display-pdf)) ((string-match-p "\\`image/" (car content-type)) - (eww-display-image) + (eww-display-image buffer) (eww-update-header-line-format)) (t - (eww-display-raw) + (eww-display-raw buffer) (eww-update-header-line-format))) (plist-put eww-data :title url) (setq eww-history-position 0)) @@ -247,7 +250,7 @@ word(s) will be searched for via `eww-search-prefix'." (declare-function libxml-parse-html-region "xml.c" (start end &optional base-url)) -(defun eww-display-html (charset url &optional document point) +(defun eww-display-html (charset url &optional document point buffer) (or (fboundp 'libxml-parse-html-region) (error "This function requires Emacs to be compiled with libxml2")) ;; There should be a better way to abort loading images @@ -265,7 +268,7 @@ word(s) will be searched for via `eww-search-prefix'." (libxml-parse-html-region (point) (point-max)))))) (source (and (null document) (buffer-substring (point) (point-max))))) - (eww-setup-buffer) + (eww-setup-buffer buffer) (plist-put eww-data :source source) (plist-put eww-data :dom document) (let ((inhibit-read-only t) @@ -368,16 +371,16 @@ word(s) will be searched for via `eww-search-prefix'." (shr-generic cont) (shr-colorize-region start (point) fgcolor bgcolor))) -(defun eww-display-raw () +(defun eww-display-raw (&optional buffer) (let ((data (buffer-substring (point) (point-max)))) - (eww-setup-buffer) + (eww-setup-buffer buffer) (let ((inhibit-read-only t)) (insert data)) (goto-char (point-min)))) -(defun eww-display-image () +(defun eww-display-image (&optional buffer) (let ((data (shr-parse-image-data))) - (eww-setup-buffer) + (eww-setup-buffer buffer) (let ((inhibit-read-only t)) (shr-put-image data nil)) (goto-char (point-min)))) @@ -392,8 +395,11 @@ word(s) will be searched for via `eww-search-prefix'." (doc-view-mode))) (goto-char (point-min))) -(defun eww-setup-buffer () - (switch-to-buffer (get-buffer-create "*eww*")) +(defun eww-setup-buffer (&optional buffer) + (switch-to-buffer + (if (buffer-live-p buffer) + buffer + (get-buffer-create "*eww*"))) (let ((inhibit-read-only t)) (remove-overlays) (erase-buffer)) @@ -431,7 +437,8 @@ the like." (eww-save-history) (eww-display-html nil nil (shr-retransform-dom - (eww-highest-readability dom))) + (eww-highest-readability dom)) + nil (current-buffer)) (dolist (elem '(:source :url :title :next :previous :up)) (plist-put eww-data elem (plist-get old-data elem))) (eww-update-header-line-format))) @@ -1110,7 +1117,8 @@ If EXTERNAL, browse the URL using `shr-external-browser'." ((and (url-target (url-generic-parse-url url)) (eww-same-page-p url (plist-get eww-data :url))) (eww-save-history) - (eww-display-html 'utf-8 url (plist-get eww-data :url))) + (eww-display-html 'utf-8 url (plist-get eww-data :url) + nil (current-buffer))) (t (eww-browse-url url))))) -- 2.39.5