From: Jim Porter <jporterbugs@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>, Navajeeth <yvv0@proton.me>
Cc: 68254@debbugs.gnu.org
Subject: bug#68254: EWW ‘readable’ by default
Date: Sun, 17 Mar 2024 12:24:26 -0700 [thread overview]
Message-ID: <6ee278b0-1511-cfd9-7695-7e019d879f7b@gmail.com> (raw)
In-Reply-To: <83frzbvr66.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 1397 bytes --]
On 1/5/2024 5:35 AM, Eli Zaretskii wrote:
> [Please use Reply All to reply, so that the bug tracker is CC'ed.]
>
>> Date: Fri, 05 Jan 2024 12:08:29 +0000
>> From: Navajeeth <yvv0@proton.me>
>>
>> I’ve tried that method. While at first it appears to work how I want, it’s sub-optimal because it clutters
>> your history with two version of every webpage you open: one the full non-readable version and then
>> the readable version generated by the after-render-hook. Going back in the history is a chore,
>> you need to press ‘l’ twice to go back one webpage.
>>
>> I used to tolerate it for a while, but now I feel that there could be a better way.
Here's a patch for this. It turns 'eww-readable' into a toggle (using
the same semantics as minor modes), and also adds an option to prevent
adding a new history entry for each call.
After this patch, you could set 'eww-readable-adds-to-history' to nil
and add 'eww-readable' to 'eww-after-render-hook', and then everything
should work ok. With those settings, you could then call 'eww-readable'
to display the full page if needed.
(There might be some value in adding another new option that lets you
specify a list of regexps to match pages that should start in readable
mode; then it would be easy for users to enable that for
"https://example\.com/.*" or similar. We can do that later if there's
any demand for it, though.)
[-- Attachment #2: 0001-Allow-toggling-readable-mode-in-EWW.patch --]
[-- Type: text/plain, Size: 5305 bytes --]
From 345df3a8f255717a653465513ac9ad9a43c4945f Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Sun, 17 Mar 2024 12:01:59 -0700
Subject: [PATCH] Allow toggling "readable" mode in EWW
Additionally, add an option to prevent adding a new history entry for
each call of 'eww-readable' (bug#68254).
* lisp/net/eww.el (eww-readable-adds-to-history): New option.
(eww-readable): Toggle "readable" mode interactively, like with a minor
mode. Consult 'eww-readable-adds-to-history'.
* doc/misc/eww.texi (Basics): Describe the new behavior.
* etc/NEWS: Announce this change.
---
doc/misc/eww.texi | 5 +++++
etc/NEWS | 12 ++++++++++++
lisp/net/eww.el | 46 ++++++++++++++++++++++++++++++++++++----------
3 files changed, 53 insertions(+), 10 deletions(-)
diff --git a/doc/misc/eww.texi b/doc/misc/eww.texi
index d31fcf1802b..bec58da3e21 100644
--- a/doc/misc/eww.texi
+++ b/doc/misc/eww.texi
@@ -146,6 +146,11 @@ Basics
which part of the document contains the ``readable'' text, and will
only display this part. This usually gets rid of menus and the like.
+When called interactively, this command toggles the display of the
+readable parts. With a positive prefix argument, always display the
+readable parts, and with a zero or negative prefix, display the full
+page.
+
@findex eww-toggle-fonts
@vindex shr-use-fonts
@kindex F
diff --git a/etc/NEWS b/etc/NEWS
index b02712dd21c..b23754fb17f 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1054,6 +1054,18 @@ entries newer than the current page. To change the behavior when
browsing from "historical" pages, you can customize
'eww-before-browse-history-function'.
++++
+*** 'eww-readable' now toggles display of the readable parts of a web page.
+When called interactively, 'eww-readable' toggles whether to display
+only the readable parts of a page or the full page. With a positive
+prefix argument, always display the readable parts, and with a zero or
+negative prefix, always display the full page.
+
+---
+*** New option 'eww-readable-adds-to-history'.
+When non-nil (the default), calling 'eww-readable' adds a new entry to
+the EWW page history.
+
** go-ts-mode
+++
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 54847bdf396..305357f8f2f 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -275,6 +275,11 @@ eww-url-transformers
:type '(repeat function)
:version "29.1")
+(defcustom eww-readable-adds-to-history t
+ "If non-nil, calling `eww-readable' adds a new entry to the history."
+ :type 'boolean
+ :version "30.1")
+
(defface eww-form-submit
'((((type x w32 ns haiku pgtk android) (class color)) ; Like default mode line
:box (:line-width 2 :style released-button)
@@ -1055,14 +1060,31 @@ eww-toggle-paragraph-direction
"automatic"
bidi-paragraph-direction)))
-(defun eww-readable ()
- "View the main \"readable\" parts of the current web page.
+(defun eww-readable (&optional arg)
+ "Toggle display of only the main \"readable\" parts of the current web page.
This command uses heuristics to find the parts of the web page that
-contains the main textual portion, leaving out navigation menus and
-the like."
- (interactive nil eww-mode)
+contains the main textual portion, leaving out navigation menus and the
+like.
+
+If called interactively, toggle the display of the readable parts. If
+the prefix argument is positive, display the readable parts, and if it
+is zero or negative, display the full page.
+
+If called from Lisp, toggle the display of the readable parts if ARG is
+`toggle'. Display the readable parts if ARG is nil, omitted, or is a
+positive number. Display the full page if ARG is a negative number."
+ (interactive (list (if current-prefix-arg
+ (prefix-numeric-value current-prefix-arg)
+ 'toggle))
+ eww-mode)
(let* ((old-data eww-data)
- (dom (with-temp-buffer
+ (make-readable (cond
+ ((eq arg 'toggle)
+ (not (plist-get old-data :readable)))
+ ((and (numberp arg) (< arg 1))
+ nil)
+ (t t)))
+ (dom (with-temp-buffer
(insert (plist-get old-data :source))
(condition-case nil
(decode-coding-region (point-min) (point-max) 'utf-8)
@@ -1071,14 +1093,18 @@ eww-readable
(libxml-parse-html-region (point-min) (point-max))))
(base (plist-get eww-data :url)))
(eww-score-readability dom)
- (eww-save-history)
- (eww--before-browse)
+ (when eww-readable-adds-to-history
+ (eww-save-history)
+ (eww--before-browse))
(eww-display-html nil nil
- (list 'base (list (cons 'href base))
- (eww-highest-readability dom))
+ (if make-readable
+ (list 'base (list (cons 'href base))
+ (eww-highest-readability dom))
+ dom)
nil (current-buffer))
(dolist (elem '(:source :url :title :next :previous :up :peer))
(plist-put eww-data elem (plist-get old-data elem)))
+ (plist-put eww-data :readable make-readable)
(eww--after-page-change)))
(defun eww-score-readability (node)
--
2.25.1
next prev parent reply other threads:[~2024-03-17 19:24 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-05 7:35 bug#68254: EWW ‘readable’ by default Navajeeth via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-01-05 11:52 ` Eli Zaretskii
[not found] ` <poNSnv1DQ7L71-FirbCx9nuQ8gqLlPGTIjDYk2pKo2_H3BPuJArYQ2ziQ4pyADSxHCY5cU40D6MUzRqBAZE3pEcFmnzFPD49xunpLyh1UqI=@proton.me>
2024-01-05 13:35 ` Eli Zaretskii
2024-03-17 19:24 ` Jim Porter [this message]
2024-03-18 4:32 ` Adam Porter
2024-03-18 5:17 ` Navajeeth via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-18 5:44 ` Jim Porter
2024-03-18 5:18 ` Jim Porter
2024-03-18 12:37 ` Eli Zaretskii
2024-03-19 0:00 ` Jim Porter
2024-03-21 10:51 ` Eli Zaretskii
2024-03-22 5:46 ` Jim Porter
2024-03-23 7:48 ` Eli Zaretskii
2024-03-23 17:26 ` Jim Porter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6ee278b0-1511-cfd9-7695-7e019d879f7b@gmail.com \
--to=jporterbugs@gmail.com \
--cc=68254@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=yvv0@proton.me \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).