Created
April 11, 2015 00:00
-
-
Save kurogelee/561a6df9c9b723f0dcdf to your computer and use it in GitHub Desktop.
Clojure/Javaでショートカットキー(Global Hotkey)を作る ref: http://qiita.com/kurogelee/items/70bfe97d8141e07905d9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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