]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-113539: Enable using ``$BROWSER`` to reorder default seach order in webbrowser...
authorRonald Oussoren <ronaldoussoren@mac.com>
Fri, 25 Apr 2025 11:36:18 +0000 (13:36 +0200)
committerGitHub <noreply@github.com>
Fri, 25 Apr 2025 11:36:18 +0000 (14:36 +0300)
Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
Doc/library/webbrowser.rst
Doc/whatsnew/3.14.rst
Lib/webbrowser.py
Misc/NEWS.d/next/Library/2023-12-29-09-44-41.gh-issue-113539.YDkv9O.rst [new file with mode: 0644]

index baccc791b227fd6d1c1ecbf3a7809c152a5557ba..cbb2b06c2a0f9def422fe7c00440bdf3eab987e4 100644 (file)
@@ -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
index 3893060b15321094b3fcdf6ecf866581ea70cb80..bc7b12c5be21d0fba50e6c07693f17d106198f45 100644 (file)
@@ -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
 -------
 
index 232d3c3a9c593877432cd29f93d36dd77ac0acb5..ab50ec1ee95f9e45ffb468c9fdf5c00fbf2c2a8c 100644 (file)
@@ -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 (file)
index 0000000..c2c3a2d
--- /dev/null
@@ -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.