0

TL;DR: Sublime Text gets a different response from webbrowser._browsers than my terminal.

This has been driving me nuts. I use a plugin, GitLink which will open a GitHub link from your current file. It relies on Python’s webbrowser tool to open the url. The problem is my default browser is Chrome, but it keeps opening Firefox.

In my terminal, if I launch into python or python3, webbrowser.open_new_tab('https://stackoverflow.com') will correctly launch in Chrome. webbrowser._browsers will correctly list 'chrome' as one of my browsers.

However, in the Sublime Text console, webbrowser._browsers is missing Chrome. It lists all the other browser save for the one I actually want. What gives? How is Sublime Text getting a different list than when I run python in my terminal? How do I get it to match?

elstgav
  • 1,001
  • 7
  • 20
  • It may be due to differences in python versions (internally Sublime uses 3.3.6). What OS are you experiencing this on? – OdatNurd May 26 '17 at 19:13
  • could be a known bug: https://github.com/SublimeTextIssues/Core/issues/1714 - if you type/paste the following in ST's console and press Enter, what is the output? is the `BROWSER` environment variable set? `import os; os.environ` – Keith Hall May 26 '17 at 19:44
  • Thanks for the replies! I'm on MacOS 10.12.5. And no, `BROWSER` isn’t set. The weird thing is this was working correctly last week. I’m wondering if I broke some permissions somewhere, or my path is set incorrectly. – elstgav May 27 '17 at 19:55

1 Answers1

1

There are several things you could try.

1. Set the BROWSER environment variable:

As Keith Hall implied this problem might be solved by setting your BROWSER environment variable. If you don't know how look it up for your version - OSX changed how environment variables get set at some point so there are different ways of doing this for different versions of OSX. However, I am on Linux, and my BROWSER environment variable is not set and ST always opens urls in my default browser, this includes calls to webbrowser.open_new_tab() which (as I assume you saw) is what GitLink uses to open urls, so this may not solve the problem.

2. Modify GitLink (your installed version):

First test if this will work - works fine on Linux.

Copy and paste the following 2 lines into the ST console:

import webbrowser
webbrowser.get("chrome").open_new_tab("http://www.google.com")

If that does not open Chrome with Google.com try:

# google-chrome: Chrome variant.
webbrowser.get("google-chrome").open_new_tab("http://www.google.com")
# macosx: uses the OSX default browser.
webbrowser.get("macosx").open_new_tab("http://www.google.com")
# links: generic; doubtful but worth trying at this stage.
webbrowser.get("links").open_new_tab("http://www.google.com")

The full list of possible values may be helpful.

Another possibility is to use the full path instead, see this StackOverflow answer or try:

# Replace path with your path to Chrome if necessary.
webbrowser.register('chrome_path', None, webbrowser.BackgroundBrowser("/Applications/Google Chrome.app"))
webbrowser.get('chrome_path').open_new_tab(url)

Once that is working:

  • Install the PackageResourceViewer plugin; after it is installed...
  • Open the Command Palette and select: PackageResourceViewer: Open Resource
  • In the list of packages select: GitLink
  • In the list of files select: GitLink.py
  • The file GitLink.py will open...

If you save this file (nothing will happen at all if you close it without saving) then a copy of GitLink.py will get saved on your system in this location: ST_CONFIG/Packages/GitLink/GitLink.py - this version of the file will override the version of GitLink.py which is stored in the Gitlink.sublime-package file which Package Control would have installed in the Installed Packages folder. Even if the GitLink package gets updated the version in the .sublime-package file will still get overridden. Not a problem, all you need to do to get rid of the changes made is to delete the folder ST_CONFIG/Packages/GitLink/ which contains the GitLink.py file and ST will start using the version from the .sublime-package file again.

The modification is easy:

Scroll down to the bottom of GitLink.py where you will see the lines:

if(args['web']):
    webbrowser.open_new_tab(url)

Just change the webbrowser.open_new_tab(url) line to the following (replacing "chrome" if necessary with the value which worked in the console):

if(args['web']):
    webbrowser.get("chrome").open_new_tab(url)

Save the file, the plugin should be updated immediately by ST (check the console for the "reloading plugin" message to be sure if you want). The plugin should now open your urls in Chrome.

3. Open an issue on GitLink's GitHub page:

The issue page is here. State your problem and request a setting be added so that users can specify which browser Python's webbrowser module should use.

I suggest you do this anyway and add a link to this StackOverflow page to your issue for reference.

mattst
  • 13,340
  • 4
  • 31
  • 43
  • Wow, thank you very much for a thorough answer! However, after recently updating Sublime Text the problem resolved itself—not sure what the cause of the issue was – elstgav Jun 09 '17 at 17:47