

此软件包使您可以在几分钟内将对用户可定制的全局键盘快捷键的支持添加到MacOS应用程序中。它是完全沙箱和Mac App Store兼容的。它已由Dato,Jiffy,Plash和Lungo用于生产。
我很高兴接受更多的可配置性和功能。 PR欢迎!您在这里看到的只是我自己应用所需的。

MacOS 10.15+
在Xcode中的“ Swift Package Manager”选项卡中添加https://github.com/sindresorhus/KeyboardShortcuts 。
首先,注册键盘快捷键的名称。
Constants.swift
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " )
}然后,您可以在其他地方参考这个强烈的名称。
您将需要查看用户可以选择键盘快捷键的地方。
SettingsScreen.swift
import SwiftUI
import KeyboardShortcuts
struct SettingsScreen : View {
var body : some View {
Form {
KeyboardShortcuts . Recorder ( " Toggle Unicorn Mode: " , name : . toggleUnicornMode )
}
}
}还支持可可而不是swiftui。
KeyboardShortcuts.Recorder负责将键盘快捷键存储在UserDefaults中,并警告用户如果系统或App的主菜单已经使用了所选键盘快捷键。
为用户按下所选键盘快捷键时添加侦听器。
App.swift
import SwiftUI
import KeyboardShortcuts
@ main
struct YourApp : App {
@ State private var appState = AppState ( )
var body : some Scene {
WindowGroup {
// …
}
Settings {
SettingsScreen ( )
}
}
}
@ MainActor
@ Observable
final class AppState {
init ( ) {
KeyboardShortcuts . onKeyUp ( for : . toggleUnicornMode ) { [ self ] in
isUnicornMode . toggle ( )
}
}
}您也可以通过.onKeyDown()来收听键
就这样!
您可以在“示例”目录中找到一个完整的示例。
您还可以在我的Plash应用程序中找到一个现实世界的示例。
使用KeyboardShortcuts.RecorderCocoa代替KeyboardShortcuts.Recorder :
import AppKit
import KeyboardShortcuts
final class SettingsViewController : NSViewController {
override func loadView ( ) {
view = NSView ( )
let recorder = KeyboardShortcuts . RecorderCocoa ( for : . toggleUnicornMode )
view . addSubview ( recorder )
}
} 该软件包支持本地化。 PR欢迎更多!
.lproj后缀。更多。Localizable.strings的文件,然后复制KeyboardShortcuts/Localization/en.lproj/Localizable.strings的内容到您刚刚创建的新文件。请参阅API文档。
NSMenuItem中显示录制的键盘快捷键请参阅NSMenuItem#setShortcut 。
您的应用可能需要支持用户定义的操作的键盘快捷键。通常,您将在extension KeyboardShortcuts.Name {}中静态注册键盘快捷键。但是,这不是必需的。它只是为了方便起见,因此您可以在调用各种API时使用DOT-Syntax(例如, .onKeyDown(.unicornMode) {} )。您可以动态地创建KeyboardShortcut.Name并自己存储。您可以在示例项目中看到这一点。
如果您从另一个软件包迁移或只是为自己制作东西,则设置默认键盘快捷键将很有用。但是,请不要为公开分布式应用程序设置此功能。当随机应用程序窃取其现有键盘快捷键时,用户会感到烦人。通常最好在第一个应用程序启动中显示一个欢迎屏幕,该屏幕可以让用户设置快捷方式。
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " , default : . init ( . k , modifiers : [ . command , . option ] ) )
} 要获取所有键盘快捷键的Name ,请将KeyboardShortcuts.Name符合CaseIterable 。
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let foo = Self ( " foo " )
static let bar = Self ( " bar " )
}
extension KeyboardShortcuts . Name : CaseIterable {
public static let allCases : [ Self ] = [
. foo ,
. bar
]
}
// …
print ( KeyboardShortcuts . Name . allCases )并使用设置键盘快捷键获取所有Name :
print ( KeyboardShortcuts . Name . allCases . filter { $0 . shortcut != nil } ) MASShortcut有何不同?此软件包:
NSMenuItem 。NSMenu打开(例如菜单栏应用程序)时起作用。 MASShortcut :
HotKey有何不同? HotKey非常适合添加硬编码的键盘快捷键,但是它不能为用户选择自己的键盘快捷键提供任何UI组件。
Carbon ?这不是弃用吗?几年前,大多数碳API都是弃用的,但是苹果从未运送现代替代品。这包括注册全局键盘快捷键。但是,您不必为此担心。苹果肯定会在此处使用的碳API之前将新的API运送。
不。
那超出了此软件包的范围。您可以使用NSEvent.addLocalMonitorForEvents , NSMenuItem带有键盘快捷键(甚至可以隐藏),也可以使用SwiftUi的View#keyboardShortcut()修饰符。
不,因为它对沙盒应用程序不起作用。如果您的应用程序没有沙盒,则可以使用MediaKeyTap 。
否。但是,即使您通常使用Cocoapods或Carthage,也没有什么可以阻止您将Swift Package Manager用于此软件包。