From: Daniel Mendler via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org>
To: Stefan Kangas <stefankangas@gmail.com>
Cc: 75052@debbugs.gnu.org
Subject: bug#75052: 31; browse-url-transform-alist is not used by secondary browser
Date: Sat, 04 Jan 2025 12:17:59 +0100 [thread overview]
Message-ID: <878qrqomjc.fsf@daniel-mendler.de> (raw)
In-Reply-To: <CADwFkmmCS-zSaCeQgesnk3wHmD7WZ7xtek-1AK-6SBytwyHE_Q@mail.gmail.com> (Stefan Kangas's message of "Fri, 3 Jan 2025 20:55:56 -0600")
Stefan Kangas <stefankangas@gmail.com> writes:
>> Another perhaps simpler and significantly more minimal approach would be
>> to let-bind `browse-url-browser-function' to
>> `browse-url-secondary-browser-function' at all call-sites instead of
>> calling `browse-url-secondary-browser-function' directly. Inside the
>> let, `browse-url' would be called as usual.
>>
>> However the problem with that approach is that it wouldn't be entirely
>> backward compatible, since the `browse-url-handlers' take precedence
>> over the `browse-url-browser-function'. In order to circumvent this
>> problem we could introduce a new variable
>> `browse-url-override-browser-function' which would take precedence in
>> `browse-url'. `package-browse-url' would become the following:
>>
>> #+begin_src emacs-lisp
>> (defun package-browse-url (desc &optional secondary)
>> (interactive (list (package--query-desc) current-prefix-arg)
>> package-menu-mode)
>> (unless desc
>> (user-error "No package here"))
>> (let ((url (cdr (assoc :url (package-desc-extras desc))))
>> (browse-url-override-browser-function
>> (and secondary browse-url-secondary-browser-function)))
>> (unless url
>> (user-error "No website for %s" (package-desc-name desc)))
>> (browse-url url)))
>> #+end_src
>>
>> However this small incompatibility may even be acceptable. In case URL
>> handlers are defined, you may want them to take precedence in any case.
>>
>> I believe the problem is only pronounced in
>> `browse-url-with-browser-kind' which under all circumstances wants to
>> use the browser function it has chosen. In order to achieve that it
>> could let-bind `browse-url-handlers' and `browse-url-default-handlers'
>> to nil. The function would become this:
>>
>> #+begin_src emacs-lisp
>> (defun browse-url-with-browser-kind (kind url &optional arg)
>> (interactive ...)
>> (let ((function (browse-url-select-handler url kind)))
>> (unless function
>> (setq function
>> (seq-find
>> (lambda (fun)
>> (eq kind (browse-url--browser-kind fun url)))
>> (list browse-url-browser-function
>> browse-url-secondary-browser-function
>> #'browse-url-default-browser
>> #'eww))))
>> ;; Ensure that function is used
>> (let ((browse-url-browser-function function)
>> (browse-url-default-handlers nil)
>> (browse-url-handlers))
>> (browse-url url arg))))
>> #+end_src
>
> I quite like this idea, and I think it buys us some improvements even,
> as you detail above, while the compatibility issues are fixed with the
> new variable.
>
> This is the only idea so far that guarantees that the environment
> variables, etc., that we set now and in future in `browse-url`, are used
> also for the secondary browser. IIUC, it would also give us exactly one
> function that Lisp programs should normally call: `browse-url`.
Yes, it is best if all calls just go through `browse-url'. Also we avoid
adding more functions such that the API isn't made more complex.
Just to be clear - I think we don't actually need the override variable
if we accept a minor change in behavior with respect to the handlers. If
a specific handler is defined we may always want it to take precedence,
except in the case of `browse-url-with-browser-kind', but there we can
simply rebind the handler variables to nil.
> Could you perhaps send a patch?
Yes, I'll send a patch and then you can take another look.
Daniel
next prev parent reply other threads:[~2025-01-04 11:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-23 18:41 bug#75052: 31; browse-url-transform-alist is not used by secondary browser Daniel Mendler via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-12-24 1:00 ` Daniel Mendler via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-03 16:18 ` Stefan Kangas
2025-01-03 16:47 ` Daniel Mendler via Bug reports for GNU Emacs, the Swiss army knife of text editors
2025-01-04 2:55 ` Stefan Kangas
2025-01-04 11:17 ` Daniel Mendler via Bug reports for GNU Emacs, the Swiss army knife of text editors [this message]
2025-01-04 11:59 ` Daniel Mendler 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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878qrqomjc.fsf@daniel-mendler.de \
--to=bug-gnu-emacs@gnu.org \
--cc=75052@debbugs.gnu.org \
--cc=mail@daniel-mendler.de \
--cc=stefankangas@gmail.com \
/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 external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.