是否可以为浅色和深色系统主题设置单独的鱼的颜色配置?

是否可以为浅色和深色系统主题设置单独的鱼的颜色配置?

我使用了一个终端(Iterm2 Beta),它允许您为浅色和深色模式设置单独的主题。这对于更改终端的背景颜色以及各种预设颜色的对比度很有用。

我想知道是否可以为浅色和深色模式设置单独的鱼壳颜色配置。例如,在浅色模式下,我希望鱼的颜色显示黑色作为默认命令颜色,而在深色模式下,我希望它们显示为白色。

我一直在用受此启发的脚本以编程方式设置颜色reddit 主题但我找不到通过 macOS 系统主题更改这些颜色的简单方法。这是我将主题更改为的 fish 函数黑暗的或者

答案1

我不是 Mac 用户,所以我无法在这里为您提供分步说明,但我可以介绍 Fish 的各个部分,并为您提供一些可能对 macOS 方面有帮助的指示。

我将其分解为:

  1. 当主题需要改变时,通知所有打开的 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
    
  2. 然后我们可以通过以下方式在所有打开的 Fish 实例中触发主题更改:

    set --universal macOS_Theme "dark"
    
  3. 检测 macOS 系统主题何时发生变化——此 Ask Different Stack 帖子引导我此 Swift 代码这看起来就是你所需要的。例如:

    DistributedNotificationCenter.default.addObserver(
        forName: Notification.Name("AppleInterfaceThemeChangedNotification"),
        object: nil,
        queue: nil) { (notification) in
            updateFishTheme()
    }
    
  4. 需要updateFishTheme()能够调用 Fish 并设置全局变量。那里的示例代码提供了一个shell函数,经过修改后可能可以实现这一点。 这个答案还提供了一些示例“shell”代码。

    run()似乎也有可能使用这个答案

    再说一次,这里没有 Mac,所以我无法测试这个并提供必要的实际代码。

  5. 一旦您可以从该 Swift 函数调用 shell,就可以使用它来调用:

    fish -c "set --universal macOS_Theme 'dark'" # or 'light'
    

    以及你所有的实例应该更新。

相关内容