Можно ли установить отдельные конфигурации цвета рыбы для светлой и темной системной темы?

Я использую терминал (Iterm2 Beta), который позволяет установить отдельную тему для светлого и темного режима. Это полезно для изменения цвета фона терминала и контраста с ним различных предустановленных цветов.

Мне было интересно, можно ли также установить отдельную конфигурацию цвета ракушки рыбы для светлого и темного режима. Например, в светлом режиме я бы хотел, чтобы цвета рыб были черными в качестве цвета команды по умолчанию, тогда как в темном режиме я бы хотел, чтобы они были белыми.

Я программно устанавливал цвет с помощью сценария, вдохновленного этой веткой Reddit , но не смог найти простой способ изменить эти цвета с помощью системной темы macOS. Вот моя рыбная функция для изменения темы на темную или светлую.

1 ответ

Я не разбираюсь в Mac, поэтому не могу дать вам здесь пошаговые инструкции, но, надеюсь, смогу изложить части Fish и дать вам несколько советов, которые могут помочь в работе с MacOS.

Я бы разбил это на:

  1. Что-то, что уведомляет все открытые экземпляры оболочки Fish, когда необходимо изменить тему.

    Это будет обрабатываться функцией, которая следит за изменением переменной. Он должен всегда находиться в памяти (в отличие от ленивой загрузки). Хотя вы могли бы создать его в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. Этот пост «Спроси другой стек» привел меня к этому коду Swift , который, похоже, вам понадобится для этого. Что-то вроде:

            DistributedNotificationCenter.default.addObserver(
        forName: Notification.Name("AppleInterfaceThemeChangedNotification"),
        object: nil,
        queue: nil) { (notification) in
            updateFishTheme()
    }
    
  4. The updateFishTheme()необходимо иметь возможность вызывать Fish и устанавливать глобальную переменную. Пример кода там предоставляетshellфункция, которая, вероятно, будет работать для этого с модификацией. Этот ответ SO также предоставляет пример кода «оболочки».

    Оказывается, есть также возможность использоватьrun()за этот ТАК ответ .

    Опять же, здесь нет Mac, поэтому я просто не могу это проверить и предоставить необходимый код.

  5. Как только вы сможете вызвать оболочку из этой функции Swift, используйте ее для вызова:

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

    И все ваши экземпляры должны обновиться.

Другие вопросы по тегам