From 25e49841e3c943d5746f2eb57375a7460651d088 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Fri, 25 Apr 2025 13:36:18 +0200 Subject: gh-113539: Enable using ``$BROWSER`` to reorder default seach order in webbrowser.py (#113561) Co-authored-by: Hugo van Kemenade Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> --- Doc/library/webbrowser.rst | 13 +++++++++++-- Doc/whatsnew/3.14.rst | 11 +++++++++++ Lib/webbrowser.py | 17 +++++++++++++++-- .../2023-12-29-09-44-41.gh-issue-113539.YDkv9O.rst | 6 ++++++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2023-12-29-09-44-41.gh-issue-113539.YDkv9O.rst diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst index baccc79..cbb2b06 100644 --- a/Doc/library/webbrowser.rst +++ b/Doc/library/webbrowser.rst @@ -24,8 +24,17 @@ If the environment variable :envvar:`BROWSER` exists, it is interpreted as the :data:`os.pathsep`-separated list of browsers to try ahead of the platform defaults. When the value of a list part contains the string ``%s``, then it is interpreted as a literal browser command line to be used with the argument URL -substituted for ``%s``; if the part does not contain ``%s``, it is simply -interpreted as the name of the browser to launch. [1]_ +substituted for ``%s``; if the value is a single word that refers to one of the +already registered browsers this browser is added to the front of the search list; +if the part does not contain ``%s``, it is simply interpreted as the name of the +browser to launch. [1]_ + +.. versionchanged:: next + + The :envvar:`BROWSER` variable can now also be used to reorder the list of + platform defaults. This is particularly useful on macOS where the platform + defaults do not refer to command-line tools on :envvar:`PATH`. + For non-Unix platforms, or when a remote browser is available on Unix, the controlling process will not wait for the user to finish with the browser, but diff --git a/Doc/whatsnew/3.14.rst b/Doc/whatsnew/3.14.rst index 3893060..bc7b12c 100644 --- a/Doc/whatsnew/3.14.rst +++ b/Doc/whatsnew/3.14.rst @@ -1421,6 +1421,17 @@ uuid (Contributed by Simon Legner in :gh:`131236`.) +webbrowser +---------- + +* Names in the :envvar:`BROWSER` environment variable can now refer to already + registered browsers for the :mod:`webbrowser` module, instead of always + generating a new browser command. + + This makes it possible to set :envvar:`BROWSER` to the value of one of the + supported browsers on macOS. + + zipinfo ------- diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index 232d3c3..ab50ec1 100644 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -482,10 +482,10 @@ def register_standard_browsers(): if sys.platform == 'darwin': register("MacOSX", None, MacOSXOSAScript('default')) - register("chrome", None, MacOSXOSAScript('chrome')) + register("chrome", None, MacOSXOSAScript('google chrome')) register("firefox", None, MacOSXOSAScript('firefox')) register("safari", None, MacOSXOSAScript('safari')) - # OS X can use below Unix support (but we prefer using the OS X + # macOS can use below Unix support (but we prefer using the macOS # specific stuff) if sys.platform == "ios": @@ -559,6 +559,19 @@ def register_standard_browsers(): # Treat choices in same way as if passed into get() but do register # and prepend to _tryorder for cmdline in userchoices: + if all(x not in cmdline for x in " \t"): + # Assume this is the name of a registered command, use + # that unless it is a GenericBrowser. + try: + command = _browsers[cmdline.lower()] + except KeyError: + pass + + else: + if not isinstance(command[1], GenericBrowser): + _tryorder.insert(0, cmdline.lower()) + continue + if cmdline != '': cmd = _synthesize(cmdline, preferred=True) if cmd[1] is None: diff --git a/Misc/NEWS.d/next/Library/2023-12-29-09-44-41.gh-issue-113539.YDkv9O.rst b/Misc/NEWS.d/next/Library/2023-12-29-09-44-41.gh-issue-113539.YDkv9O.rst new file mode 100644 index 0000000..c2c3a2d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-12-29-09-44-41.gh-issue-113539.YDkv9O.rst @@ -0,0 +1,6 @@ +:mod:`webbrowser`: Names in the :envvar:`BROWSER` environment variable can now +refer to already registered web browsers, instead of always generating a new +browser command. + +This makes it possible to set :envvar:`BROWSER` to the value of one of the +supported browsers on macOS. -- cgit v0.12