I believe if you update to the newest versions of SLIME, swank-
clojure, clojure, and clojure-contrib, ctrl-c ctrl-c should just work
out of the box in SLIME without any modifications to your user code.
I haven't used clojure-box though.

-Jason

On May 12, 11:11 pm, Mark Engelberg <mark.engelb...@gmail.com> wrote:
> I often write code that I just want to run in an infinite loop.  The
> code generates lots of random things, and logs the interesting ones to
> a file.
>
> In Python, I'd write such code inside a try block that catches the
> Ctrl-C exception.  So, when I want to use my computer for something
> else, I just hit ctrl-C, and the finalizing code is executed and then
> it exits.
>
> There was a thread here a while back, suggesting a solution involving
> a break-thread utility in clojure.contrib.repl-utils.  I've tried
> this, but it didn't work well in my Clojure Box / Slime environment.
> So I was looking for another way, and came up with this:
>
> (def *halt* (ref false))
>
> (defn infinite-loop []
>   (loop []
>       (when (not @*halt*)
>           (do (blah) (recur)))))
>
> (defn on-thread [f]
>   (.start (Thread. f)))
> (defn launch [] (dosync (ref-set *halt* false)) (infinite-loop))
> (defn halt []
>   (dosync (ref-set *halt* true)))
>
> This way, I type (launch) from the REPL, and (halt) from the REPL to stop.
>
> It works, but....
>
> If I'm editing my code while it's running, and recompile the file, now
> *halt* is bound to a new ref, and the new halt function sets this new
> ref, not the old one that the running threads are checking.  I don't
> honestly need to hot-compile, but the fact that hot compilation breaks
> this approach suggests to me that it's not the right way to do things.
>
> One possibility is (I think?) to change the def of *halt* to
> (declare *halt*)
> (when (not *halt*)
>    (def *halt* (ref false)))
>
> but that also strikes me as a bit ugly.
>
> Is there a cleaner way?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to 
clojure+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to