[slime-devel] input not getting through
Helmut Eller
heller at common-lisp.net
Fri Nov 4 09:06:34 UTC 2005
* Daniel Patru [2005-11-04 03:27+0100] writes:
> Anyway to make this work? (I'm trying to do some processing in between
> user input.)
As Pascal Bourguignon said, you should flush the output buffer.
But you also need to be careful with LISTEN. Actually reading from
*standard-input* in SLIME is a bit weird. LISTEN (in SLIME) returns
true if there is any buffered input, e.g. if you call READ-CHAR the
Emacs REPL buffer switches to "read-mode" and the next time you press
return the entire line gets buffered.
Also note that the REPL buffer is usually not in "read-mode" and that
pressing return (usually) doesn't write anything to the input buffer.
Keep an eye on the modeline, there is an indicator [read] if the REPL
is in read-mode.
Some other issues are:
- buffered input is discarded before evaluation requests i.e. about
every time when SLIME prints a prompt. (This means that LISTEN
returns false most of the time.)
- if you want to send an "end-of-transmission" (like C-d in a
terminal) you have to press C-u RET.
Your example works a bit better if you write it like this:
(defun prompt ()
(do ((line nil (read)))
((eq line 'q))
(when line (print line))
(print '>)
(finish-output)
(sleep 1)))
Helmut.
More information about the slime-devel
mailing list