Re: ANN: A pretty printer for Clojure
I just tried it, this is fantastic! We'll finally be able to debug macros while keeping our sanity. Many thanks for this and I hope it will be added directly into Clojure. On Mar 12, 3:05 am, Tom Faulhaber tomfaulha...@gmail.com wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github athttp://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar:http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format... 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
ANN: A pretty printer for Clojure
I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github at http://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar: http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format.jar 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
On Mar 12, 2009, at 3:05 AM, Tom Faulhaber wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github at http://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar: http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format.jar 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom This looks very useful Tom. Would you consider contributing it to Clojure? Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
Awesome! I expect I'll be trying it out tonight. Oh, and I hope this goes into contrib -- it'll keep my classpath shorter. On Thu, Mar 12, 2009 at 2:05 AM, Tom Faulhaber tomfaulha...@gmail.comwrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github at http://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar: http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format.jar 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
Amazing stuff. In particular this finally makes debugging macros sane. For those of you that are using swank-clojure you only need to make minor modifications to swank-clojure to pretty-print your macro expansions to the macro expansion buffer. Even better you can move the cursor to subform macros and expand those inline as well. For example here is an example from Paul Graham's continuations chapter from On Lisp that I expanded, I did not do this by hand promise ;) (do (clojure.core/defmacro dft2 [tree] (clojure.core/seq (clojure.core/concat (clojure.core/list '=dft2) (clojure.core/list '*cont*) (clojure.core/list tree (clojure.core/defn =dft2 [*cont* tree] (reset! *saved* nil) (clojure.core/let [*cont* (clojure.core/fn [node] (cond (= node 'done) (*cont* nil) :else (do (print node) (restart] (=dft-node *cont* tree For you swank-clojure users, all you need to do to get this feature right now is to include the cl-format library in basic.clj (swank-clojure/swank/commands/basic.clj) and change apply-macroexpander to look like the following: (defn- apply-macro-expander [expander string] (let [astr (with-out-str (with-pprint-dispatch *code-dispatch* (pprint (expander (read-from-string string)] (subs astr 0 (dec (count astr) Of course once cl-format makes into clojure-contrib this should just be the default behavior (or setq-able option) for swank-clojure ;) David On Thu, Mar 12, 2009 at 3:05 AM, Tom Faulhaber tomfaulha...@gmail.comwrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github at http://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar: http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format.jar 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
On Mar 12, 2009, at 8:05, Tom Faulhaber wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. From what I have seen in my first tests, this is likely to become an essential part of my Clojure environment. Thanks! Konrad. --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
Rich, I would be happy to make it a contribution (it's the least I can do!). I've had a CA sitting on my desk unread and unsigned for about 3 weeks. It is now read, signed, and in an envelope. I'll send it off this morning. Everyone, Thanks for the kind words. I'm glad you like it. David's use case in slime/swank was one of the motivators for me writing this. Thanks for showing us how to do the integration, David! I hope we see a lot of other use cases like that. Upcoming is the ability to create custom dispatch tables which will open the door to an even broader set of use cases. On Mar 12, 1:56 am, Rich Hickey richhic...@gmail.com wrote: On Mar 12, 2009, at 3:05 AM, Tom Faulhaber wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github athttp://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar:http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format... 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom This looks very useful Tom. Would you consider contributing it to Clojure? Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
Expanding on David's earlier example of pretty printing, we can set the dispatch to *code-dispatch* and bind *print-suppress-namespaces* to true and get the following (apologies for google messing up my formatting): (do (defmacro dft2 [tree] (seq (concat (list '=dft2) (list '*cont*) (list tree (defn =dft2 [*cont* tree] (reset! *saved* nil) (let [*cont* (fn [node] (cond (= node 'done) (*cont* nil) :else (do (print node) (restart] (=dft-node *cont* tree Which is not always what you want, since it loses the namespace info that backquote adds, but for me it's usually what I want because it looks like the code I would have written. A couple of notes for the detail-oriented: You can see the special code formats for defmacro, defn, binding vectors, and cond in operation here. You can also see that fn needs special treatment and doesn't have it yet. (But it will, real soon now.) On Mar 12, 9:28 am, Tom Faulhaber tomfaulha...@gmail.com wrote: Rich, I would be happy to make it a contribution (it's the least I can do!). I've had a CA sitting on my desk unread and unsigned for about 3 weeks. It is now read, signed, and in an envelope. I'll send it off this morning. Everyone, Thanks for the kind words. I'm glad you like it. David's use case in slime/swank was one of the motivators for me writing this. Thanks for showing us how to do the integration, David! I hope we see a lot of other use cases like that. Upcoming is the ability to create custom dispatch tables which will open the door to an even broader set of use cases. On Mar 12, 1:56 am, Rich Hickey richhic...@gmail.com wrote: On Mar 12, 2009, at 3:05 AM, Tom Faulhaber wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github athttp://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar:http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format... 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom This looks very useful Tom. Would you consider contributing it to Clojure? Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
Are you planning to include scripts at some point that support pretty printing a source file? For example, I'd like to do this from a terminal window: $ cljpp foo.clj foo2.clj Mark, Yeah, I've thought about that and the simple version is very straight- forward and I'm planning to do that soon (for testing as much as anything). But there are a couple of issues that make this less useful than you'd like. The reader loses at least two significant pieces of information that you really want to retain when you're reformatting code files: comments and metadata defined with #^{} on defs and the like. My thought is that the right approach to this would be a modified version of the Clojure reader that's lossless and a modified dispatch that would handle the comments correctly. But I haven't spent any time looking at the reader code to see how hard that would be. Tom --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
So that people can copy and paste the change in basic.clj (defn- apply-macro-expander [expander string] (binding [*print-suppress-namespaces* true] (let [astr (with-out-str (with-pprint-dispatch *code-dispatch* (pprint (expander (read-from-string string)] (subs astr 0 (dec (count astr)) Fantastic. On Thu, Mar 12, 2009 at 12:53 PM, Tom Faulhaber tomfaulha...@gmail.comwrote: Expanding on David's earlier example of pretty printing, we can set the dispatch to *code-dispatch* and bind *print-suppress-namespaces* to true and get the following (apologies for google messing up my formatting): (do (defmacro dft2 [tree] (seq (concat (list '=dft2) (list '*cont*) (list tree (defn =dft2 [*cont* tree] (reset! *saved* nil) (let [*cont* (fn [node] (cond (= node 'done) (*cont* nil) :else (do (print node) (restart] (=dft-node *cont* tree Which is not always what you want, since it loses the namespace info that backquote adds, but for me it's usually what I want because it looks like the code I would have written. A couple of notes for the detail-oriented: You can see the special code formats for defmacro, defn, binding vectors, and cond in operation here. You can also see that fn needs special treatment and doesn't have it yet. (But it will, real soon now.) On Mar 12, 9:28 am, Tom Faulhaber tomfaulha...@gmail.com wrote: Rich, I would be happy to make it a contribution (it's the least I can do!). I've had a CA sitting on my desk unread and unsigned for about 3 weeks. It is now read, signed, and in an envelope. I'll send it off this morning. Everyone, Thanks for the kind words. I'm glad you like it. David's use case in slime/swank was one of the motivators for me writing this. Thanks for showing us how to do the integration, David! I hope we see a lot of other use cases like that. Upcoming is the ability to create custom dispatch tables which will open the door to an even broader set of use cases. On Mar 12, 1:56 am, Rich Hickey richhic...@gmail.com wrote: On Mar 12, 2009, at 3:05 AM, Tom Faulhaber wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github athttp://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar: http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format... 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom This looks very useful Tom. Would you consider contributing it to Clojure? Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
I suppose the following is more idiomatic: (defn- apply-macro-expander [expander string] (let [astr (with-out-str (binding [*print-suppress-namespaces* true] (with-pprint-dispatch *code-dispatch* (pprint (expander (read-from-string string))] (subs astr 0 (dec (count astr) On Thu, Mar 12, 2009 at 12:53 PM, Tom Faulhaber tomfaulha...@gmail.comwrote: Expanding on David's earlier example of pretty printing, we can set the dispatch to *code-dispatch* and bind *print-suppress-namespaces* to true and get the following (apologies for google messing up my formatting): (do (defmacro dft2 [tree] (seq (concat (list '=dft2) (list '*cont*) (list tree (defn =dft2 [*cont* tree] (reset! *saved* nil) (let [*cont* (fn [node] (cond (= node 'done) (*cont* nil) :else (do (print node) (restart] (=dft-node *cont* tree Which is not always what you want, since it loses the namespace info that backquote adds, but for me it's usually what I want because it looks like the code I would have written. A couple of notes for the detail-oriented: You can see the special code formats for defmacro, defn, binding vectors, and cond in operation here. You can also see that fn needs special treatment and doesn't have it yet. (But it will, real soon now.) On Mar 12, 9:28 am, Tom Faulhaber tomfaulha...@gmail.com wrote: Rich, I would be happy to make it a contribution (it's the least I can do!). I've had a CA sitting on my desk unread and unsigned for about 3 weeks. It is now read, signed, and in an envelope. I'll send it off this morning. Everyone, Thanks for the kind words. I'm glad you like it. David's use case in slime/swank was one of the motivators for me writing this. Thanks for showing us how to do the integration, David! I hope we see a lot of other use cases like that. Upcoming is the ability to create custom dispatch tables which will open the door to an even broader set of use cases. On Mar 12, 1:56 am, Rich Hickey richhic...@gmail.com wrote: On Mar 12, 2009, at 3:05 AM, Tom Faulhaber wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github athttp://github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar: http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format... 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom This looks very useful Tom. Would you consider contributing it to Clojure? Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---
Re: ANN: A pretty printer for Clojure
Works great. On Thu, Mar 12, 2009 at 3:30 PM, Tom Faulhaber tomfaulha...@gmail.comwrote: Write can produce pretty output directly to a string and without the trailing newline, making this a little shorter: (defn- apply-macro-expander [expander string] (binding [*print-suppress-namespaces* true] (with-pprint-dispatch *code-dispatch* (write (expander (read-from-string string)) :pretty true :stream nil Completely untested! :-) Tom On Mar 12, 11:07 am, David Nolen dnolen.li...@gmail.com wrote: I suppose the following is more idiomatic: (defn- apply-macro-expander [expander string] (let [astr (with-out-str (binding [*print-suppress-namespaces* true] (with-pprint-dispatch *code-dispatch* (pprint (expander (read-from-string string))] (subs astr 0 (dec (count astr) On Thu, Mar 12, 2009 at 12:53 PM, Tom Faulhaber tomfaulha...@gmail.comwrote: Expanding on David's earlier example of pretty printing, we can set the dispatch to *code-dispatch* and bind *print-suppress-namespaces* to true and get the following (apologies for google messing up my formatting): (do (defmacro dft2 [tree] (seq (concat (list '=dft2) (list '*cont*) (list tree (defn =dft2 [*cont* tree] (reset! *saved* nil) (let [*cont* (fn [node] (cond (= node 'done) (*cont* nil) :else (do (print node) (restart] (=dft-node *cont* tree Which is not always what you want, since it loses the namespace info that backquote adds, but for me it's usually what I want because it looks like the code I would have written. A couple of notes for the detail-oriented: You can see the special code formats for defmacro, defn, binding vectors, and cond in operation here. You can also see that fn needs special treatment and doesn't have it yet. (But it will, real soon now.) On Mar 12, 9:28 am, Tom Faulhaber tomfaulha...@gmail.com wrote: Rich, I would be happy to make it a contribution (it's the least I can do!). I've had a CA sitting on my desk unread and unsigned for about 3 weeks. It is now read, signed, and in an envelope. I'll send it off this morning. Everyone, Thanks for the kind words. I'm glad you like it. David's use case in slime/swank was one of the motivators for me writing this. Thanks for showing us how to do the integration, David! I hope we see a lot of other use cases like that. Upcoming is the ability to create custom dispatch tables which will open the door to an even broader set of use cases. On Mar 12, 1:56 am, Rich Hickey richhic...@gmail.com wrote: On Mar 12, 2009, at 3:05 AM, Tom Faulhaber wrote: I have now released the first version of my pretty printer as part of my cl-format library. It is released under the EPL. The pretty printer has two functions that you probably care about: (pprint obj) will pretty print the given object, and (pp) at the REPL will pretty print the last result output, i.e. the value in *1. The pretty printer currently supports two modes: simple and code. Simple mode prints structure in a standard way that's good for data. Code mode understands lots of Clojure forms (defn, binding vectors, condp, etc.) and attempts to print them in an idiomatic way. Cl-format is on github athttp:// github.com/tomfaulhaber/cl-format. There is a Readme there with instructions, examples, limitations and futures. I won't even try to put examples here, because google groups wreaks havoc on formatting. The simplest way to get some pretty printing happiness: 1) Download the jar: http://github.com/tomfaulhaber/cl-format/raw/master/release/cl-format. .. 2) Put it in your classpath. 3) Fire up your REPL 4) (use 'com.infolace.format) 5) Use pprint and pp as described above. This is definitely a first release and there are sure to be bugs. And I know there are things missing. So let me know if you're having problems and I'll try to get things fixed up ASAP. Enjoy! Tom This looks very useful Tom. Would you consider contributing it to Clojure? Rich --~--~-~--~~~---~--~~ 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 -~--~~~~--~~--~--~---