【问题标题】:copy result from leiningen repl into clipboard将 leiningen repl 的结果复制到剪贴板
【发布时间】:2016-11-23 23:39:40
【问题描述】:

偶尔我想在其他软件的repl中戳一个结果。有没有一种方便的方法可以将 repl 中运行的函数的结果复制到系统剪贴板?我知道我可以spit 将结果输出到文件中。我正在使用 mac os x。

【问题讨论】:

    标签: macos clojure leiningen nrepl


    【解决方案1】:

    您可以随时重新绑定*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 上正常工作。

    然后你可以用一个宏来概括它:

    (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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 2020-02-06
      相关资源
      最近更新 更多