emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 14a3dd6a30f: New user option browse-url-transform-alist


From: Stefan Kangas
Subject: master 14a3dd6a30f: New user option browse-url-transform-alist
Date: Tue, 17 Dec 2024 22:15:42 -0500 (EST)

branch: master
commit 14a3dd6a30f7a720f29d51f2df8f8ab8138989a0
Author: Stefan Kangas <stefankangas@gmail.com>
Commit: Stefan Kangas <stefankangas@gmail.com>

    New user option browse-url-transform-alist
    
    * lisp/net/browse-url.el (browse-url-transform-alist): New user option.
    (browse-url): Transform URL before loading if above new option is set.
---
 etc/NEWS               |  6 ++++++
 lisp/net/browse-url.el | 21 +++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/etc/NEWS b/etc/NEWS
index d73d654d5fb..f9ed0dd17e7 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -331,6 +331,12 @@ modal editing packages.
 
 ** Browse URL
 
+*** New user option 'browse-url-transform-alist'.
+This user option is an alist that allows transforming URLs before asking
+a web browser to load them.  For example, it could be used like this:
+    (add-to-list 'browse-url-transform-alist
+                 '("www.google.com" . "www.duckduckgo.com"))
+
 *** New function 'browse-url-qutebrowser' for the Qutebrowser.
 For better integration with the Qutebrowser, set
 'browse-url(-secondary)-browser-function' to 'browse-url-qutebrowser'.
diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el
index 8d9046f77b0..b83a9db61aa 100644
--- a/lisp/net/browse-url.el
+++ b/lisp/net/browse-url.el
@@ -263,6 +263,23 @@ be used instead."
   :version "31.1"
   :type 'regexp)
 
+(defcustom browse-url-transform-alist nil
+  "Alist of transformations to apply to URLs before loading it.
+Each element has the form (ORIG . REPLACEMENT), where ORIG is a regular
+expression and REPLACEMENT is the replacement text.  Every element will
+be tested in turn, allowing more than one transformation to be made.
+
+Note that ORIG and REPLACEMENT are passed as arguments to
+`string-match', so you can, for example, use match groups in ORIG and
+backreferences in REPLACEMENT."
+  :type '(choice
+          (const :tag "None" nil)
+          (alist
+           :tag "Alist mapping from regexp to replacement"
+           :key-type (regexp :tag "Regexp")
+           :value-type (regexp :tag "Replacement")))
+  :version "31.1")
+
 (defcustom browse-url-browser-display nil
   "The X display for running the browser, if not same as Emacs's."
   :type '(choice string (const :tag "Default" nil)))
@@ -923,6 +940,10 @@ invert the prefix arg instead."
   (interactive (browse-url-interactive-arg "URL: "))
   (unless (called-interactively-p 'interactive)
     (setq args (or args (list browse-url-new-window-flag))))
+  (when browse-url-transform-alist
+    (dolist (trans browse-url-transform-alist)
+      (when (string-match (car trans) url)
+        (setq url (replace-match (cdr trans) nil t url)))))
   (when (and url-handler-mode
              (not (file-name-absolute-p url))
              (not (string-match "\\`[a-z]+:" url)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]