Itay, I took a look at Waterfront and it seems to have a lot of potential. Keep me and the group updated on your future work.
I have also been working on a GUI application in Clojure and I share your perspective on the challenges of designing a functional GUI. I am definitely intrigued by the application context pattern and I am going to take a look at it for incorporation in my design. Thanks, Kevin Albrecht On Feb 24, 6:04 am, Itay Maman <itay.ma...@gmail.com> wrote: > I've been silently following Clojure (and this group) for several > months now.Somewhere around December I started working on a Clojure > editor/REPL written in Clojure. This effort evolved into the > Waterfront project which is now available on sourceforge (http:// > sourceforge.net/project/showfiles.php?group_id=249246). > > Waterfront's Highlights: > > * CTRL+E: Eval current selection, or the whole file if the selection > is empty > * Edit -> Eval as you type: When turned on (default) periodically > evaluates your code. Boosts productivity as many errors are detected > on the spot. > * Eval-ed code can inspect/mutate Waterfront by accessing the *app* > variable. For instance, if you eval this expression, > ((*app* :change) :font-name "Arial"), you will choose "Arial" as the > UI font. > * Eval-ed code can inspect the currently edited Clojure program. For > instance, if you eval this expression, ((*app* :visit) #(when (= (str > (first %1)) "cons") (println %1))), the output window will show all > calls, made by your code, to the cons function. > * Syntax and Evaluation errors are displayed on: (1) The Problems > window; (2) The line-number panel, as red markers. > * Source -> Generate -> Proxy: Generates a proxy for the given list of > super-types, with stub implementations for all abstract methods. > * F1: Shows the doc (as per Clojure's (doc x) function) of the > identifier under the caret. > * Source -> Reflect: Shows the synopsis of a Java class when the caret > stands on a class symbol (e.g.: java.awt.Color). > * CTRL+Space: Token-based auto completion. > * Full parenthesis matching. > * An extensible plugin architecture. > * Other goodies such as undo/redo, toggle comment, recently opened > files, indent/unindent, Tab is *always* two spaces, ... > > In order to get started, you need to > (1) Download the waterfront zip file > from:http://sourceforge.net/project/showfiles.php?group_id=249246. > (2) Unpack it into a local directory. > (3) Edit wf.bat: fix the path to clojure.jar according to its > location on your machine. > > Personally, this effort was quite interesting. Writing GUI > applications in a functional language is sometimes a challenging task > (at least if you want your Clojure code not to be a transliteration of > Java code…). I used a pattern the "application context" pattern: an > immutable map describing the application's current state that is > passed around. This made it possible for most of Waterfront's code to > be purely functional. Consequently, plugins can accomplish a lot with > just a handful of lines. Many plugins span about 60 lines of code. > Vast majority of them are less than 200 LOC. The main module, ui.clj, > that implements the underlying engine is also less than 200 LOC. I > think this is a very good indication to Clojure's power. > > Hope you'll find it useful. I'd be happy if anyone would like to join > and contribute to Waterfront. Your feedback, either on-line or > offline, will be highly appreciated. > > -- > Itay Mamanhttp://javadots.blogspot.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---