0
他のソフトウェアのreplで結果を突き出したいことがあります。システムクリップボードへのreplで実行される関数の結果をコピーする便利な方法はありますか?私はspit
の結果をファイルに出力することができます。私はMac OS Xを使用しています。leiningenのコピー結果をクリップボードにコピー
他のソフトウェアのreplで結果を突き出したいことがあります。システムクリップボードへのreplで実行される関数の結果をコピーする便利な方法はありますか?私はspit
の結果をファイルに出力することができます。私はMac OS Xを使用しています。leiningenのコピー結果をクリップボードにコピー
*out*
特別な変数を常に新しい場所を指すように再バインドすることができます。たとえば、あなたは、文字列にすべての出力を収集することができます:
user> (println :aaa)
:aaa
nil
はまた、あなたが上にをリセットできます。
user> (def result (java.io.StringWriter.))
#'user/result
user> (binding [*out* result]
(println :aaa)
(println :bbb))
nil
user> (str result)
":aaa\n:bbb\n"
これは*out*
がbinding
ブロック外無傷であろうとbeaning、一時的な結合でありますスレッドレベルset!
を使用して:
user> (def result (java.io.StringWriter.))
#'user/result
user> (set! *out* result)
#object[java.io.StringWriter 0x66c129d9 ""]
user> (println :aaa)
nil
user> (println :bbb)
nil
user> (str result)
":aaa\n:bbb\n"
そして、あなたが持つjava.awtのクラスを使用してクリップボードにこの文字列を置くことができます:
それだuser> (import 'java.awt.Toolkit)
java.awt.Toolkit
user> (import 'java.awt.datatransfer.StringSelection)
java.awt.datatransfer.StringSelection
user> (.. Toolkit
(getDefaultToolkit)
(getSystemClipboard)
(setContents (StringSelection. (str result)) nil))
nil
。今すぐ貼り付けてください。 Macで正しく動作するはずです。
user> (with-clipboard
(println :hello)
(println :clipboard)
(+ 10 20))
;; => 30
とクリップボードが含まれています:
(defmacro with-clipboard [& body]
`(binding [*out* (java.io.StringWriter.)]
(let [result# (do [email protected])]
(.. Toolkit
(getDefaultToolkit)
(getSystemClipboard)
(setContents (StringSelection. (str *out*)) nil))
result#)))
をし、このようにそれを使用します。
次に、あなただけのマクロでそれを一般化することができます
:hello
:clipboard