Initial commit.

This commit is contained in:
2024-12-27 15:25:41 -08:00
commit d6e097506a
26 changed files with 1433 additions and 0 deletions

55
src/EventMonitor.swift Normal file
View File

@@ -0,0 +1,55 @@
import Cocoa
class EventMonitor {
fileprivate let mask: NSEvent.EventTypeMask
fileprivate var monitor: Any?
fileprivate init(mask: NSEvent.EventTypeMask) {
self.mask = mask
}
deinit {
stop()
}
func start() {
fatalError("start must be implemented by a subclass of EventMonitor")
}
func stop() {
if monitor != nil {
NSEvent.removeMonitor(monitor!)
monitor = nil
}
}
}
final class LocalEventMonitor: EventMonitor {
typealias Handler = (NSEvent) -> NSEvent?
private let handler: Handler
init(mask: NSEvent.EventTypeMask, handler: @escaping Handler) {
self.handler = handler
super.init(mask: mask)
}
override func start() {
monitor = NSEvent.addLocalMonitorForEvents(matching: mask, handler: handler)
}
}
final class GlobalEventMonitor: EventMonitor {
typealias Handler = (NSEvent) -> Void
private let handler: Handler
init(mask: NSEvent.EventTypeMask, handler: @escaping Handler) {
self.handler = handler
super.init(mask: mask)
}
override func start() {
monitor = NSEvent.addGlobalMonitorForEvents(matching: mask, handler: handler)
}
}