Skip to content

Instantly share code, notes, and snippets.

@kurogelee
Created April 11, 2015 00:00
Show Gist options
  • Save kurogelee/561a6df9c9b723f0dcdf to your computer and use it in GitHub Desktop.
Save kurogelee/561a6df9c9b723f0dcdf to your computer and use it in GitHub Desktop.
Clojure/Javaでショートカットキー(Global Hotkey)を作る ref: http://qiita.com/kurogelee/items/70bfe97d8141e07905d9
(ns hotkey.sample
(:import [com.tulskiy.keymaster.common Provider HotKeyListener]
[javax.swing KeyStroke]))
(def provider (atom nil))
(defn- get-arity [f]
(let [^java.lang.reflect.Method m (-> f class .getDeclaredMethods first)]
(count (.getParameterTypes m))))
(defn- ^HotKeyListener make-listener [f]
(reify HotKeyListener
(onHotKey [this hotKey] (apply f (take (get-arity f) [hotKey])))))
(defn register [^String key-code f]
(when (nil? @provider)
(reset! provider (Provider/getCurrentProvider true)))
(let [^Provider p @provider]
(.register p (KeyStroke/getKeyStroke key-code) (make-listener f))))
(defn reset []
(when-let [^Provider p @provider]
(.reset p)
(.stop p)
(reset! provider nil)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment