GNU bug report logs - #37592
Using tabs in EWW

Previous Next

Package: emacs;

Reported by: Juri Linkov <juri <at> linkov.net>

Date: Wed, 2 Oct 2019 20:34:02 UTC

Severity: wishlist

Tags: patch

Done: Juri Linkov <juri <at> linkov.net>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 37592 in the body.
You can then email your comments to 37592 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Wed, 02 Oct 2019 20:34:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Juri Linkov <juri <at> linkov.net>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Wed, 02 Oct 2019 20:34:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: bug-gnu-emacs <at> gnu.org
Subject: Using tabs in EWW
Date: Wed, 02 Oct 2019 23:31:17 +0300
[Message part 1 (text/plain, inline)]
Severity: wishlist
Tags: patch

Like <C-mouse-1> in web browsers opens links in a new tab,
the attached patch does the same for EWW.

The change that implements support for tabs in EWW is just 3 lines:

    (when eww-browse-url-new-window-is-tab
      (let ((tab-bar-new-tab-choice t))
        (tab-new)))

Everything else is replicating the existing code:

1. A new defcustom eww-browse-url-new-window-is-tab is a copy
   of existing browse-url-firefox-new-window-is-tab

2. The docstring for eww-browse-url is copied from browse-url-firefox

3. The code for shr-browse-url is copied from browse-url-at-point

[eww-tabs.patch (text/x-diff, inline)]
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index fb495a9858..a39f8b87cc 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -876,9 +876,32 @@ eww-mode
   (buffer-disable-undo)
   (setq buffer-read-only t))
 
+(defcustom eww-browse-url-new-window-is-tab nil
+  "Whether to open up new windows in a tab or a new buffer.
+If non-nil, then open the URL in a new tab rather than a new buffer if
+`eww-browse-url' is asked to open it in a new window."
+  :version "27.1"
+  :group 'eww
+  :type 'boolean)
+
 ;;;###autoload
 (defun eww-browse-url (url &optional new-window)
+  "Ask the EWW browser to load URL.
+
+Interactively, if the variable `browse-url-new-window-flag' is non-nil,
+loads the document in a new buffer tab on the window tab-line.  A non-nil
+prefix argument reverses the effect of `browse-url-new-window-flag'.
+
+If `eww-browse-url-new-window-is-tab' is non-nil, then
+whenever a document would otherwise be loaded in a new buffer, it
+is loaded in a new tab in the tab-bar on an existing frame.
+
+Non-interactively, this uses the optional second argument NEW-WINDOW
+instead of `browse-url-new-window-flag'."
   (when new-window
+    (when eww-browse-url-new-window-is-tab
+      (let ((tab-bar-new-tab-choice t))
+        (tab-new)))
     (pop-to-buffer-same-window
      (generate-new-buffer
       (format "*eww-%s*" (url-host (url-generic-parse-url
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index ef236bf7c4..390be4deff 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -201,6 +201,7 @@ shr-map
     (define-key map [?\M-\t] 'shr-previous-link)
     (define-key map [follow-link] 'mouse-face)
     (define-key map [mouse-2] 'shr-browse-url)
+    (define-key map [C-down-mouse-1] 'shr-mouse-browse-url-new-window)
     (define-key map "I" 'shr-insert-image)
     (define-key map "w" 'shr-maybe-probe-and-copy-url)
     (define-key map "u" 'shr-maybe-probe-and-copy-url)
@@ -967,7 +968,13 @@ shr-mouse-browse-url
   (mouse-set-point ev)
   (shr-browse-url))
 
-(defun shr-browse-url (&optional external mouse-event)
+(defun shr-mouse-browse-url-new-window (ev)
+  "Browse the URL under the mouse cursor in a new window."
+  (interactive "e")
+  (mouse-set-point ev)
+  (shr-browse-url nil nil t))
+
+(defun shr-browse-url (&optional external mouse-event new-window)
   "Browse the URL at point using `browse-url'.
 If EXTERNAL is non-nil (interactively, the prefix argument), browse
 the URL using `browse-url-secondary-browser-function'.
@@ -987,7 +994,9 @@ shr-browse-url
           (progn
 	    (funcall browse-url-secondary-browser-function url)
             (shr--blink-link))
-	(browse-url url))))))
+	(browse-url url (if new-window
+			    (not browse-url-new-window-flag)
+			  browse-url-new-window-flag)))))))
 
 (defun shr-save-contents (directory)
   "Save the contents from URL in a file."

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Wed, 02 Oct 2019 22:32:02 GMT) Full text and rfc822 format available.

Message #8 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Thu, 03 Oct 2019 00:20:24 +0300
Addendum:

diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index fb495a9858..88a351adb1 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -369,6 +369,9 @@ eww-open-in-new-buffer
   (interactive)
   (let ((url (eww-suggested-uris)))
     (if (null url) (user-error "No link at point")
+      (when eww-browse-url-new-window-is-tab
+        (let ((tab-bar-new-tab-choice t))
+          (tab-new)))
       ;; clone useful to keep history, but
       ;; should not clone from non-eww buffer
       (with-current-buffer




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Thu, 03 Oct 2019 02:45:02 GMT) Full text and rfc822 format available.

Message #11 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Thu, 03 Oct 2019 05:44:27 +0300
> From: Juri Linkov <juri <at> linkov.net>
> Date: Wed, 02 Oct 2019 23:31:17 +0300
> 
> Like <C-mouse-1> in web browsers opens links in a new tab,
> the attached patch does the same for EWW.
> 
> The change that implements support for tabs in EWW is just 3 lines:
> 
>     (when eww-browse-url-new-window-is-tab
>       (let ((tab-bar-new-tab-choice t))
>         (tab-new)))
> 
> Everything else is replicating the existing code:
> 
> 1. A new defcustom eww-browse-url-new-window-is-tab is a copy
>    of existing browse-url-firefox-new-window-is-tab
> 
> 2. The docstring for eww-browse-url is copied from browse-url-firefox
> 
> 3. The code for shr-browse-url is copied from browse-url-at-point

Instead of adding another defcustom, how about doing this by default
if tab-bar-mode is enabled?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Thu, 03 Oct 2019 14:21:02 GMT) Full text and rfc822 format available.

Message #14 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Thu, 03 Oct 2019 16:20:40 +0200
Juri Linkov <juri <at> linkov.net> writes:

> Like <C-mouse-1> in web browsers opens links in a new tab,
> the attached patch does the same for EWW.

Sounds good -- in addition to adding this command and key binding, the
rest of the code deals with whether "new window" means "new buffer" (as
it does today) or whether it should mean "new tab"?  As Eli pointed out,
perhaps that should be determined by whether tab-bar-mode is on or off?

Otherwise, it looks fine to me.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Thu, 03 Oct 2019 23:20:02 GMT) Full text and rfc822 format available.

Message #17 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Fri, 04 Oct 2019 01:39:42 +0300
>> Like <C-mouse-1> in web browsers opens links in a new tab,
>> the attached patch does the same for EWW.
>>
>> The change that implements support for tabs in EWW is just 3 lines:
>>
>>     (when eww-browse-url-new-window-is-tab
>>       (let ((tab-bar-new-tab-choice t))
>>         (tab-new)))
>>
>> Everything else is replicating the existing code:
>>
>> 1. A new defcustom eww-browse-url-new-window-is-tab is a copy
>>    of existing browse-url-firefox-new-window-is-tab
>>
>> 2. The docstring for eww-browse-url is copied from browse-url-firefox
>>
>> 3. The code for shr-browse-url is copied from browse-url-at-point
>
> Instead of adding another defcustom, how about doing this by default
> if tab-bar-mode is enabled?

I guess the users still need to decide whether they want to open
new tabs in the tab-bar (when eww-browse-url-new-window-is-tab is non-nil),
or new tabs in the tab-line (when eww-browse-url-new-window-is-tab is nil)
that just creates a new buffer displayed in the window-local tab-line -
this is the current behavior.

Another use case is that when tab-bar-mode is not yet enabled,
users migth prefer that clicking on a link with a Ctrl key
could enable the tab-bar and open a new tab in automatically
enabled tab-bar.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Fri, 04 Oct 2019 07:35:02 GMT) Full text and rfc822 format available.

Message #20 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Fri, 04 Oct 2019 10:34:32 +0300
> From: Juri Linkov <juri <at> linkov.net>
> Cc: 37592 <at> debbugs.gnu.org
> Date: Fri, 04 Oct 2019 01:39:42 +0300
> 
> > Instead of adding another defcustom, how about doing this by default
> > if tab-bar-mode is enabled?
> 
> I guess the users still need to decide whether they want to open
> new tabs in the tab-bar (when eww-browse-url-new-window-is-tab is non-nil),
> or new tabs in the tab-line (when eww-browse-url-new-window-is-tab is nil)
> that just creates a new buffer displayed in the window-local tab-line -
> this is the current behavior.
> 
> Another use case is that when tab-bar-mode is not yet enabled,
> users migth prefer that clicking on a link with a Ctrl key
> could enable the tab-bar and open a new tab in automatically
> enabled tab-bar.

It seems to me that there are sensible defaults in each of these
situations, and we could use those defaults unconditionally until
users complained.

Adding too many user options has a downside as well, you know.

Just one opinion.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Sat, 05 Oct 2019 22:38:01 GMT) Full text and rfc822 format available.

Message #23 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Sun, 06 Oct 2019 01:35:40 +0300
[Message part 1 (text/plain, inline)]
>> > Instead of adding another defcustom, how about doing this by default
>> > if tab-bar-mode is enabled?
>> 
>> I guess the users still need to decide whether they want to open
>> new tabs in the tab-bar (when eww-browse-url-new-window-is-tab is non-nil),
>> or new tabs in the tab-line (when eww-browse-url-new-window-is-tab is nil)
>> that just creates a new buffer displayed in the window-local tab-line -
>> this is the current behavior.
>> 
>> Another use case is that when tab-bar-mode is not yet enabled,
>> users migth prefer that clicking on a link with a Ctrl key
>> could enable the tab-bar and open a new tab in automatically
>> enabled tab-bar.
>
> It seems to me that there are sensible defaults in each of these
> situations, and we could use those defaults unconditionally until
> users complained.
>
> Adding too many user options has a downside as well, you know.
>
> Just one opinion.

I agree, let's try this heuristics to open new tabs
when tab-bar-mode is enabled:

[eww-tabs.2.patch (text/x-diff, inline)]
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index b8821cbc29..d0a4c9a790 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -105,7 +105,10 @@ Basics
 @kindex M-RET
   The @kbd{M-@key{RET}} command (@code{eww-open-in-new-buffer}) opens the
 URL at point in a new EWW buffer, akin to opening a link in a new
-``tab'' in other browsers.
+``tab'' in other browsers.  When @code{global-tab-line-mode} is
+enabled, this buffer is displayed in the tab on the window tab line.
+When @code{tab-bar-mode} is enabled, a new tab is created on the frame
+tab bar.
 
 @findex eww-readable
 @kindex R
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index fb495a9858..0756c6088b 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -369,6 +369,9 @@ eww-open-in-new-buffer
   (interactive)
   (let ((url (eww-suggested-uris)))
     (if (null url) (user-error "No link at point")
+      (when tab-bar-mode
+        (let ((tab-bar-new-tab-choice t))
+          (tab-new)))
       ;; clone useful to keep history, but
       ;; should not clone from non-eww buffer
       (with-current-buffer
@@ -878,7 +881,22 @@ eww-mode
 
 ;;;###autoload
 (defun eww-browse-url (url &optional new-window)
+  "Ask the EWW browser to load URL.
+
+Interactively, if the variable `browse-url-new-window-flag' is non-nil,
+loads the document in a new buffer tab on the window tab-line.  A non-nil
+prefix argument reverses the effect of `browse-url-new-window-flag'.
+
+If `tab-bar-mode' is enabled, then whenever a document would
+otherwise be loaded in a new buffer, it is loaded in a new tab
+in the tab-bar on an existing frame.
+
+Non-interactively, this uses the optional second argument NEW-WINDOW
+instead of `browse-url-new-window-flag'."
   (when new-window
+    (when tab-bar-mode
+      (let ((tab-bar-new-tab-choice t))
+        (tab-new)))
     (pop-to-buffer-same-window
      (generate-new-buffer
       (format "*eww-%s*" (url-host (url-generic-parse-url
diff --git a/lisp/net/shr.el b/lisp/net/shr.el
index 628cc17a5b..f3d5de9fb6 100644
--- a/lisp/net/shr.el
+++ b/lisp/net/shr.el
@@ -201,6 +201,7 @@ shr-map
     (define-key map [?\M-\t] 'shr-previous-link)
     (define-key map [follow-link] 'mouse-face)
     (define-key map [mouse-2] 'shr-browse-url)
+    (define-key map [C-down-mouse-1] 'shr-mouse-browse-url-new-window)
     (define-key map "I" 'shr-insert-image)
     (define-key map "w" 'shr-maybe-probe-and-copy-url)
     (define-key map "u" 'shr-maybe-probe-and-copy-url)
@@ -967,7 +968,13 @@ shr-mouse-browse-url
   (mouse-set-point ev)
   (shr-browse-url))
 
-(defun shr-browse-url (&optional external mouse-event)
+(defun shr-mouse-browse-url-new-window (ev)
+  "Browse the URL under the mouse cursor in a new window."
+  (interactive "e")
+  (mouse-set-point ev)
+  (shr-browse-url nil nil t))
+
+(defun shr-browse-url (&optional external mouse-event new-window)
   "Browse the URL at point using `browse-url'.
 If EXTERNAL is non-nil (interactively, the prefix argument), browse
 the URL using `browse-url-secondary-browser-function'.
@@ -987,7 +994,9 @@ shr-browse-url
           (progn
 	    (funcall browse-url-secondary-browser-function url)
             (shr--blink-link))
-	(browse-url url))))))
+	(browse-url url (if new-window
+			    (not browse-url-new-window-flag)
+			  browse-url-new-window-flag)))))))
 
 (defun shr-save-contents (directory)
   "Save the contents from URL in a file."

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Sun, 06 Oct 2019 17:24:03 GMT) Full text and rfc822 format available.

Message #26 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Sun, 06 Oct 2019 20:22:57 +0300
> From: Juri Linkov <juri <at> linkov.net>
> Cc: 37592 <at> debbugs.gnu.org
> Date: Sun, 06 Oct 2019 01:35:40 +0300
> 
> > It seems to me that there are sensible defaults in each of these
> > situations, and we could use those defaults unconditionally until
> > users complained.
> >
> > Adding too many user options has a downside as well, you know.
> >
> > Just one opinion.
> 
> I agree, let's try this heuristics to open new tabs
> when tab-bar-mode is enabled:

LGTM, thanks.  It is probably a NEWS-worthy change.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Sun, 06 Oct 2019 20:07:02 GMT) Full text and rfc822 format available.

Message #29 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Juri Linkov <juri <at> linkov.net>
Cc: 37592 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#37592: Using tabs in EWW
Date: Sun, 06 Oct 2019 22:06:28 +0200
Juri Linkov <juri <at> linkov.net> writes:

> I agree, let's try this heuristics to open new tabs
> when tab-bar-mode is enabled:

Looks good to me, too.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Reply sent to Juri Linkov <juri <at> linkov.net>:
You have taken responsibility. (Sun, 06 Oct 2019 21:12:02 GMT) Full text and rfc822 format available.

Notification sent to Juri Linkov <juri <at> linkov.net>:
bug acknowledged by developer. (Sun, 06 Oct 2019 21:12:02 GMT) Full text and rfc822 format available.

Message #34 received at 37592-done <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Eli Zaretskii <eliz <at> gnu.org>, 37592-done <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Mon, 07 Oct 2019 00:08:33 +0300
>> I agree, let's try this heuristics to open new tabs
>> when tab-bar-mode is enabled:
>
> Looks good to me, too.

I also updated the Info documentation on opening tabs by 'C-u RET'.
but can't find a suitable place to describe using tabs on clicking
with the Ctrl key, because currently the EWW documentation has
no mentions of mouse commands.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#37592; Package emacs. (Sat, 19 Oct 2019 22:43:01 GMT) Full text and rfc822 format available.

Message #37 received at 37592 <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 37592 <at> debbugs.gnu.org
Subject: Re: bug#37592: Using tabs in EWW
Date: Sun, 20 Oct 2019 01:40:55 +0300
>> > Instead of adding another defcustom, how about doing this by default
>> > if tab-bar-mode is enabled?
>> 
>> I guess the users still need to decide whether they want to open
>> new tabs in the tab-bar (when eww-browse-url-new-window-is-tab is non-nil),
>> or new tabs in the tab-line (when eww-browse-url-new-window-is-tab is nil)
>> that just creates a new buffer displayed in the window-local tab-line -
>> this is the current behavior.
>> 
>> Another use case is that when tab-bar-mode is not yet enabled,
>> users migth prefer that clicking on a link with a Ctrl key
>> could enable the tab-bar and open a new tab in automatically
>> enabled tab-bar.
>
> It seems to me that there are sensible defaults in each of these
> situations, and we could use those defaults unconditionally until
> users complained.

Users complained, so I added that defcustom.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 17 Nov 2019 12:24:12 GMT) Full text and rfc822 format available.

This bug report was last modified 5 years and 213 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.