Date: | 24 February 2010 |
---|---|
Tags: | computing, emacs, python |
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!