Now that I use
Google Chrome
almost exclusively,
I miss the fact
that a running Firefox instance
could be controlled from the command line so that Emacs could call for a new tab
when I clicked on a URL.
It would run a command something like this:
firefox -remote 'openURL(http://example.com/, new-tab)'
But after a few months of manually cutting and pasting URLs into Chrome —
which wasn't actually that bad,
since the address bar in Chrome is such a convenient and large target —
I decided that I needed a real solution.
After not finding anything like a -remote option,
I discovered that Chrome can at least be run
with a debugging port open:
google-chrome --remote-shell-port=9222
The protocol that Chrome speaks is primitive enough
that it was quick work to implement a small client in Python.
Rather than merely cutting and pasting its code here on my blog,
or even be satisfied with
making it available on bitbucket,
I decided to place the code inside of a new Python package
and make it generally available on PyPI as chrome_remote_shell.
Thanks to this simple package,
a four-line program (not counting the shebang and comment)
is now all that I need to ask Google Chrome to open a new tab:
#!/usr/bin/env python
# Name this file "google-chrome-open-url"
import sys
import chrome_remote_shell
shell = chrome_remote_shell.open()
shell.open_url(sys.argv[-1])
To teach Emacs to start using Google Chrome when I clicked on a link,
I only needed to supply it with two new settings:
(setq browse-url-browser-function
'browse-url-generic)
(setq browse-url-generic-program
"google-chrome-open-url")
And now everything works.
I hope that these notes prove useful to someone else.
Enjoy!