

此軟件包使您可以在幾分鐘內將對用戶可定制的全局鍵盤快捷鍵的支持添加到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用於此軟件包。