feat: add configurable global keyboard shortcut
This commit is contained in:
parent
d6a6d24054
commit
69f2bbe52e
1 changed files with 31 additions and 0 deletions
31
MyVoxtral/MyVoxtral/Utilities/GlobalShortcut.swift
Normal file
31
MyVoxtral/MyVoxtral/Utilities/GlobalShortcut.swift
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import Cocoa
|
||||
|
||||
final class GlobalShortcut {
|
||||
private var monitor: Any?
|
||||
var onTrigger: (() -> Void)?
|
||||
|
||||
func register(keyCode: UInt16, modifiers: UInt) {
|
||||
unregister()
|
||||
guard keyCode != 0 || modifiers != 0 else { return }
|
||||
|
||||
let requiredFlags = NSEvent.ModifierFlags(rawValue: modifiers)
|
||||
|
||||
monitor = NSEvent.addGlobalMonitorForEvents(matching: .keyDown) { [weak self] event in
|
||||
let mask: NSEvent.ModifierFlags = [.command, .option, .control, .shift]
|
||||
if event.keyCode == keyCode && event.modifierFlags.intersection(mask) == requiredFlags {
|
||||
self?.onTrigger?()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func unregister() {
|
||||
if let monitor {
|
||||
NSEvent.removeMonitor(monitor)
|
||||
}
|
||||
monitor = nil
|
||||
}
|
||||
|
||||
deinit {
|
||||
unregister()
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue