[slime-devel] Re: slime + defsystem

Artem Baguinski artm at v2.nl
Thu Apr 15 17:31:38 UTC 2004


>>>>> "Luke" == Luke Gorrie <luke at bluetail.com> writes:

    Luke> This one's from comp.lang.lisp..

    >> also, when i'm trying to do that in slime and defsystem asks if
    >> i want stuff recompiled i can't seem to be able to answer. i
    >> guess slime treats my pressing Return key specially and it
    >> never reaches the defsystem. is there a solution to this?

    Luke> This is a bit tricky.

    Luke> In general SLIME works with user input. When Lisp tries to
    Luke> read input, a message goes to Emacs saying "I want some user
    Luke> input", and while Lisp is expecting input pressing return in
    Luke> the REPL will do the right thing.

    Luke> The difficulty here is that defsystem wants to read with a
    Luke> timeout so it is actually _polling_ for input, i.e. most of
    Luke> the time it is not actually trying to read, but is waiting a
    Luke> while before checking if input is available. That means that
    Luke> most of the time Emacs thinks Lisp doesn't want input and so
    Luke> it interprets user input as a REPL expression to be
    Luke> evaluated instead (since our REPL supports issuing commands
    Luke> in parallel).

    aha, that clarifies the matters. thanks.

    Luke> One solution could be to add some flow-control to the REPL
    Luke> and disable request piplining. Then we would buffer up user
    Luke> input until Lisp tells us whether it wants user input or the
    Luke> next REPL command. Maybe there's a better way.

    Luke> The workaround for now is to hack defsystem so that it does
    Luke> a blocking read instead of polling. This loses the timeout
    Luke> feature:

    Luke>   (defun mk::read-char-wait (&optional (timeout 20)
    Luke> input-stream (eof-error-p t) eof-value) (declare (ignore
    Luke> timeout)) (read-char input-stream eof-error-p eof-value))

    i see. how could i add this so that my lisp core has virgin
    version but slime "overloads" it with this one? is there some
    ~/.slime-init.lisp sort of thing?

-- 
gr{oe|ee}t{en|ings}
artm 





More information about the slime-devel mailing list