答案1
我不是 Mac 用户,所以我无法在这里为您提供分步说明,但我可以介绍 Fish 的各个部分,并为您提供一些可能对 macOS 方面有帮助的指示。
我将其分解为:
当主题需要改变时,通知所有打开的 Fish shell 实例。
这将由一个监视变量变化的函数来处理。它需要始终位于内存中(而不是延迟加载)。虽然您可以在 中创建它
fish.config
,但我更喜欢将其放在 中~/.config/fish/conf.d/update_theme.fish
:function update_theme --on-variable macOS_Theme if [ "$macOS_Theme" = "dark" ] set_theme_dark else if [ "$macOS_Theme" = "light" ] set_theme_light end end
然后我们可以通过以下方式在所有打开的 Fish 实例中触发主题更改:
set --universal macOS_Theme "dark"
检测 macOS 系统主题何时发生变化——此 Ask Different Stack 帖子引导我此 Swift 代码这看起来就是你所需要的。例如:
DistributedNotificationCenter.default.addObserver( forName: Notification.Name("AppleInterfaceThemeChangedNotification"), object: nil, queue: nil) { (notification) in updateFishTheme() }
需要
updateFishTheme()
能够调用 Fish 并设置全局变量。那里的示例代码提供了一个shell
函数,经过修改后可能可以实现这一点。 这个答案还提供了一些示例“shell”代码。run()
似乎也有可能使用这个答案。再说一次,这里没有 Mac,所以我无法测试这个并提供必要的实际代码。
一旦您可以从该 Swift 函数调用 shell,就可以使用它来调用:
fish -c "set --universal macOS_Theme 'dark'" # or 'light'
以及你所有的实例应该更新。