-(ns reply.initialization)
+(ns reply.initialization
+  (:require [clojure.pprint]))
+
+(defmacro repl-defn [sym & args]
+  (let [no-meta-source (with-out-str (clojure.pprint/pprint `(defn ~sym ~@args)))
+        meta-source `(clojure.core/defn ~(with-meta sym {:source no-meta-source}) ~@args)]
+    meta-source))
+
+(defmacro sourcery [name]
+  `(if-let [s# (:source (meta (var ~name)))]
+    (do (print s#) (flush))
+    (clojure.repl/source ~name)))
 
 (defn help
   "Prints a list of helpful commands."

  [{:keys [skip-default-init
           custom-init] :as options}]
  `(do
    ~(when-not skip-default-init default-init-code)
    ~(when custom-init custom-init)
    nil))


  (println "    Docs: (doc function-name-here)")
  (println "          (find-doc \"part-of-name-here\")")
  (println "  Source: (source function-name-here)")
  (println "          (sourcery function-name-here)")
  (println " Javadoc: (javadoc java-object-or-class-here)")
  (println "Examples from clojuredocs.org:")
  (println "          (clojuredocs name-here)")
