rlm@0: (ns rlm.ns-rlm rlm@1: "A few convienence functions for namespaces.") rlm@0: rlm@0: (defn ns-clear rlm@0: "completely removes all aliases, interns, and references from the namespace rlm@0: works on *ns* if called with no arguments" rlm@0: ([ns] rlm@0: (let [ns (the-ns ns)] rlm@0: (doall (map (partial ns-unmap ns) (keys (ns-map ns)))) rlm@0: (doall (map (partial ns-unalias ns) (keys (ns-aliases ns)))) nil)) rlm@0: ([] (ns-clear *ns*))) rlm@0: rlm@0: (defn ns-clone-fn rlm@1: "the calling namespace (*ns*) gets all the referenced vars as the rlm@1: target namespace anything that the target namespace doesn't have, rlm@1: ns won't have. Anything it does have, *ns* will have." rlm@0: [target-ns] rlm@0: (ns-clear *ns*) rlm@1: (doall (map (fn [[ns-alias ns]] rlm@1: (alias ns-alias (.name ns))) (ns-aliases target-ns))) rlm@0: (doall (map (fn [[sym var]] rlm@0: (cond (var? var) rlm@0: (. *ns* (refer sym var)) rlm@0: (class? var) rlm@0: (. *ns* (importClass var)))) rlm@0: ;;(eval `(clojure.core/import* ~(.getName var))))) rlm@0: (ns-map target-ns))) nil) rlm@0: rlm@1: ;; (defmacro ns-clone rlm@1: ;; ([target-ns-name] rlm@1: ;; `(do rlm@1: ;; (require '~target-ns-name) rlm@1: ;; (ns-clone-fn (get-ns '~target-ns-name))))) rlm@0: rlm@0: (defn ls rlm@0: "lists all the vars defined in the namespace" rlm@1: ([ns] (doall (map println (keys (ns-interns ns)))) nil) rlm@0: ([] (ls *ns*))) rlm@0: rlm@0: