全局 macOS 快捷键命令

Continuous Integration Release Swift Versions Docs License

安装

将以下依赖项添加到你的 Package.swift 文件中

.package(url: "https://github.com/jordanbaird/SwiftKeys", from: "0.2.0")

用法

在此处阅读完整文档

创建和观察

首先创建一个 KeyCommand 的实例。观察它,并在 keyDownkeyUpdoubleTap(_:) 上执行操作

let command = KeyCommand(name: "ToggleMainWindow")

command.observe(.keyDown) {
    myCustomKeyDownAction()
}

command.observe(.keyUp) {
    myCustomKeyUpAction()
}

command.observe(.doubleTap(0.2)) {
    myCustomDoubleTapAction()
}

doubleTap(_:) 允许你指定一个最大时间间隔,两次按键必须在此间隔内才被视为“双击”。

添加按键录制器

使用按键命令的名称来创建一个按键录制器。然后,将其添加到视图中(注意 SwiftUI 使用 KeyRecorderView,而 Cocoa 使用 KeyRecorder

SwiftUI

struct SettingsView: View {
    var body: some View {
        KeyRecorderView(name: "ToggleMainWindow")
    }
}

Cocoa

class SettingsViewController: NSViewController {
    let recorder = KeyRecorder(name: "ToggleMainWindow")

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(recorder)
    }
}

结果应该看起来像这样

浅色模式 深色模式

录制器和命令将彼此保持同步,因此当用户录制新的按键组合时,命令将更新以匹配新值。


为了提高类型安全性,你可以创建硬编码的命令名称,这些名称可以在整个应用程序中被引用。

Misc.swift

extension KeyCommand.Name {
    static let toggleMainWindow = Self("ToggleMainWindow")
}

AppDelegate.swift

let command = KeyCommand(name: .toggleMainWindow)

SettingsView.swift

let recorder = KeyRecorder(name: .toggleMainWindow)

按键命令会自动存储在 UserDefaults 系统中,并使用其名称作为键。 UserDefaults 键通常会根据其对应的应用程序或子系统进行前缀或命名空间。 为此,SwiftKeys 允许你提供可以应用于单个名称的自定义前缀。

extension KeyCommand.Name.Prefix {
    static let settings = Self("Settings")
    static let app = Self("MyGreatApp")
}

extension KeyCommand.Name {
    // "SettingsOpen" will be the full UserDefaults key.
    static let openSettings = Self("Open", prefix: .settings)
    
    // "MyGreatApp_Quit" will be the full UserDefaults key.
    static let quitApp = Self("Quit", prefix: .app, separator: "_")
}

许可证

SwiftKeys 在 MIT 许可证下可用。