[racket] getting symbol documentation URL quickly within Emacs

From: Neil Van Dyke (neil at neilvandyke.org)
Date: Sat Jun 25 04:13:32 EDT 2011

If I'm in Emacs, and I have a symbol for some Racket standard library 
procedure or syntax, and I want to get the URL (or open the URL in 
browser) for the documentation for that symbol... what is a good and 
fast way to do that?

Ideas I've considered so far:

1. Use "racket/help".  I don't want to do this, since I'd really prefer 
not to keep a "racket" process open for this purpose, and invoking 
"racket" each time is uncomfortably slow.  (As the below timings show, 
the "help" macro is not very fast: on my 2GHz dual-core (with no swap), 
when the pertinent files *are* cached by Linux, getting the URL takes 
about 2.6 seconds.  When caches are empty except for what is needed to 
start the "racket" process, getting the URL takes about 15.6 seconds.  
Looking up *subsequent* symbols in the same "racket" process takes only 
around 0.2 seconds, however.)

2. Keep a "racket" process open and use some lookup of my own design.  
I'm guessing this is the same as "racket/help", and so I have the same 
objections.

3. Have Emacs find the appropriate "index.html" on the filesystem or on 
"racket-lang.org", and then send a URL to that with the "q" query 
parameter for my symbol, letting the JS look up the documentation, and 
waiting for the JS the first time.  This will at least get me a list of 
search hits, but won't jump to the documentation for the exact symbol.

4. Have Emacs load the documentation indexes (perhaps in the background 
when idle, at startup, and when we notice they change) and do the lookup 
in Emacs.  This is what Quack did for older PLT documentation, and it 
stopped working when the documentation format changed and I didn't have 
time to rewrite.  I could also be sensitive about things like which 
"#lang" we were in (like I could with an external process, if I passed 
it the  "#lang" information).

Any more ideas/thoughts?  (Other than pressing me on why I'd rather not 
keep a "racket" process open for this purpose.  Eventually the new Emacs 
mode, Meow, will probably do that for things like Check Syntax, but I 
don't want to go there yet if I don't have to.)

Note that all these require some notion of *from which Racket install 
tree or which Racket version on the Web do you want this documentation*, 
and that's some HCI and coding work that has to be done in any case.

---- BEGIN ----
 ~  echo 3 | sudo tee /proc/sys/vm/drop_caches
3
 ~  echo '(display "hello, world!\n")' | racket
Welcome to Racket v5.1.1.
 > hello, world!
 >
 ~  time echo "(help begin)" | racket
Welcome to Racket v5.1.1.
 > Loading help index...
Sending to web browser...
  file: /usr/local/racket-5.1.1/share/racket/doc/reference/begin.html
  anchor: (form._((quote._~23~25kernel)._begin))
Starting Firefox...
 >

real    0m15.584s
user    0m2.472s
sys    0m0.180s
 ~  time echo "(help begin)" | racket
Welcome to Racket v5.1.1.
 > Loading help index...
Sending to web browser...
  file: /usr/local/racket-5.1.1/share/racket/doc/reference/begin.html
  anchor: (form._((quote._~23~25kernel)._begin))
Starting Firefox...
 >

real    0m2.622s
user    0m2.240s
sys    0m0.124s
 ~ time echo "(begin (help and) (help or))" | racket
Welcome to Racket v5.1.1.
 > Loading help index...
Sending to web browser...
  file: /usr/local/racket-5.1.1/share/racket/doc/reference/if.html
  anchor: (form._((lib._racket/private/letstx-scheme..rkt)._and))
Starting Firefox...
Sending to web browser...
  file: /usr/local/racket-5.1.1/share/racket/doc/reference/if.html
  anchor: (form._((lib._racket/private/letstx-scheme..rkt)._or))
Starting Firefox...
 >

real    0m2.858s
user    0m2.216s
sys    0m0.116s
 ~ 
---- END ----

-- 
http://www.neilvandyke.org/


Posted on the users mailing list.