Contents

kentzo/shortcutrecorder

The best control to record shortcuts on macOS

What is inside

The framework comes with:

  • SRRecorderControl to render and capture user input
  • SRRecorderControlStyle for custom styling
  • SRShortcut that represents a shortcut model
  • SRGlobalShortcutMonitor to turn the shortcut into an action by registering a global hot key
  • SRAXGlobalShortcutMonitor to handle any kind of keyboard event via Accessibility
  • SRLocalShortcutMonitor for manual handling in the responder chain and NSEvent monitors
  • SRShortcutController for smooth Cocoa Bindings and seamless Interface Builder integration
  • SRShortcutValidator to check validity of the shortcut against Cocoa key equivalents and global hot keys
  • NSValueTransformer and NSFormatter subclasses for custom alterations

In Swift:

import ShortcutRecorder

let defaults = NSUserDefaultsController.shared
let keyPath = "values.shortcut"
let options = [NSBindingOption.valueTransformerName: .keyedUnarchiveFromDataTransformerName]

let beepAction = ShortcutAction(keyPath: keyPath, of: defaults) { _ in
    NSSound.beep()
    return true
}
GlobalShortcutMonitor.shared.addAction(beepAction, forKeyEvent: .down)

let recorder = RecorderControl()
recorder.bind(.value, to: defaults, withKeyPath: keyPath, options: options)

recorder.objectValue = Shortcut(keyEquivalent: "⇧⌘A")

In Objective-C:

#import <ShortcutRecorder/ShortcutRecorder.h>

NSUserDefaultsController *defaults = NSUserDefaultsController.sharedUserDefaultsController;
NSString *keyPath = @"values.shortcut";
NSDictionary *options = @{NSValueTransformerNameBindingOption: NSKeyedUnarchiveFromDataTransformerName};

SRShortcutAction *beepAction = [SRShortcutAction shortcutActionWithKeyPath:keyPath
                                                                  ofObject:defaults
                                                             actionHandler:^BOOL(SRShortcutAction *anAction) {
    NSBeep();
    return YES;
}];
[[SRGlobalShortcutMonitor sharedMonitor] addAction:beepAction forKeyEvent:SRKeyEventTypeDown];

SRRecorderControl *recorder = [SRRecorderControl new];
[recorder bind:NSValueBinding toObject:defaults withKeyPath:keyPath options:options];

recorder.objectValue = [SRShortcut shortcutWithKeyEquivalent:@"⇧⌘A"];

Integration

The framework supports module maps, explicit linking is not required: simply import ShortcutRecorder / #import <ShortcutRecorder/ShortcutRecorder.h>

Swift Package Manager

.package(url: "git://github.com/Kentzo/ShortcutRecorder.git", from: "3.4.0")

CocoaPods

pod 'ShortcutRecorder', '~> 3.4.0'

Carthage

github "Kentzo/ShortcutRecorder" ~> 3.4.0

Prebuilt frameworks are available via GitHub releases.

Git Submodule

git submodule add git://github.com/Kentzo/ShortcutRecorder.git

Then drag'n'drop into Xcode workspace of your project.

Next Steps

  • The Documentation playground covers all parts of the framework (see in Xcode)
  • The Inspector app is useful during development of custom styles
  • Read about Styling and special notes regarding Cocoa's Key Equivalents.

Questions

Still have questions? Create an issue.

Package Metadata

Repository: kentzo/shortcutrecorder

Default branch: master

README: README.md