From 345df3a8f255717a653465513ac9ad9a43c4945f Mon Sep 17 00:00:00 2001 From: Jim Porter 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