What are the differences between the inferior Lisp listener and the SLIME REPL one? For what kinds of tasks is each of them intended? How do I set one of them as the default listener?
Paolo
Paolo Amoroso amoroso@mclink.it writes:
What are the differences between the inferior Lisp listener and the SLIME REPL one? For what kinds of tasks is each of them intended? How do I set one of them as the default listener?
The slime-repl works with our custom streams, i.e., we bind *standard-io* and some other streams variables to our streams. These streams send/read their output/input from the slime socket. The send/read events from the streams are integrated (at least to some degree) with Slime's state machine. This gives us better control over the Lisp process, e.g., when you say y-or-n-p in the Lisp process, Emacs receives a read event and can display the slime-repl window.
The inferior-lisp Listener works with Emacs process filters (comint actually). When you say y-or-n-p in Lisp, Emacs displays the prompt, but has no reliable way to tell if the Lisp is going to read input. Inferior-lisp relies on the inferior-lisp-prompt regexp for proper operation.
Ideally there would be no need for the inferior-lisp listener. We would like to redirect all output to our streams. Unfortunately this is not always possible, e.g., when Lisp calls some C code that writes to stdout. Output to the slime-repl is also bit slower, because Emacs has to parse the events etc. I think the idea is, that you should use slime-repl for almost everything. Inferior-lisp is useful as fallback and for lowlevel things, like debugging the Slime protocol.
We also set an extra annoying hook that pops up the inferior-lisp buffer every time when some output arrives on the inferior-lisp process filter. This is intentional to encourage myself (and other people) to use the slime-repl.
Helmut.