Here's a hack that combines three of the most useful things in the known Universe: Google, Emacs and Firefox. Emacs 22.x has a standard method for invoking a browser: the browse URL function. To customise it use:
We are interested in the settings: Browse Url Browser Function which should be set to
M-x customize-group browse-url
browse-url-firefoxThen there is Browse Url Firefox Program which should be set to the full path of wherever firefox lives on your machine, and Browse Url Firefox New Window Is Tab which should be on to prevent multiple firefoxen cluttering up your windows when you try this.
Now that you have customized everything, you drop a crafted function into your .emacs and bind it to a key:
;; -- INTEGRATED HELP
(require 'url)
(defun search-site-url (site url keyword)
(concat "http://www.google.com/"
(format "search?q=%s+site:%s+inurl:%s&btnI"
(url-hexify-string keyword)
(url-hexify-string site)
(url-hexify-string url))))
(defun wxhelp ()
"Open a window showing the wxWidgets documentation for the word under the point"
(interactive)
(browse-url (search-site-url "docs.wxwidgets.org" "2\\\\.8\\\\.6"
(thing-at-point 'symbol))))
(global-set-key "\C-h\C-w" 'wxhelp)
Now, if you type Control H Control W while the cursor is over a symbol, Emacs will look it up via Google. For instance, if your cursor is over wxApp, by the magic of "I'm feeling Lucky", Google will find http://docs.wxwidgets.org/2.8.6/wx_wxapp.html which is the manual page for wxApp
Obviously the interesting function here is
site-search-urlwhich munges up an URL to feed to google to make it search a specific site for a keyword, filtering URLs that do not contain a certian string. The highly escaped \\\\ is to ensure that 2\.8\.6 appears in the final URL so that Google treats . as a literal.
The great utility of this hack is its universiality. It will work for any language or library with a sanely organised reference web site. Language specific lookup functions based on sites like cppreference.com are left as an exercise for the reader...
5 comments:
Link to cppreference should link to 'cppreference.com' not 'cppreference'.
Other than that, nice article!
Thanks for the catch, CR. Fixed.
And now there's 1 too many p's in that link :p
emacs 4 life
Very nice. I changed this to work with Python docs. Works great.
(browse-url (search-site-url "docs.python.org" "/lib/"
(thing-at-point 'symbol))))
It would be cool to look up what mode you are in and change the site/url fields based on it (so in Python mode it looks to docs.python.org and in HTML mode it looks to some HTML reference site.
John, I followed up on my previous comment and enhanced your functions to use the major-mode for configuring the search. Details here.
Post a Comment