如何检测MacOS菜单栏文字颜色?Swiftbar SF图像适配需求
解决方案:自动匹配菜单栏文字颜色的Swiftbar SF Symbol
完全可行,以下是具体实现步骤和代码:
核心思路
- 通过命令行调用AppleScript获取系统菜单栏的当前文本颜色
- 将系统返回的颜色值转换为Swiftbar支持的十六进制格式
- 在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
相关产品推荐
相关产品推荐

