CocoaPods trunk is moving to be read-only. Read more on the blog, there are 9 months to go.

SpiceKey 3.5

SpiceKey 3.5

Maintained by Takuto Nakamura.



SpiceKey

Global Shortcuts for macOS written in Swift.

Installation

CocoaPods

pod 'SpiceKey'

Carthage

github "Kyome22/SpiceKey"

Demo

Demo App is in this Project.

image

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)
}