From 79d187f4cac1028913fcba25051b8e324b817ae1 Mon Sep 17 00:00:00 2001 From: Andrey Kotlarski Date: Sun, 23 Nov 2014 18:30:17 +0100 Subject: [PATCH] Allow opening eww links in a new buffer * net/eww.el (eww-browse-url): Optionally create new eww buffer. (eww-follow-link): Follow in new buffer in case of prefix argument, open externally with double prefix. --- lisp/ChangeLog | 6 ++++++ lisp/net/eww.el | 23 ++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 74fdd42bdfe..799c7749ec4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2014-11-20 Andrey Kotlarski + + * net/eww.el (eww-browse-url): Optionally create new eww buffer. + (eww-follow-link): Follow in new buffer in case of prefix + argument, open externally with double prefix. + 2014-11-23 Lars Magne Ingebrigtsen * net/eww.el (eww-display-html): Decode the document-defined charset. diff --git a/lisp/net/eww.el b/lisp/net/eww.el index bad9b559384..077a00401cc 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el @@ -693,10 +693,18 @@ the like." (setq buffer-read-only t)) ;;;###autoload -(defun eww-browse-url (url &optional _new-window) - (when (and (equal major-mode 'eww-mode) - (plist-get eww-data :url)) - (eww-save-history)) +(defun eww-browse-url (url &optional new-window) + (cond (new-window + (let ((new-buffer "*eww*") + (num 0)) + (while (get-buffer new-buffer) + (setq num (1+ num) + new-buffer (format "*eww*<%d>" num))) + (switch-to-buffer new-buffer)) + (eww-mode)) + ((and (equal major-mode 'eww-mode) + (plist-get eww-data :url)) + (eww-save-history))) (eww url)) (defun eww-back-url () @@ -1307,7 +1315,8 @@ The browser to used is specified by the `shr-external-browser' variable." (defun eww-follow-link (&optional external mouse-event) "Browse the URL under point. -If EXTERNAL, browse the URL using `shr-external-browser'." +If EXTERNAL is single prefix, browse in new buffer. +If EXTERNAL is double prefix, browse the URL using `shr-external-browser'." (interactive (list current-prefix-arg last-nonmenu-event)) (mouse-set-point mouse-event) (let ((url (get-text-property (point) 'shr-url))) @@ -1316,7 +1325,7 @@ If EXTERNAL, browse the URL using `shr-external-browser'." (message "No link under point")) ((string-match "^mailto:" url) (browse-url-mail url)) - (external + ((and (consp external) (< 4 (car external))) (funcall shr-external-browser url)) ;; This is a #target url in the same page as the current one. ((and (url-target (url-generic-parse-url url)) @@ -1325,7 +1334,7 @@ If EXTERNAL, browse the URL using `shr-external-browser'." (eww-save-history) (eww-display-html 'utf-8 url dom nil (current-buffer)))) (t - (eww-browse-url url))))) + (eww-browse-url url external))))) (defun eww-same-page-p (url1 url2) "Return non-nil if both URLs represent the same page. -- 2.11.4.GIT