From: Jim Porter <jporterbugs@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 69232@debbugs.gnu.org
Subject: bug#69232: 30.0.50; [PATCH] EWW history navigation gets caught in a loop
Date: Thu, 22 Feb 2024 12:10:36 -0800 [thread overview]
Message-ID: <969e4621-fd6f-48cb-2aef-d265971dd56a@gmail.com> (raw)
In-Reply-To: <86sf1k1fss.fsf@gnu.org>
[-- Attachment #1: Type: text/plain, Size: 440 bytes --]
On 2/22/2024 11:04 AM, Eli Zaretskii wrote:
> It is IMO still not clear enough about the behavior change. It looks
> like you are describing what the old implementation did and the new
> one will do, instead of describing the behavior as it the user will
> see it. Can you instead describe the change in terms of user-facing
> behavior?
What about this? It mentions the (IMO) buggy behavior and how the new
implementation prevents that.
[-- Attachment #2: 0001-When-navigating-through-history-in-EWW-don-t-keep-ad.patch --]
[-- Type: text/plain, Size: 5227 bytes --]
From 0f2528482527262ff59153595d7a3f10517153ca Mon Sep 17 00:00:00 2001
From: Jim Porter <jporterbugs@gmail.com>
Date: Sat, 17 Feb 2024 20:49:15 -0800
Subject: [PATCH] When navigating through history in EWW, don't keep adding to
'eww-history'
This resolves an issue where navigating back and then forward kept
adding new history entries so you could never hit the "end" (bug#69232).
* lisp/net/eww.el (eww-history-position): Add docstring.
(eww-mode-map, eww-context-menu): Use correct predicates for when to
enable back/forward.
(eww-save-history): Save history entry in its original place when
viewing a historical page.
(eww-back-url): Set 'eww-history-position' based on the result of
'eww-save-history'.
(eww-forward-url): Set 'eww-history-position' directly, since
'eww-save-history' no longer adds a new entry in this case.
* etc/NEWS: Announce this change.
---
etc/NEWS | 8 ++++++++
lisp/net/eww.el | 39 ++++++++++++++++++++++++++++-----------
2 files changed, 36 insertions(+), 11 deletions(-)
diff --git a/etc/NEWS b/etc/NEWS
index 4477116248e..947fb8cf0fc 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -982,6 +982,14 @@ When invoked with the prefix argument ('C-u'),
This is useful for continuing reading the URL in the current buffer
when the new URL is fetched.
+---
+*** History navigation in EWW now works like other browsers.
+Previously, when navigating back and forward through page history, EWW
+would add a duplicate entry to the end of the history list each time.
+This made it impossible to navigate to the "end" of the history list.
+Now, navigating through history in EWW simply changes your position in
+the history list, allowing you to reach the end as expected.
+
** go-ts-mode
+++
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 6ae1e6d3d0a..8196f222ad8 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -312,7 +312,10 @@ eww-valid-certificate
(defvar eww-data nil)
(defvar eww-history nil)
-(defvar eww-history-position 0)
+(defvar eww-history-position 0
+ "The 1-indexed position in `eww-history'.
+If zero, EWW is at the newest page, which isn't yet present in
+`eww-history'.")
(defvar eww-prompt-history nil)
(defvar eww-local-regex "localhost"
@@ -1129,9 +1132,9 @@ eww-mode-map
["Reload" eww-reload t]
["Follow URL in new buffer" eww-open-in-new-buffer]
["Back to previous page" eww-back-url
- :active (not (zerop (length eww-history)))]
+ :active (< eww-history-position (length eww-history))]
["Forward to next page" eww-forward-url
- :active (not (zerop eww-history-position))]
+ :active (> eww-history-position 1)]
["Browse with external browser" eww-browse-with-external-browser t]
["Download" eww-download t]
["View page source" eww-view-source]
@@ -1155,9 +1158,9 @@ eww-context-menu
(easy-menu-define nil easy-menu nil
'("Eww"
["Back to previous page" eww-back-url
- :visible (not (zerop (length eww-history)))]
+ :active (< eww-history-position (length eww-history))]
["Forward to next page" eww-forward-url
- :visible (not (zerop eww-history-position))]
+ :active (> eww-history-position 1)]
["Reload" eww-reload t]))
(dolist (item (reverse (lookup-key easy-menu [menu-bar eww])))
(when (consp item)
@@ -1280,16 +1283,20 @@ eww-back-url
(interactive nil eww-mode)
(when (>= eww-history-position (length eww-history))
(user-error "No previous page"))
- (eww-save-history)
- (setq eww-history-position (+ eww-history-position 2))
+ (if (eww-save-history)
+ ;; We were at the latest page (which was just added to the
+ ;; history), so go back two entries.
+ (setq eww-history-position 2)
+ (setq eww-history-position (1+ eww-history-position)))
(eww-restore-history (elt eww-history (1- eww-history-position))))
(defun eww-forward-url ()
"Go to the next displayed page."
(interactive nil eww-mode)
- (when (zerop eww-history-position)
+ (when (<= eww-history-position 1)
(user-error "No next page"))
(eww-save-history)
+ (setq eww-history-position (1- eww-history-position))
(eww-restore-history (elt eww-history (1- eww-history-position))))
(defun eww-restore-history (elem)
@@ -2289,11 +2296,21 @@ eww-bookmark-mode
;;; History code
(defun eww-save-history ()
+ "Save the current page's data to the history.
+If the current page is a historial one loaded from
+`eww-history' (e.g. by calling `eww-back-url'), this will update the
+page's entry in `eww-history' and return nil. Otherwise, add a new
+entry to `eww-history' and return t."
(plist-put eww-data :point (point))
(plist-put eww-data :text (buffer-string))
- (let ((history-delete-duplicates nil))
- (add-to-history 'eww-history eww-data eww-history-limit t))
- (setq eww-data (list :title "")))
+ (prog1
+ (if (zerop eww-history-position)
+ (let ((history-delete-duplicates nil))
+ (add-to-history 'eww-history eww-data eww-history-limit t)
+ t)
+ (setf (elt eww-history (1- eww-history-position)) eww-data)
+ nil)
+ (setq eww-data (list :title ""))))
(defvar eww-current-buffer)
--
2.25.1
next prev parent reply other threads:[~2024-02-22 20:10 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-18 4:59 bug#69232: 30.0.50; [PATCH] EWW history navigation gets caught in a loop Jim Porter
2024-02-19 12:12 ` Eli Zaretskii
2024-02-19 18:55 ` Jim Porter
2024-02-19 19:17 ` Eli Zaretskii
2024-02-22 13:22 ` Eli Zaretskii
2024-02-22 17:18 ` Jim Porter
2024-02-22 19:04 ` Eli Zaretskii
2024-02-22 20:10 ` Jim Porter [this message]
2024-02-22 20:13 ` Eli Zaretskii
2024-02-24 14:15 ` James Thomas via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-24 14:20 ` Eli Zaretskii
2024-02-24 22:29 ` Jim Porter
2024-02-25 0:50 ` James Thomas via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-24 22:34 ` James Thomas via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-02-25 5:57 ` Eli Zaretskii
2024-02-25 19:40 ` Jim Porter
2024-02-25 19:49 ` Eli Zaretskii
2024-02-25 22:41 ` Jim Porter
2024-02-28 23:39 ` Jim Porter
2024-02-29 7:03 ` Eli Zaretskii
2024-02-29 17:32 ` Jim Porter
2024-02-29 23:30 ` James Thomas via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-01 1:00 ` Jim Porter
2024-03-01 2:10 ` Jim Porter
2024-03-01 7:26 ` Eli Zaretskii
2024-03-01 20:13 ` Jim Porter
2024-03-02 7:38 ` Eli Zaretskii
2024-03-07 0:26 ` Jim Porter
2024-03-01 8:50 ` James Thomas via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-03-01 11:56 ` James Thomas via Bug reports for GNU Emacs, the Swiss army knife of text editors
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=969e4621-fd6f-48cb-2aef-d265971dd56a@gmail.com \
--to=jporterbugs@gmail.com \
--cc=69232@debbugs.gnu.org \
--cc=eliz@gnu.org \
/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).