将 leiningen repl 的结果复制到剪贴板
copy result from leiningen repl into clipboard
偶尔想在其他软件的repl里戳个结果。有没有一种方便的方法可以将 repl 中函数 运行 的结果复制到系统剪贴板?我知道我可以 spit
将结果输出到文件中。我正在使用 mac os x.
您可以随时重新绑定 *out*
特殊变量,以指向新位置。例如,您可以将所有输出收集到字符串:
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
块之外是完整的:
user> (println :aaa)
:aaa
nil
您也可以使用 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.
上正常工作
然后你可以用 macro 概括它:
(defmacro with-clipboard [& body]
`(binding [*out* (java.io.StringWriter.)]
(let [result# (do ~@body)]
(.. Toolkit
(getDefaultToolkit)
(getSystemClipboard)
(setContents (StringSelection. (str *out*)) nil))
result#)))
并像这样使用它:
user> (with-clipboard
(println :hello)
(println :clipboard)
(+ 10 20))
;; => 30
剪贴板将包含:
:hello
:clipboard
偶尔想在其他软件的repl里戳个结果。有没有一种方便的方法可以将 repl 中函数 运行 的结果复制到系统剪贴板?我知道我可以 spit
将结果输出到文件中。我正在使用 mac os x.
您可以随时重新绑定 *out*
特殊变量,以指向新位置。例如,您可以将所有输出收集到字符串:
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
块之外是完整的:
user> (println :aaa)
:aaa
nil
您也可以使用 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.
上正常工作然后你可以用 macro 概括它:
(defmacro with-clipboard [& body]
`(binding [*out* (java.io.StringWriter.)]
(let [result# (do ~@body)]
(.. Toolkit
(getDefaultToolkit)
(getSystemClipboard)
(setContents (StringSelection. (str *out*)) nil))
result#)))
并像这样使用它:
user> (with-clipboard
(println :hello)
(println :clipboard)
(+ 10 20))
;; => 30
剪贴板将包含:
:hello
:clipboard