CocoaPods trunk is moving to be read-only. Read more on the blog, there are 18 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)
}