私は 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 ループを追加しました。
これはエラーをスローせずに実行されますが、クリップボードに変更が加えられたときに報告したり、bannan-man をクリップボードにコピーしたときに while ループを停止したりしません。私はこれに数週間苦労してきましたが、単純なものが欠けていると確信しています。誰かアドバイスがあれば、本当に感謝します!