[plt-scheme] handling user-breaks in MrEd app...
Have you considered using DrScheme? It solves all of these problems.
Robby
At Wed, 30 Oct 2002 17:58:45 -0600, Jefferson Provost wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
>
> Hey,
>
> I'm writing a graphical MrEd app, and though most interaction will be
> through graphical objects, I want to run a repl for debugging and other
> stuff. I don't want to use MrEd's graphical repl, but when I do mred
> -z, the stdio repl never yields to give events/time to my graphical
> objects. My solution is to instantiate my graphical objects, and then
> run a stdio repl in a separate, as in the code below.
>
> The problem is that the with-handlers form seems to swallow all
> exceptions (other than exn:break) without any notification. Without the
> with-handlers, breaks (ctrl-C's) send the program into some inscrutable
> state in which there's still a repl running (the top-level repl?) but
> the program is basically unusable.
>
> I guess I don't understand how handlers work, because I assumed that
> handling one kind of exception wouldn't change how the others were
> handled, but that's not what's happening. What's going on?
>
> J.
>
> ;;;;;;;;;;;;;;;;;;;;;;;
> (define (gui-repl)
> (let ((t (thread read-eval-print-loop)))
> (let loop ()
> (yield)
> (sleep 0.01)
> (if (thread-running? t) (loop)))))
>
> ;;;;;;;;;;;;;;;;;;;;;;
> ; instantiate my window(s) here
>
> (define my-console (instantiate my-graphical-console% () )
> (send my-console show #t)
>
> ;;;;;;;;;;;;;;;;;;;;;
> ; start the repl
> (with-handlers ((exn:break? (lambda (x)
> (display (format "\nuser break!\n"))
>
> (exit))))
> (gui-repl)
> (exit))
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>
>
> The problem with this is that errors generated from my-console (or the
> windows it spawns) just vanish. If I run mred w/o "-z", and comment out
> everything below ";start the repl", then errors get printed to stdout