2016-05-24 10 views
1

ClojureJavaライブラリを使用しています。 System.out.printlnを使用して多くのものを直接コンソールに出力します。Emacs CiderのREPL(またはその他のバッファ)に "System.out.println"を出力

Emacsで最新のCiderを使用しています。私はcider-jack-inでサイダーを始める。しかし、私はこれらの出力を見ることができます。私は彼らがnrepl-serverバッファにコピーされると考えましたが、そうではありません。

また、REPLでは(alter-var-root #'*out* (constantly *out*))を実行しようとしましたが、成功しませんでした。

これをやりなおしたらどうすればいいですか?

+0

* messages *バッファーを見てください。彼らがそこに行くと思います。 –

+0

メッセージバッファーは、単にCIDERとnREPLサーバーとの間の通信を記録します。 –

+0

出力はREPLバッファに正常に表示されます。そうでない場合 - githubでチケットを発行し、問題を調査します。 –

答えて

1

System.outに割り当てられたjava.io.PrintStreamを、clojure.core/*out*(これは、java.io.PrintWriterのインスタンス)に転送するもので置き換える必要があります。これを行うには、PrintStreamからPrintWriterまでアダプタを作成する必要があります。私は、Java SDKのAPIで既存のものを発見していないが、Apache Commons IOにおけるものがある(またはあなたが自分でそれを実装することができます):

(import (java.io PrintStream) 
     (org.apache.commons.io.output WriterOutputStream)) 

(-> *out* 
    (WriterOutputStream.) 
    (PrintStream.) 
    (System/setOut)) 

今からあなたの出力は以下となりどこでもあなたのJVMでSystem.out.printlnを呼び出すときにclojure.core/*out*に渡す必要があります。

関連する問題