parent
638ae3aaeb
commit
dc5d756394
1 changed files with 37 additions and 1 deletions
|
|
@ -34,6 +34,9 @@
|
||||||
(def print-pprint-dispatch
|
(def print-pprint-dispatch
|
||||||
(sci/new-dynamic-var '*print-pprint-dispatch* pprint/*print-pprint-dispatch* {:ns pprint-ns}))
|
(sci/new-dynamic-var '*print-pprint-dispatch* pprint/*print-pprint-dispatch* {:ns pprint-ns}))
|
||||||
|
|
||||||
|
(def print-miser-width
|
||||||
|
(sci/new-dynamic-var '*print-miser-width* pprint/*print-miser-width* {:ns pprint-ns}))
|
||||||
|
|
||||||
(def new-write
|
(def new-write
|
||||||
(fn [object & kw-args]
|
(fn [object & kw-args]
|
||||||
(let [options (merge {:stream true} (apply hash-map kw-args))]
|
(let [options (merge {:stream true} (apply hash-map kw-args))]
|
||||||
|
|
@ -90,6 +93,7 @@
|
||||||
([s writer]
|
([s writer]
|
||||||
(binding [pprint/*print-right-margin* @print-right-margin
|
(binding [pprint/*print-right-margin* @print-right-margin
|
||||||
pprint/*print-pprint-dispatch* @print-pprint-dispatch
|
pprint/*print-pprint-dispatch* @print-pprint-dispatch
|
||||||
|
pprint/*print-miser-width* @print-miser-width
|
||||||
*print-meta* @sci/print-meta
|
*print-meta* @sci/print-meta
|
||||||
*print-readably* @sci/print-readably]
|
*print-readably* @sci/print-readably]
|
||||||
(pprint/pprint s writer))))
|
(pprint/pprint s writer))))
|
||||||
|
|
@ -129,6 +133,37 @@ http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm
|
||||||
(sci/binding [sci/out *out*]
|
(sci/binding [sci/out *out*]
|
||||||
(apply #'pprint/execute-format args)))
|
(apply #'pprint/execute-format args)))
|
||||||
|
|
||||||
|
(defn get-pretty-writer
|
||||||
|
"Returns the java.io.Writer passed in wrapped in a pretty writer proxy, unless it's
|
||||||
|
already a pretty writer. Generally, it is unnecessary to call this function, since pprint,
|
||||||
|
write, and cl-format all call it if they need to. However if you want the state to be
|
||||||
|
preserved across calls, you will want to wrap them with this.
|
||||||
|
For example, when you want to generate column-aware output with multiple calls to cl-format,
|
||||||
|
do it like in this example:
|
||||||
|
(defn print-table [aseq column-width]
|
||||||
|
(binding [*out* (get-pretty-writer *out*)]
|
||||||
|
(doseq [row aseq]
|
||||||
|
(doseq [col row]
|
||||||
|
(cl-format true \"~4D~7,vT\" col column-width))
|
||||||
|
(prn))))
|
||||||
|
Now when you run:
|
||||||
|
user> (print-table (map #(vector % (* % %) (* % % %)) (range 1 11)) 8)
|
||||||
|
It prints a table of squares and cubes for the numbers from 1 to 10:
|
||||||
|
1 1 1
|
||||||
|
2 4 8
|
||||||
|
3 9 27
|
||||||
|
4 16 64
|
||||||
|
5 25 125
|
||||||
|
6 36 216
|
||||||
|
7 49 343
|
||||||
|
8 64 512
|
||||||
|
9 81 729
|
||||||
|
10 100 1000"
|
||||||
|
[writer]
|
||||||
|
(binding [pprint/*print-right-margin* @print-right-margin
|
||||||
|
pprint/*print-miser-width* @print-miser-width]
|
||||||
|
(pprint/get-pretty-writer writer)))
|
||||||
|
|
||||||
(def pprint-namespace
|
(def pprint-namespace
|
||||||
{'pp (sci/copy-var pprint/pp pprint-ns)
|
{'pp (sci/copy-var pprint/pp pprint-ns)
|
||||||
'pprint (sci/copy-var pprint pprint-ns)
|
'pprint (sci/copy-var pprint pprint-ns)
|
||||||
|
|
@ -144,6 +179,7 @@ http://www.lispworks.com/documentation/HyperSpec/Body/22_c.htm
|
||||||
'execute-format (sci/copy-var execute-format pprint-ns)
|
'execute-format (sci/copy-var execute-format pprint-ns)
|
||||||
'with-pprint-dispatch (sci/copy-var pprint/with-pprint-dispatch pprint-ns)
|
'with-pprint-dispatch (sci/copy-var pprint/with-pprint-dispatch pprint-ns)
|
||||||
'*print-pprint-dispatch* print-pprint-dispatch
|
'*print-pprint-dispatch* print-pprint-dispatch
|
||||||
})
|
'*print-miser-width* print-miser-width
|
||||||
|
'get-pretty-writer (sci/copy-var get-pretty-writer pprint-ns)})
|
||||||
|
|
||||||
(vreset! patched? true)
|
(vreset! patched? true)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue