SpiceKey
Global Shortcuts for macOS written in Swift.
Installation
CocoaPods
pod 'SpiceKey'
Carthage
github "Kyome22/SpiceKey"
Demo
Demo App is in this Project.
Usage
- Register a shortcut
Set ⌘ + A
shortcut.
let key = Key.a
let modifierFlags = ModifierFlags.cmd
let keyCombo = KeyCombination(key, modifierFlags)
let spiceKey = SpiceKey(keyCombo, keyDownHandler: {
// process (key down)
}) {
// process (key up)
}
spiceKey.register()
Set long press ⌘
shortcut.
// run after 1 sec
let longPressSpiceKey = SpiceKey(ModifierFlags.cmd, 1.0, modifierKeysLongPressHandler: {
// process
})
longPressSpiceKey?.register()
Set press both side of ⌘
shortcut.
let bothSideSpiceKey = SpiceKey(ModifierFlag.command, bothModifierKeysPressHandler: {
// process
})
bothSideSpiceKey?.register()
- Create a Key and a ModifierFlags from NSEvent.
func example(event: NSEvent) {
let key = Key(keyCode: event.keyCode)
let flags = event.modifierFlags.intersection(.deviceIndependentFlagsMask)
let modifierFlags = ModifierFlags(flags: flags)
}
- Get a description of the shortcut
let description = modifierFlags.string + key.string
// or
let description = keyCombination.string
- Unregister a shortcut
spiceKey.unregister()
- Save shortcut
let spiceKeyData = SpiceKeyData(_ primaryKey: String,
_ keyCode: CGKeyCode, // Key.keyCode
_ control: Bool, // ModifierFlags.containsControl
_ option: Bool, // ModifierFlags.containsOption
_ shift: Bool, // ModifierFlags.containsShift
_ command: Bool, // ModifierFlags.containsCommand
_ spiceKey: SpiceKey)
// OR
// ler spiceKeyData = SpiceKeyData(_ primaryKey: String,
// _ keyCode: CGKeyCode,
// _ modifierFlags: ModifierFlags,
// _ spiceKey: SpiceKey)
do {
let data = try NSKeyedArchiver.archivedData(withRootObject: spiceKeyData,
requiringSecureCoding: false)
UserDefaults.standard.set(data, forKey: "spiceKeyData")
} catch {
Swift.print(error)
}
- Load shortcut
guard let data = userDefaults.data(forKey: "spiceKeyData") else {
return
}
do {
let spiceKeyData = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! SpiceKeyData
} catch {
Swift.print(error)
}