|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:
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!comments powered by Disqus