
通過三個簡單的步驟在MacOS上添加自定義菜單欄程序:
您可以使用Get Plugins...菜單項從Awesome Bitbar存儲庫中獲得插件,或者在Swiftbar本身中獲取插件。
從github發行下載
或安裝與自製的
brew install swiftbar
在Macos Catalina(10.15)及以上運行。
SwiftBar/SwiftBar.xcodeprojSwiftbar與插件存儲庫捆綁在一起。您可以在Swiftbar→獲取插件...

如果要添加刪除插件或對存儲庫內容有其他疑問,請參考此問題。
要將新插件添加到Swiftbar中,您需要按照所需的格式創建可執行腳本(請參見下文),然後將其放入Plugin Folder中。
通過第一次啟動,Swiftbar將要求您設置Plugin Folder 。 Swiftbar將嘗試將此文件夾中的每個文件作為插件導入。
重要的:
.swiftbarignore文件得到支持,您可以使用它來將文件排除在導入插件之外。您可以通過預處理隱藏文件夾.或使用此命令chflags hidden <folder name> 。
插件文件必須採用以下格式:
{name}.{time}.{ext}
持續時間修飾符:
示例文件名: date.1m.sh
無論您是使用插件存儲庫中的插件還是創建自己的插件,最初都不會以預定的順序出現在菜單欄中。但是,您可以通過按住CMD並拖動它們來重新排序它們的出現(有時也可以在菜單欄中的其他非SwiftBar圖標上使用此過程)。除非您更改插件文件的名稱,否則插件位置將被記住,在這種情況下,需要再次重新定位。
插件是您選擇的語言中的可執行腳本。當Swiftbar檢測到Plugin Folder中的新文件時,請在需要時可執行並運行它。
腳本應以所需格式產生輸出( STDOUT )(請參見下一章)。腳本錯誤應重定向到STDERR 。
插件API是從Bitbar XBAR採用的,這意味著Swiftbar可以運行任何現有的BitBar XBAR插件。
解析插件輸出時,SwiftBar識別以下塊:
Header是先前的一切--- 。每個---在第一個之後,將被解釋為菜單分離器。您的標題中有一條或多條線。
最簡單的插件看起來像:
echo " This is Menu Title "如果提供多個標題,則提供的標題將在菜單欄中循環,並在下拉菜單中顯示:
echo " This is a primary Menu Title "
echo " This is a secondary Menu Title "
echo " This is a n-th Menu Title "
echo " --- "
echo " This is not a Menu Title, this will be shown in the drop-down menu only "標題和車身的腳本輸出都按線( n )拆分。每行必須遵循此格式:
<Item Title> | [param = ...]
在哪裡:
=的鍵值。使用|將參數與標題分開。 文本格式:
| 範圍 | 價值 | 描述 |
|---|---|---|
color | CSS顏色或十六進制, light_color,dark_color | 設置項目文本顏色。如果僅提供一種顏色,則將其用於淺色和黑暗外觀。 |
sfcolor | CSS顏色或十六進制, light_color,dark_color | 設置SF符號顏色。如果僅提供一種顏色,則將其用於淺色和黑暗外觀。如果您名聲多個SF符號,您可以通過添加索引來提供不同的顏色,例如sfcolor2 |
font | MacOS字體名稱 | 設置要在項目文本中使用的字體名稱 |
size | 數字 | 設置項目文本大小 |
md | 真的 | 在菜單標題中啟用Markdown支持**bold**和*italic* |
sfsize | 數字 | 嵌入文本中的SF符號圖像的設置大小 |
length | 數字 | 將項目文本修剪為提供數量的字符。完整標題將顯示在工具提示中。 |
trim | 真的 | 修剪空格字符 |
ansi | 真的 | 支持ANSI顏色代碼的支持。與: symbolize |
emojize | 錯誤的 | 禁用github風格表情符號的解析(例如:mushroom:進入?)。要求:設置為true時symbolize=false 。 |
symbolize | 錯誤的 | 禁用SF符號的解析(例如, "SF Symbols Test :sun.max: :cloud.fill: :gamecontroller.fill: :bookmark: :sun.dust:" → )。總是在卡塔琳娜上False 。 |
視覺效果:
| 範圍 | 價值 | 描述 |
|---|---|---|
dropdown | 錯誤的 | 僅適用於Header中的項目。設置為false時,將不會在下拉菜單中顯示項目,但會在菜單欄中循環。 |
alternate | 真的 | 標記一條線作為前一個行的替代方案,用於在下拉列表中按下選項鍵( ⌥ )時。 |
image | base64, light_image,dark_image中編碼的圖像 | 設置項目的圖像。如果僅提供一張圖像,則將其用於淺色和黑暗外觀。 |
templateImage | base64中編碼的圖像 | 與image相同,但圖像是模板圖像。模板圖像由黑色和透明顏色(以及Alpha通道)組成。模板圖像不打算用作獨立圖像,通常與其他內容混合以創建所需的最終外觀。 |
sfimage | sfsymbol名稱 | 從SF符號設置項目圖像。僅在Big Sur及以上可用。 |
sfconfig | SFSymbol配置 | 為sfimage配置渲染模式。接受一個編碼為base64的JSON,示例JSON {"renderingMode":"Palette", "colors":["red","blue"], "scale": "large", "weight": "bold"} 。原始問題#354 |
checked | 真的 | 在項目的前面設置一個符號。 |
tooltip | 文字 | 為項目設置工具提示。 |
webview | 真的 | 目前提供的HREF作為網絡瀏覽量,而不是標準菜單欄菜單 |
webvieww | 數字 | 設置像素中的WebView寬度 |
webviewh | 數字 | 設置像素的WebView高度 |
行動:
| 範圍 | 價值 | 描述 |
|---|---|---|
refresh | 真的 | 插件腳本將在項目上執行 |
href | 絕對URL | 單擊項目時設置一個要打開的URL |
bash | 絕對文件路徑 | 可執行的腳本以在shell中運行 |
terminal | 錯誤的 | bash腳本將在後台運行,而不是啟動終端 |
params | param0= , param1= , param10= ... | bash腳本的參數 |
shortcut | CMD+選項+T | 分配給項目的熱鍵。如果項目在標題中,HotKey將顯示菜單;否則,Hotkey將啟動相關的動作。 |
運行插件時,Swiftbar設置以下環境變量:
| 多變的 | 價值 |
|---|---|
SWIFTBAR | 1 |
SWIFTBAR_VERSION | 運行的Swiftbar版本號( xyz格式) |
SWIFTBAR_BUILD | 運行的SwiftBar構建號碼( CFBundleVersion ) |
SWIFTBAR_PLUGINS_PATH | Plugin Folder的路徑 |
SWIFTBAR_PLUGIN_PATH | 運行插件的路徑 |
SWIFTBAR_PLUGIN_CACHE_PATH | 緩存到數據文件夾,每個插件的個人 |
SWIFTBAR_PLUGIN_DATA_PATH | 數據文件夾的路徑,每個插件的個人 |
SWIFTBAR_PLUGIN_REFRESH_REASON | 插件刷新原因觸發 |
SWIFTBAR_LAUNCH_TIME | Swiftbar啟動日期和時間,ISO8601 |
OS_APPEARANCE | 當前的MacOS外觀( Light或Dark ) |
OS_VERSION_MAJOR | MacOS版本的第一11 (例如,MacOS 11.0.1) |
OS_VERSION_MINOR | MacOS版本的第二部分( 0 ,MacOS 11.0.1) |
OS_VERSION_PATCH | MacOS版本的1部分(例如,MacOS 11.0.1) |
OS_LAST_SLEEP_TIME | 最後一次睡眠日期和時間,ISO8601。如果Swiftbar啟動以來,如果OS不入睡,則空。 |
OS_LAST_WAKE_TIME | 從睡眠日期和時間開始的最後一次操作系統醒來,ISO8601。如果Swiftbar啟動以來,如果OS不入睡,則空。 |
建議將元數據包括在插件腳本中。元數據在Swiftbar的Aws插件屏幕中使用。 Swiftbar採用Bitbar Xbar建議的元數據格式:
# <xbar.title>Title goes here</xbar.title>
# <xbar.version>v1.0</xbar.version>
# <xbar.author>Your Name</xbar.author>
# <xbar.author.github>your-github-username</xbar.author.github>
# <xbar.desc>Short description of what your plugin does.</xbar.desc>
# <xbar.image>http://www.hosted-somewhere/pluginimage</xbar.image>
# <xbar.dependencies>python,ruby,node</xbar.dependencies>
# <xbar.abouturl>http://url-to-about.com/</xbar.abouturl>
# <xbar.droptypes>Supported UTI's for dropping things on menu bar</xbar.droptypes>
Swiftbar支持這些可選的元數據標誌以隱藏默認菜單項:
# <swiftbar.hideAbout>true</swiftbar.hideAbout>
# <swiftbar.hideRunInTerminal>true</swiftbar.hideRunInTerminal>
# <swiftbar.hideLastUpdated>true</swiftbar.hideLastUpdated>
# <swiftbar.hideDisablePlugin>true</swiftbar.hideDisablePlugin>
# <swiftbar.hideSwiftBar>true</swiftbar.hideSwiftBar>
選項+單擊將顯示所有項目: 
一個特殊標籤可以用作插件名稱中定義的刷新間隔的替代品,Value採用Cron語法:
<swiftbar.schedule>01,16,31,46 * * * *</swiftbar.schedule>
您可以使用Sepparator |配置多個計劃:
<swiftbar.schedule>1 * * * *|2 * * * *</swiftbar.schedule>
<swiftbar.refreshOnOpen>true</swiftbar.refreshOnOpen> - 刷新插件單擊,然後介紹菜單<swiftbar.runInBash>false</swiftbar.runInBash> - 運行時不會包裝bash插件<swiftbar.type>streamable</swiftbar.type> - 標記插件<swiftbar.environment>[var1=default value, var2=default value, ... ]</swiftbar.environment> - 此變量將在插件的環境中傳遞,隨後版本,SwiftBar將為這些變量提供更改值。<swiftbar.persistentWebView>true</swiftbar.persistentWebView> - 使WebView持久,因此它不會在每個菜單欄上重新加載單擊對於二進制插件,可以添加元數據作為擴展文件屬性:
xattr -w "com.ameba.SwiftBar" "$(cat metadata.txt | base64)" <plugin_file>
對於標準類型的插件,Swiftbar期望插件執行是有限的,即,插件運行並帶有輸出到STDOUT:
可選地,可以按可重複的時間表運行標準插件,該插件在插件的文件名或schedule元數據屬性中配置。
此插件類型針對想要使用快捷方式應用程序創建菜單欄項目的人。插件API與標準幾乎相同。創建一個以所需格式輸出文本的快捷方式,在Swiftbar設置的“快捷插件”部分中選擇此快捷方式,您可以使用。
對於快捷插件,Swiftbar提供了一個方便的UI來配置刷新時間表。
示例快捷方式:
短暫的插件通過運行Swiftbar的快捷鍵操作或調用URL方案來按需創建菜單欄項目。插件API與標準幾乎相同。
這是URL方案的參數:
捷徑動作是相當自我解釋的。
該插件類型最適合通知或其他臨時菜單欄項目。
Swiftbar為每個流插件啟動了一個單獨的過程,該過程無限期運行,直到Swiftbar關閉或失敗為止。僅在處理傳入事件時,才應該使用流媒體插件;一個示例可以是金融市場信息從Websocket或CPU加載信息中讀取的遠程計算機信息。
為了讓Swiftbar知道何時更新菜單欄項目,Streamable插件必須使用特殊的行分隔機~~~ 。 Swiftbar將重置此分離器的每次出現的菜單項。
在下面的示例中,Swiftbar將在菜單欄中顯示“測試1”,持續3秒鐘,然後無限期地顯示“測試2”。
#!/bin/bash
#<swiftbar.type>streamable</swiftbar.type>
echo "Test 1"
echo "---"
echo "Test 2"
echo "Test 3"
sleep 3
echo "~~~"
sleep 5
echo "~~~"
echo "Test 2"
您可以使用特殊的元數據屬性<swiftbar.type>streamable</swiftbar.type>將插件標記為流插入
一些註釋:
name可以相同。如果您的插件的filepath是~/Documents/SwiftBar/myplugin.1m.sh ,則名稱為myplugin和ID myplugin.1m.shopen(1)觸發方案URL時,請使用-g防止命令從活動應用中竊取焦點。| 端點 | 範圍 | 描述 | 例子 |
|---|---|---|---|
| 刷新allplugins | 沒有任何 | 強制刷新所有已加載的插件 | swiftbar://refreshallplugins |
| 重新整理 | name或plugin插件名稱 | 用名稱強制刷新插件。如果提供,將其他URL參數暴露為env變量到插件 | swiftbar://refreshplugin?name=myplugin |
| 重新整理 | 從index 0 | 強制刷新插件的位置在Menubar | swiftbar://refreshplugin?index=1 |
| 啟用Plugin | name或plugin插件名稱 | 按名稱啟用插件 | swiftbar://enableplugin?name=myplugin |
| 禁用倍lugin | name或plugin插件名稱 | 按名稱禁用插件 | swiftbar://disableplugin?name=myplugin |
| togglePlugin | name或plugin插件名稱 | 按名稱切換(啟用 disable)插件 | swiftbar://toggleplugin?name=myplugin |
| addplugin | src源URL到插件文件 | 從URL中添加插件 | swiftbar://addplugin?src=https://coolplugin |
| 通知 | name或plugin插件名稱。通知字段: title , subtitle , body 。 href在單擊時打開URL(包括自定義URL方案)。 silent=true禁用聲音 | 顯示通知 | swiftbar://notify?plugin=MyPlugin&title=title&subtitle=subtitle&body=body&silent=true |
| setephemeralplugin | name插件名稱,應該是唯一的。 content - 插件內容, exitafter可選地將Menubar的壽命設置為幾秒鐘 | 創建一個短暫的插件。要刪除現有的短暫插件將其內容設置為一個空字符串"" | swiftbar://setephemeralplugin?name=ephemeral&content=hi |
Swiftbar UI中未暴露的偏好列表:
defaults write com.ameba.SwiftBar StealthMode -bool YES - 當所有插件都禁用時,隱藏了Swiftbar菜單項defaults write com.ameba.SwiftBar DisableBashWrapper -bool YES - 運行時不會包裝bash中的插件defaults write com.ameba.SwiftBar MakePluginExecutable -bool NO禁用auto chmod +x插件目錄中的所有文件defaults write com.ameba.SwiftBar PluginDeveloperMode -bool YES - 啟用偏好中的編輯 - >插件defaults write com.ameba.Swiftbar PluginDebugMode -bool YES - 啟用插件調試視圖defaults write com.ameba.SwiftBar StreamablePluginDebugOutput -bool YES - 啟用debug輸出流插件,swiftbar將在console.app中公開流數據如果插件無法運行Swiftbar,將顯示Console.app查看SwiftBar日誌。
Swiftbar使用以下開源庫:
為了凍結和安全的依賴關係,這些庫是向Swiftbar組織分配的。
Swiftbar可以在這裡翻譯。
如果您喜歡Swiftbar,您也可能會喜歡這些: