

Paket ini memungkinkan Anda menambahkan dukungan untuk pintasan keyboard global yang dapat dikustomisasi pengguna ke aplikasi macOS Anda dalam hitungan menit. Ini sepenuhnya kompatibel dengan Sandbox dan Mac App Store. Dan digunakan dalam produksi oleh Dato, Jiffy, Plash, dan Lungo.
Saya senang menerima lebih banyak konfigurasi dan fitur. PR selamat datang! Apa yang Anda lihat di sini adalah apa yang saya butuhkan untuk aplikasi saya sendiri.

MacOS 10.15+
Tambahkan https://github.com/sindresorhus/KeyboardShortcuts di tab "Swift Package Manager" di Xcode.
Pertama, daftarkan nama untuk pintasan keyboard.
Constants.swift
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " )
}Anda kemudian dapat merujuk pada nama yang sangat diketik ini di tempat lain.
Anda akan ingin membuat tampilan di mana pengguna dapat memilih pintasan keyboard.
SettingsScreen.swift
import SwiftUI
import KeyboardShortcuts
struct SettingsScreen : View {
var body : some View {
Form {
KeyboardShortcuts . Recorder ( " Toggle Unicorn Mode: " , name : . toggleUnicornMode )
}
}
}Ada juga dukungan untuk kakao, bukan SwiftUi.
KeyboardShortcuts.Recorder mengurus menyimpan pintasan keyboard di UserDefaults dan juga memperingatkan pengguna jika pintasan keyboard yang dipilih sudah digunakan oleh sistem atau menu utama aplikasi.
Tambahkan pendengar saat pengguna menekan pintasan keyboard yang dipilih.
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 ( )
}
}
} Anda juga dapat mendengarkan Key Down dengan .onKeyDown()
Itu saja!
Anda dapat menemukan contoh lengkap di direktori "contoh".
Anda juga dapat menemukan contoh dunia nyata di aplikasi Plash saya.
Menggunakan KeyboardShortcuts.RecorderCocoa alih -alih KeyboardShortcuts.Recorder :
import AppKit
import KeyboardShortcuts
final class SettingsViewController : NSViewController {
override func loadView ( ) {
view = NSView ( )
let recorder = KeyboardShortcuts . RecorderCocoa ( for : . toggleUnicornMode )
view . addSubview ( recorder )
}
} Paket ini mendukung lokalisasi. PR Selamat datang untuk lebih banyak!
.lproj . Lebih banyak di sini.Localizable.strings di bawah direktori bahasa baru dan kemudian salin konten KeyboardShortcuts/Localization/en.lproj/Localizable.strings ke file baru yang baru saja Anda buat.Lihat dokumen API.
NSMenuItem Lihat NSMenuItem#setShortcut .
Aplikasi Anda mungkin perlu mendukung pintasan keyboard untuk tindakan yang ditentukan pengguna. Biasanya, Anda secara statis akan mendaftarkan pintasan keyboard di muka di extension KeyboardShortcuts.Name {} . Namun, ini bukan persyaratan. Ini hanya untuk kenyamanan sehingga Anda dapat menggunakan dot-syntax saat memanggil berbagai API (misalnya, .onKeyDown(.unicornMode) {} ). Anda dapat membuat KeyboardShortcut.Name secara dinamis dan menyimpannya sendiri. Anda dapat melihat ini beraksi dalam proyek contoh.
Mengatur pintasan keyboard default dapat berguna jika Anda bermigrasi dari paket yang berbeda atau hanya membuat sesuatu untuk diri Anda sendiri. Namun, jangan mengatur ini untuk aplikasi yang didistribusikan secara publik. Pengguna merasa menjengkelkan ketika aplikasi acak mencuri pintasan keyboard yang ada. Umumnya lebih baik untuk menampilkan layar selamat datang pada peluncuran aplikasi pertama yang memungkinkan pengguna mengatur jalan pintas.
import KeyboardShortcuts
extension KeyboardShortcuts . Name {
static let toggleUnicornMode = Self ( " toggleUnicornMode " , default : . init ( . k , modifiers : [ . command , . option ] ) )
} Untuk mendapatkan semua Name pintasan keyboard, serahkan KeyboardShortcuts.Name to 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 ) Dan untuk mendapatkan semua Name dengan jalan pintas keyboard set:
print ( KeyboardShortcuts . Name . allCases . filter { $0 . shortcut != nil } ) MASShortcut ?Paket ini:
NSMenuItem .NSMenu terbuka (misalnya aplikasi bar menu). MASShortcut :
HotKey ? HotKey bagus untuk menambahkan pintasan keyboard berkode keras, tetapi tidak memberikan komponen UI bagi pengguna untuk memilih pintasan keyboard mereka sendiri.
Carbon ? Bukankah itu sudah usang?Sebagian besar API karbon sudah usang bertahun -tahun yang lalu, tetapi ada beberapa yang tersisa yang tidak pernah dikirim Apple untuk penggantian modern. Ini termasuk mendaftarkan pintasan keyboard global. Namun, Anda tidak perlu khawatir tentang ini. Apple pasti akan mengirimkan API baru sebelum mencela API karbon yang digunakan di sini.
TIDAK.
Itu di luar ruang lingkup paket ini. Anda dapat menggunakan NSEvent.addLocalMonitorForEvents , NSMenuItem dengan pintasan keyboard (bahkan dapat disembunyikan), atau pengubah View#keyboardShortcut() .
Tidak, karena itu tidak akan berfungsi untuk aplikasi kotak pasir. Jika aplikasi Anda tidak kotak pasir, Anda dapat menggunakan MediaKeyTap .
Tidak. Namun, tidak ada yang menghentikan Anda menggunakan Swift Package Manager hanya untuk paket ini bahkan jika Anda biasanya menggunakan cocoapods atau carthage.