我使用
fswatch
检测我的 ~/Library/Preferences
文件夹中的哪些文件已更改,同时我来回更改设置。果然,结果出现了
~/Library/Preferences/com.apple.HIToolbox.plist
(“人机界面工具箱”)。
接下来,我查看了它的结构并看到了
AppleFnUsageType
键,这看起来很有希望。我再次在系统偏好设置中来回更改设置,同时使用以下方法监视该键的特定更改:
watch -n 1 -d defaults read com.apple.HIToolbox AppleFnUsageType
我看到了以下结果:
0
映射到“不执行任何操作”1
映射到“更改输入源”2
映射到“显示表情符号和符号”3
映射到“开始听写(按 🌐︎ 两次)”因此您可以通过终端设置此设置:
defaults write com.apple.HIToolbox AppleFnUsageType -int 0
您可以生成一个进程来从您的Swift程序运行
defaults
,但这很笨重,并且需要关闭应用程序沙箱。理想情况下,我们只调用 UserDefaults
API,但这不会让我们更改 com.apple.HIToolbox
域中的值(它只允许您更改自己的应用程序域或全局域的值)。
我们可以降低到较低的级别并使用 CoreFoundation 中的
CFPreferencesSetValue
,它可以让你做到这一点。它仍然相当简单:
import Foundation
enum FnKeyUsageType: Int {
case doNothing = 0
case changeInputSource = 1
case showEmojiAndSymbols = 2
case startDictation = 3
}
CFPreferencesSetValue(
"AppleFnUsageType" as CFString,
FnKeyUsageType.doNothing.rawValue as CFNumber,
"com.apple.HIToolbox" as CFString,
kCFPreferencesCurrentUser,
kCFPreferencesAnyHost
)