You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测MacOS菜单栏文字颜色?Swiftbar SF图像适配需求

解决方案:自动匹配菜单栏文字颜色的Swiftbar SF Symbol

完全可行,以下是具体实现步骤和代码:

核心思路

  1. 通过命令行调用AppleScript获取系统菜单栏的当前文本颜色
  2. 将系统返回的颜色值转换为Swiftbar支持的十六进制格式
  3. 在Swiftbar脚本中动态设置SF Symbol的palette参数

具体实现代码(Bash脚本)

#!/bin/bash
# Swiftbar配置项
# <swiftbar.hideAbout>true</swiftbar.hideAbout>
# <swiftbar.hideRunInTerminal>true</swiftbar.hideRunInTerminal>
# <swiftbar.hideLastUpdated>true</swiftbar.hideLastUpdated>
# <swiftbar.hideDisablePlugin>true</swiftbar.hideDisablePlugin>
# <swiftbar.refreshInterval>5</swiftbar.refreshInterval>

# 获取菜单栏文本颜色的RGB值(系统返回0-65535范围的16位色值)
rgb_raw=$(osascript -e 'tell application "System Events" to tell appearance preferences to get menu bar text color')

# 提取红、绿、蓝三个通道的数值
red=$(echo "$rgb_raw" | awk -F '[{},]' '{print $2}')
green=$(echo "$rgb_raw" | awk -F '[{},]' '{print $3}')
blue=$(echo "$rgb_raw" | awk -F '[{},]' '{print $4}')

# 将16位色值转换为Swiftbar支持的8位十六进制格式
hex_red=$(printf "%02X" $((red / 257)))
hex_green=$(printf "%02X" $((green / 257)))
hex_blue=$(printf "%02X" $((blue / 257)))
menu_color="#$hex_red$hex_green$hex_blue"

# 输出Swiftbar菜单,动态应用颜色
echo ":house.fill: | sf=house.fill palette=$menu_color"
echo "---"
# 这里可以添加你的其他菜单选项
echo "打开设置 | bash='open -a System Preferences' terminal=false"

关键说明

  • 权限设置:第一次运行脚本前,需要在「系统设置-隐私与安全性-辅助功能」中授予终端(Terminal/iTerm)权限,否则osascript无法访问系统外观偏好
  • 颜色转换逻辑:系统返回的RGB值是0-65535的16位整数,除以257(65535÷255≈257)即可得到0-255的8位色值,再转十六进制
  • 刷新机制:脚本设置了5秒刷新间隔,会自动跟随系统壁纸/外观切换更新颜色;若需要实时响应,可以添加launchd监听com.apple.systempreferences.appearancechanged系统通知来触发Swiftbar刷新

内容的提问来源于stack exchange,提问作者theboyler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:55:35