

تتيح لك هذه الحزمة إضافة دعم لاختصارات لوحة المفاتيح العالمية القابلة للتكامل إلى تطبيق MacOS الخاص بك في دقائق. إنه متوافق مع صندوق الرمل ومتجر تطبيق MAC بالكامل. ويستخدم في الإنتاج بواسطة Dato و Jiffy و Plash و Lungo.
يسعدني قبول المزيد من التكوين والميزات. ترحيب العلاقات العامة! ما تراه هنا هو ما أحتاجه لتطبيقاتي الخاصة.

ماكوس 10.15+
أضف https://github.com/sindresorhus/KeyboardShortcuts في علامة التبويب "Swift Package Manager" في XCode.
أولاً ، سجل اسمًا لاختصار لوحة المفاتيح.
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.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 ( )
}
}
} يمكنك أيضًا الاستماع إلى Key Down مع .onKeyDown()
هذا كل شيء!
يمكنك العثور على مثال كامل في دليل "مثال".
يمكنك أيضًا العثور على مثال حقيقي في تطبيق Plash الخاص بي.
استخدام KeyboardShortcuts.RecorderCocoa بدلاً من KeyboardShortcuts.Recorder Recorder:
import AppKit
import KeyboardShortcuts
final class SettingsViewController : NSViewController {
override func loadView ( ) {
view = NSView ( )
let recorder = KeyboardShortcuts . RecorderCocoa ( for : . toggleUnicornMode )
view . addSubview ( recorder )
}
} هذه الحزمة تدعم التوترات. نرحب بالمزيد!
.lproj . المزيد هنا.Localizable.strings ضمن دليل اللغة الجديد ، ثم نسخ محتويات KeyboardShortcuts/Localization/en.lproj/Localizable.strings إلى الملف الجديد الذي أنشأته للتو.انظر مستندات API.
NSMenuItem انظر NSMenuItem#setShortcut .
قد يحتاج تطبيقك إلى دعم اختصارات لوحة المفاتيح للإجراءات المعرفة من قبل المستخدم. عادةً ، يمكنك تسجيل اختصارات لوحة المفاتيح بشكل ثابت في extension KeyboardShortcuts.Name {} . ومع ذلك ، هذا ليس شرطا. إنه للراحة فقط حتى تتمكن من استخدام 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 مفيدًا لإضافة اختصارات لوحة المفاتيح المرمزة ، ولكنه لا يوفر أي مكون واجهة المستخدم للمستخدم لاختصارات لوحة المفاتيح الخاصة بهم.
Carbon ؟ أليست هذا تم إهماله؟تم إهمال معظم واجهات برمجة تطبيقات الكربون منذ سنوات ، ولكن هناك بعض اليسار من أن Apple لم يتم شحن بدائل حديثة. وهذا يشمل تسجيل اختصارات لوحة المفاتيح العالمية. ومع ذلك ، لا داعي للقلق بشأن هذا. ستقوم Apple بالتأكيد بشحن واجهات برمجة التطبيقات الجديدة قبل إهمال واجهات برمجة تطبيقات الكربون المستخدمة هنا.
لا.
هذا خارج نطاق هذه الحزمة. يمكنك إما استخدام NSEvent.addLocalMonitorForEvents ، NSMenuItem مع اختصار لوحة المفاتيح (يمكن أن يكون مخفيًا) ، أو معدل View#keyboardShortcut() .
لا ، لأنه لن يعمل مع تطبيقات Sandboxed. إذا لم يكن تطبيقك Sandboxed ، فيمكنك استخدام MediaKeyTap .
لا. ومع ذلك ، لا يوجد شيء يمنعك من استخدام Swift Package Manager لهذه الحزمة فقط حتى لو كنت تستخدم عادةً Cocoapods أو Carthage.