我正在用 clojure 编写一个小工具,想知道剪贴板何时发生变化。这是正在发生的事情的简化版本。
(:import java.awt.Toolkit)
(:import (java.awt.datatransfer Clipboard
ClipboardOwner
Transferable
StringSelection
DataFlavor
FlavorListener))
(defn get-clipboard [] (. (Toolkit/getDefaultToolkit)
(getSystemClipboard)))
(defn get-content []
(.getContents (get-clipboard) nil))
(def content (agent (get-content)))
(defn watch [key f]
(add-watch content key f))
(defn -main []
(while (not= content "banana-man")
(watch :watcher
(fn [key agent old-state new-state]
(prn "-- agent Changed --")
(prn "key" key)
(prn "atom" agent)
(prn "old-state" old-state)
(prn "new-state" new-state)))))
我添加了一个 while 循环,只是为了防止 main 函数立即关闭。
这运行时不会引发任何错误,但不会报告剪贴板何时发生更改或在我将 bannan-man 复制到剪贴板时停止 while 循环。我已经为此苦苦挣扎了几个星期,我确定我错过了一些简单的东西。如果有人有一些建议,我将不胜感激!