2016-05-24 7 views
1

Ich verwende eine Java Bibliothek in Clojure. Es gibt viele Dinge direkt an die Konsole mit System.out.println.Ausgabe "System.out.println" in Emacs Ciders REPL (oder anderen Puffer)

Ich verwende den neuesten Cider mit Emacs. Ich beginne Cider mit cider-jack-in. Ich kann diese Ausgaben jedoch sehen. Ich dachte, sie würden in den nrepl-Server Puffer kopiert werden, aber es ist nicht.

Ich habe auch versucht, (alter-var-root #'*out* (constantly *out*)) in der REPL laufen, aber keinen Erfolg.

Was fehlt mir dabei, wie das gemacht werden sollte, wenn es überhaupt möglich ist.

+0

Werfen Sie einen Blick in den * Nachrichten * Puffer, ich denke, sie gehen dort –

+0

Der Nachrichtenpuffer protokolliert einfach die Kommunikation zwischen CIDER und dem nREPL-Server. –

+0

Die Ausgabe sollte normalerweise im REPL-Puffer angezeigt werden. Wenn nicht - ein Ticket auf GitHub einreichen und wir werden das Problem untersuchen. –

Antwort

1

Sie müssen die java.io.PrintStream zugewiesen System.out mit einer ersetzen, das alles zu clojure.core/*out* weiterleiten wird (was eine Instanz von java.io.PrintWriter ist). Dazu müssen Sie einen Adapter von PrintStream bis PrintWriter erstellen.

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

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

Von nun an, wenn Sie anrufen System.out.println überall in Ihrer JVM die Ausgabe wird: Ich habe nicht eine vorhandene in der Java-SDK-API, aber es gibt eine in Apache Commons IO (oder Sie können implementieren, es selbst) gefunden an clojure.core/*out* weitergegeben werden.

Verwandte Themen