此包可让您在几分钟内为macOS应用程序添加用户自定义的全局键盘快捷方式支持。它完全符合沙盒和Mac App Store的要求。并且它被Dato、Jiffy、Plash和Lungo在生产中使用。
我很乐意接受更多可配置性和功能。PR欢迎!这里看到的是我自己的应用程序需要的。
要求
macOS 10.11+
安装
Swift包管理器
在 “Swift包管理器”标签页中添加 https://github.com/sindresorhus/KeyboardShortcuts
。
您还需要将构建设置“其他链接器标志”设置为-weak_framework Combine
以解决此Xcode漏洞。
Carthage
github "sindresorhus/KeyboardShortcuts"
CocoaPods
pod 'KeyboardShortcuts'
使用方法
首先,为键盘快捷键注册一个名称。
Constants.swift
import KeyboardShortcuts
extension KeyboardShortcuts.Name {
static let toggleUnicornMode = Self("toggleUnicornMode")
}
然后您可以在其他地方引用这个强类型名称。
您可能需要一个视图,让用户可以选择键盘快捷键。
PreferencesView.swift
import SwiftUI
import KeyboardShortcuts
struct PreferencesView: View {
var body: some View {
HStack {
Text("Toggle Unicorn Mode:")
KeyboardShortcuts.Recorder(for: .toggleUnicornMode)
}
}
}
此外,支持 Cocoa 而不是 SwiftUI。
KeyboardShortcuts.Recorder
负责将键盘快捷键存储在UserDefaults
中,并警告用户所选的键盘快捷键是否已被系统或应用程序主菜单使用。
添加一个监听器,当用户按下所选的键盘快捷键时。
AppDelegate.swift
import Cocoa
import KeyboardShortcuts
@main
final class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishLaunching(_ notification: Notification) {
KeyboardShortcuts.onKeyUp(for: .toggleUnicornMode) { [self] in
// The user pressed the keyboard shortcut for “unicorn mode”!
isUnicornMode.toggle()
}
}
}
您也可以通过.onKeyDown()
监听按键。
这就完了!
您可以打开KeyboardShortcuts.xcodeproj
,然后运行KeyboardShortcutsExample
目标来找到完整的示例。
您还可以在我的 Plash 应用中找到实际应用示例。
Cocoa
请使用KeyboardShortcuts.RecorderCocoa
来代替KeyboardShortcuts.Recorder
。
import Cocoa
import KeyboardShortcuts
final class PreferencesViewController: NSViewController {
override func loadView() {
view = NSView()
let recorder = KeyboardShortcuts.RecorderCocoa(for: .toggleUnicornMode)
view.addSubview(recorder)
}
}
API
提示
NSMenuItem
中显示录制的键盘快捷键
在
动态键盘快捷键
您的应用可能需要支持用户定义的操作的键盘快捷键。通常,您会预先在 extension KeyboardShortcuts.Name {}
中静态注册键盘快捷键。但这是个非必需选项。这是为了方便您在使用各种API时可以使用点语法(例如,.onKeyDown(.unicornMode) {}
)。您可以动态创建 KeyboardShortcut.Name
并自行存储。您可以在示例项目中查看实现方式。
默认键盘快捷键
如果您正在从不同的包迁移或仅为个人创建应用,设置默认键盘快捷键可能会有用。然而,请不要在公开分发的应用程序中设置此选项。当随机应用窃取用户现有的键盘快捷键时,用户会感到烦恼。通常在第一次启动应用时显示欢迎界面,让用户自己设置快捷键会更好。
import KeyboardShortcuts
extension KeyboardShortcuts.Name {
static let toggleUnicornMode = Self("toggleUnicornMode", default: .init(.k, modifiers: [.command, .option]))
}
常见问题解答(FAQ)
MASShortcut
有何不同?
与 本包
- 使用 Swift 编写,拥有 swift API。
- 具有更直观的 UI 组件。
- 包含 SwiftUI 组件。
- 支持监听按键按下,而不仅仅是按键弹出。
- 支持 Swift 包管理器。
- 将快捷键连接到
NSMenuItem
。
MASShortcut
:
- 更成熟。
- 更多功能。
- 支持本地化。
HotKey
有何不同?
它与 HotKey
适合添加硬编码的键盘快捷键,但它不提供任何用户可以自己选择键盘快捷键的 UI 组件。
Carbon
?那不是已经过时了吗?
为什么这个包导入 大部分的 Carbon API 几年前就已经过时了,但还有一些 Apple 从未提供现代替代品的 API。这包括注册全局键盘快捷键。然而,你不需要担心这一点。苹果肯定在使用这里的 Carbon API 过时之前会提供新的 API。
这个包会造成任何权限对话框吗?
不会。
我如何添加一个仅在应用程序运行时才有效的特定应用程序键盘快捷键?
这超出了此包的范围。你可以使用NSEvent.addLocalMonitorForEvents
,带有键盘快捷键的 NSMenuItem
(甚至可以是隐藏的),或者 SwiftUI 的 View#keyboardShortcut()
修饰符。
相关
- Preferences - 几分钟内为您的 macOS 应用添加偏好设置窗口
- LaunchAtLogin - 将“登录时启动”功能添加到您的 macOS 应用
- Defaults - Swifty和现代化的UserDefaults
- 更多...