

แพ็คเกจนี้ช่วยให้คุณเพิ่มการสนับสนุนสำหรับคีย์บอร์ด Global Keyboard ที่ผู้ใช้กำหนดเองลงในแอพ MacOS ของคุณในไม่กี่นาที เข้ากันได้กับ Sandbox และ Mac App Store อย่างสมบูรณ์ และใช้ในการผลิตโดย Dato, Jiffy, Plash และ Lungo
ฉันยินดีที่จะยอมรับการกำหนดค่าและคุณสมบัติมากขึ้น ยินดีต้อนรับ PR! สิ่งที่คุณเห็นนี่คือสิ่งที่ฉันต้องการสำหรับแอพของฉันเอง

MacOS 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 ( )
}
}
} นอกจากนี้คุณยังสามารถฟังคีย์ลงด้วย .onKeyDown()
นั่นคือทั้งหมด!
คุณสามารถค้นหาตัวอย่างที่สมบูรณ์ในไดเรกทอรี“ ตัวอย่าง”
นอกจากนี้คุณยังสามารถค้นหาตัวอย่างโลกแห่งความจริงได้ในแอพพลิเคชั่นของฉัน
การใช้ 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 {} อย่างไรก็ตามนี่ไม่ใช่ข้อกำหนด เป็นเพียงเพื่อความสะดวกเพื่อให้คุณสามารถใช้ dot-syntax เมื่อเรียก API ต่างๆ (ตัวอย่างเช่น . .onKeyDown(.unicornMode) {} ) คุณสามารถสร้าง KeyboardShortcut.Name ของ 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 อย่างไร?แพ็คเกจนี้:
NSMenuItemNSMenu เปิดอยู่ (เช่นแอพแถบเมนู) MASShortcut :
HotKey อย่างไร? HotKey นั้นดีสำหรับการเพิ่มคีย์บอร์ดแป้นพิมพ์ที่มีรหัสยาก แต่มันไม่ได้ให้ส่วนประกอบ UI ใด ๆ สำหรับผู้ใช้ในการเลือกแป้นพิมพ์ลัดของตัวเอง
Carbon ? นั่นไม่เลิก?คาร์บอน APIs ส่วนใหญ่เลิกใช้งานเมื่อหลายปีก่อน แต่มีบางอย่างที่แอปเปิ้ลไม่เคยจัดส่งทดแทนที่ทันสมัย ซึ่งรวมถึงการลงทะเบียนคีย์บอร์ดลัดทั่วโลก อย่างไรก็ตามคุณไม่ควรกังวลเกี่ยวกับเรื่องนี้ แอปเปิ้ลจะจัดส่ง API ใหม่ให้แน่ใจว่ามีการลดราคา API ของคาร์บอนที่ใช้ที่นี่
เลขที่
นั่นคือนอกขอบเขตของแพ็คเกจนี้ คุณสามารถใช้ NSEvent.addLocalMonitorForEvents , NSMenuItem พร้อมแป้นพิมพ์ลัด (มันสามารถซ่อนได้) หรือตัวดัดแปลง View#keyboardShortcut()
ไม่เพราะมันจะไม่ทำงานสำหรับแอพ Sandboxed หากแอปของคุณไม่ได้เป็น Sandbox คุณสามารถใช้ MediaKeyTap
ไม่อย่างไรก็ตามไม่มีอะไรหยุดคุณจากการใช้ Swift Package Manager สำหรับแพ็คเกจนี้แม้ว่าโดยปกติคุณจะใช้ cocoapods หรือ Carthage