Skip to content

Instantly share code, notes, and snippets.

@mminer
Last active October 18, 2017 04:54
Show Gist options
  • Save mminer/91dcccdfcea0661e2d7ee757c93a6316 to your computer and use it in GitHub Desktop.
Save mminer/91dcccdfcea0661e2d7ee757c93a6316 to your computer and use it in GitHub Desktop.
Wrapper around NSEvent's global event monitor.
import AppKit
class EventMonitor {
private let handler: (NSEvent) -> Void
private let mask: NSEvent.EventTypeMask
private var monitor: Any?
init(mask: NSEvent.EventTypeMask, handler: @escaping (NSEvent) -> Void) {
self.handler = handler
self.mask = mask
}
deinit {
stop()
}
func start() {
// Can change to `NSEvent.addLocalMonitorForEventsMatchingMask` to handle in-app events.
monitor = NSEvent.addGlobalMonitorForEvents(matching: mask, handler: handler)
}
func stop() {
if let monitor = monitor {
NSEvent.removeMonitor(monitor)
}
monitor = nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment