有没有办法在系统设置中按键时以编程方式更改表情符号面板?

Is there a way to programmatically change the Emoji Panel on key press in System Settings?

提问人:bibble triple 提问时间:9/26/2023 最后编辑:Alexanderbibble triple 更新时间:9/27/2023 访问量:64

问:

我一直在尝试通过访问 plist 文件来更改它,但我找不到有关如何访问它的文档。我不确定这是否可能。

enter image description here

Swift macOS

评论

1赞 jnpdx 9/26/2023
目前尚不清楚您想做什么。目前还不清楚为什么你的代码是相同的 4 次,以及它与您的问题有什么关系。
0赞 bibble triple 9/26/2023
我试图使用 Swift 将 show emoji & symbols 更改为“什么都不做”

答:

2赞 Alexander 9/27/2023 #1

我过去常常检测文件夹中哪些文件发生了变化,而我来回更改了设置。果不其然,(“人机界面工具箱”)出现了。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 程序运行,但这很笨拙,需要关闭 App 沙盒。理想情况下,我们只调用 API,但这不允许我们更改域中的值(它只允许你更改自己应用的域或全局域的值)。defaultsUserDefaultscom.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
)

评论

0赞 bibble triple 9/27/2023
在解决这个问题方面做得很好,谢谢你的帮助
0赞 Alexander 9/27/2023
很高兴听到!如果此答案解决了您的问题,则应单击右侧的复选标记将其标记为已接受。
0赞 bibble triple 9/27/2023
我遇到的问题是,即使它改变了它,它也不会反映在系统中,例如,如果我把它放在表情符号上,我让它切换到什么都不做,它会说什么也不做,但当我按下表情符号(地球)键时,它仍然会在表情符号上
0赞 Alexander 9/27/2023
“系统偏好设置”不会侦听对底层 UserDefaults 的更改,因此其 UI 可能会像这样过时。我不认为他们希望其他事情能改变他们,或者如果他们这样做了,他们可能会认为这是一个足够小众的用例,不值得担心。如果这对您来说确实是个问题,那么您可以通过编写系统偏好设置 UI 脚本来更改设置,尽管这显然要笨拙得多。
0赞 bibble triple 9/27/2023
这是有道理的,谢谢那个新南威尔士州