Skip to content

Instantly share code, notes, and snippets.

@lildata
Forked from exupero/clipboard.clj
Created September 22, 2017 19:45
Show Gist options
  • Save lildata/7780e2c28b3bb649d0168a193f48fdcb to your computer and use it in GitHub Desktop.
Save lildata/7780e2c28b3bb649d0168a193f48fdcb to your computer and use it in GitHub Desktop.
Clojure code to interact with the system clipboard
(refer-clojure :exclude '[slurp spit])
(import '[java.awt.datatransfer DataFlavor StringSelection Transferable])
(defn clipboard []
(.getSystemClipboard (java.awt.Toolkit/getDefaultToolkit)))
(defn slurp []
(try
(.getTransferData (.getContents (clipboard) nil) (DataFlavor/stringFlavor))
(catch java.lang.NullPointerException e nil)))
(defn spit [text]
(let [selection (StringSelection. text)]
(.setContents (clipboard) selection selection)))
(def html-flavors
(into #{}
(map #(DataFlavor. %))
["text/html;class=java.lang.String"
"text/html;class=java.io.Reader"
"text/html;charset=unicode;class=java.io.InputStream"]))
(defrecord HtmlSelection [html]
Transferable
(isDataFlavorSupported [_ flavor]
(contains? html-flavors flavor))
(getTransferDataFlavors [_]
(into-array DataFlavor html-flavors))
(getTransferData [_ flavor]
(condp = (.getRepresentationClass flavor)
java.lang.String html
java.io.Reader (java.io.StringReader. html)
java.io.InputStream (java.io.StringBufferInputStream html))))
(defn spit-html [html]
(let [selection (HtmlSelection. html)]
(.setContents (clipboard) selection nil)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment