summaryrefslogtreecommitdiff
path: root/lisp/net/eww.el
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2021-11-07 00:45:01 +0100
committerLars Ingebrigtsen <larsi@gnus.org>2021-11-07 00:45:01 +0100
commit55fa6a2655972017c692b515b8c476bb9705747d (patch)
tree16995de8f2f896a3233837c435354af4017c96a2 /lisp/net/eww.el
parent9d54b1222cfbd8d64dcd93ec1a76863ae42ee339 (diff)
downloademacs-55fa6a2655972017c692b515b8c476bb9705747d.tar.gz
emacs-55fa6a2655972017c692b515b8c476bb9705747d.tar.bz2
emacs-55fa6a2655972017c692b515b8c476bb9705747d.zip
Add new user option eww-url-transformers
* doc/misc/eww.texi (Advanced): Document it. * lisp/net/eww.el (eww-url-transformers): New user option. (eww-remove-tracking): New default function. (eww--transform-url): Helper function. (eww-follow-link): Use it. (eww): Ditto.
Diffstat (limited to 'lisp/net/eww.el')
-rw-r--r--lisp/net/eww.el24
1 files changed, 22 insertions, 2 deletions
diff --git a/lisp/net/eww.el b/lisp/net/eww.el
index 94a5890ef56..61c7801b102 100644
--- a/lisp/net/eww.el
+++ b/lisp/net/eww.el
@@ -231,6 +231,13 @@ See also `eww-form-checkbox-selected-symbol'."
(const "☐") ; Unicode BALLOT BOX
string))
+(defcustom eww-url-transformers '(eww-remove-tracking)
+ "This is a list of transforming functions applied to an URL before usage.
+The functions will be called with the URL as the single
+parameter, and should return the (possibly) transformed URL."
+ :type '(repeat function)
+ :version "29.1")
+
(defface eww-form-submit
'((((type x w32 ns) (class color)) ; Like default mode line
:box (:line-width 2 :style released-button)
@@ -385,6 +392,7 @@ killed after rendering."
(while (string-match "\\`/[.][.]/" (url-filename parsed))
(setf (url-filename parsed) (substring (url-filename parsed) 3))))
(setq url (url-recreate-url parsed)))
+ (setq url (eww--transform-url url))
(plist-put eww-data :url url)
(plist-put eww-data :title "")
(eww--after-page-change)
@@ -1831,6 +1839,17 @@ The browser to used is specified by the
(funcall browse-url-secondary-browser-function
(or url (plist-get eww-data :url))))
+(defun eww-remove-tracking (url)
+ "Remove the commong utm_ tracking cookies from URLs."
+ (replace-regexp-in-string ".utm_.*" "" url))
+
+(defun eww--transform-url (url)
+ "Appy `eww-url-transformers'."
+ (when url
+ (dolist (func eww-url-transformers)
+ (setq url (funcall func url)))
+ url))
+
(defun eww-follow-link (&optional external mouse-event)
"Browse the URL under point.
If EXTERNAL is single prefix, browse the URL using
@@ -1841,7 +1860,8 @@ If EXTERNAL is double prefix, browse in new buffer."
(list current-prefix-arg last-nonmenu-event)
eww-mode)
(mouse-set-point mouse-event)
- (let ((url (get-text-property (point) 'shr-url)))
+ (let* ((orig-url (get-text-property (point) 'shr-url))
+ (url (eww--transform-url orig-url)))
(cond
((not url)
(message "No link under point"))
@@ -1860,7 +1880,7 @@ If EXTERNAL is double prefix, browse in new buffer."
(plist-put eww-data :url url)
(eww-display-html 'utf-8 url dom nil (current-buffer))))
(t
- (eww-browse-url url external)))))
+ (eww-browse-url orig-url external)))))
(defun eww-same-page-p (url1 url2)
"Return non-nil if URL1 and URL2 represent the same page.