
Adicione programas de barras de menus personalizadas no macOS em três etapas fáceis:
Você pode obter plugins do Awesome BitBar Repository ou no próprio SwiftBar usando o item de menu Get Plugins...
Download de lançamentos do GitHub
ou instalar com homebrew
brew install swiftbar
Executa no MacOS Catalina (10.15) e para cima.
SwiftBar/SwiftBar.xcodeprojSwiftbar é incluído com um repositório de plug -in. Você pode acessá -lo no Swiftbar → Get Plugins ...

Se você deseja adicionar remover plug -in ou ter outras perguntas sobre o conteúdo do repositório, consulte este problema.
Para adicionar um novo plug -in ao SwiftBar, você precisa criar um script executável seguindo o formato necessário (veja abaixo) e colocá -lo na Plugin Folder .
Com o primeiro lançamento, o Swiftbar solicitará que você defina a Plugin Folder . O Swiftbar tentará importar todos os arquivos nesta pasta como um plug -in.
Importante :
.swiftbarignore é suportado, você pode usá -lo para excluir arquivos de serem importados como plugins. Você pode ocultar uma pasta preventando . ou usando este comando chflags hidden <folder name> .
Os arquivos do plug -in devem adotar o seguinte formato:
{name}.{time}.{ext}
Modificadores de duração:
Exemplo de nome do arquivo: date.1m.sh
Esteja você usando um plug-in do repositório do plug-in ou criando seus próprios, os plugins aparecerão inicialmente na barra de menus em nenhum pedido pré-determinado. No entanto, você pode reordenar como eles aparecem mantendo a CMD e arrastando-os (esse processo às vezes também pode ser usado em outros ícones que não sejam de barra de swift na barra de menus). A posição do plug-in será lembrada, a menos que você altere o nome do arquivo de plug-in; nesse caso, eles precisarão ser reposicionados novamente.
O plug -in é um script executável no idioma de sua escolha. Quando o SwiftBar detecta um novo arquivo na Plugin Folder ele torna esse arquivo executável, se necessário, e o executa.
O script deve produzir saída ( STDOUT ) no formato necessário (consulte o próximo capítulo). Os erros de script devem ser redirecionados para STDERR .
A API do plug -in é adotada no Bitbar xbar, o que significa que o SwiftBar pode executar qualquer plug -in existente do Bitbar XBar.
Quando a saída do plug -in de análise SwiftBar reconhece os seguintes blocos:
Header é tudo antes de primeiro --- . Cada --- Após o primeiro será interpretado como um separador de menu. Você tem uma ou mais linhas no cabeçalho.
O plugin mais simples se parece com o seguinte:
echo " This is Menu Title "Se você fornecer vários títulos, os títulos fornecidos serão ciclados na barra de menus e mostrados no menu suspenso:
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 " A saída de script para cabeçalho e corpo é dividida por linha ( n ). Cada linha deve seguir este formato:
<Item Title> | [param = ...]
Onde:
= . Use | para separar os parâmetros do título. Formatação de texto :
| Parâmetro | Valor | Descrição |
|---|---|---|
color | CSS Color ou Hex, light_color,dark_color | Define a cor do texto do item. Se apenas uma cor for fornecida, ela é usada para aparência clara e escura. |
sfcolor | CSS Color ou Hex, light_color,dark_color | Define a cor do símbolo SF. Se apenas uma cor for fornecida, ela é usada para aparência clara e escura. Se você fama vários símbolos SF, poderá fornecer cores diferentes adicionando índice, como este sfcolor2 |
font | Nome da fonte MacOS | Define o nome da fonte a ser usado no texto do item |
size | Número | Define o tamanho do texto do item |
md | Verdadeiro | Ativa o suporte de rearneamento no título do menu para **bold** e *italic* |
sfsize | Número | Define o tamanho da imagem do símbolo SF incorporado no texto |
length | Número | Apara o texto do item para um número fornecido de caracteres. O título completo será exibido em uma dica de ferramenta. |
trim | Verdadeiro | GRAVAS CARACTERIÕES DA ESPANHO DE WHITESP |
ansi | Verdadeiro | Permite o suporte aos códigos de cores ANSI. Conflitos com: symbolize |
emojize | Falso | Desative a análise dos emojis do estilo Github (por exemplo :mushroom: para?). Requer: symbolize=false ao definir como true. |
symbolize | Falso | Desativa a análise de símbolos SF (por exemplo, "SF Symbols Test :sun.max: :cloud.fill: :gamecontroller.fill: :bookmark: :sun.dust:" → ). Sempre False na Catalina. |
Visuais :
| Parâmetro | Valor | Descrição |
|---|---|---|
dropdown | Falso | Somente aplicável a itens no Header . Quando definido como falso, o item não será exibido no menu suspenso, mas será pedalado na barra de menus. |
alternate | Verdadeiro | Marca uma linha como uma alternativa à anterior para quando a tecla Opção ( ⌥ ) é pressionada no menu suspenso. |
image | Imagem codificada em base64, light_image,dark_image | Define uma imagem para o item. Se apenas uma imagem for fornecida, ela é usada para aparência clara e escura. |
templateImage | Imagem codificada na base64 | O mesmo que image , mas a imagem é uma imagem de modelo. As imagens de modelo consistem em cores pretas e claras (e um canal alfa). As imagens de modelo não se destinam a ser usadas como imagens independentes e geralmente são misturadas com outro conteúdo para criar a aparência final desejada. |
sfimage | Nome do SFSymbol | Define uma imagem para o item do símbolo SF. Disponível apenas em Big Sur e acima. |
sfconfig | Configuração do SFSymbol | Configura o modo de renderização para sfimage . Aceite um JSON codificado como base64, exemplo json {"renderingMode":"Palette", "colors":["red","blue"], "scale": "large", "weight": "bold"} . Edição original #354 |
checked | Verdadeiro | Define uma marca de seleção na frente do item. |
tooltip | Texto | Define uma dica de ferramenta para o item. |
webview | Verdadeiro | Presente fornecido href como uma visualização da web, em vez do menu da barra de menu padrão |
webvieww | Número | Define a largura da WebView em pixels |
webviewh | Número | Define a altura da WebView em pixels |
Ações :
| Parâmetro | Valor | Descrição |
|---|---|---|
refresh | Verdadeiro | O script do plug -in será executado no item Clique |
href | URL absoluto | Define um URL para abrir quando o item clicado |
bash | Caminho de arquivo absoluto | Script executável para executar no shell |
terminal | Falso | O script bash será executado em segundo plano, em vez de lançar o terminal |
params | param0= , param1= , param10= ... | Parâmetros para script bash |
shortcut | Cmd+opção+t | Tecla de atalho atribuída ao item. Se o item estiver no cabeçalho, o Hotkey mostrará o menu; Caso contrário, a Hotkey lançará a ação associada. |
Ao executar um plug -in, o SwiftBar define as seguintes variáveis de ambiente:
| Variável | Valor |
|---|---|
SWIFTBAR | 1 |
SWIFTBAR_VERSION | O número da versão Swiftbar em execução (no formato xyz ) |
SWIFTBAR_BUILD | O número de compilação Swiftbar em execução ( CFBundleVersion ) |
SWIFTBAR_PLUGINS_PATH | O caminho para a Plugin Folder |
SWIFTBAR_PLUGIN_PATH | O caminho para o plugin em execução |
SWIFTBAR_PLUGIN_CACHE_PATH | O cache da pasta de dados, individual por plug -in |
SWIFTBAR_PLUGIN_DATA_PATH | O caminho para a pasta de dados, individual por plug -in |
SWIFTBAR_PLUGIN_REFRESH_REASON | Plug -in Refresh Razão Trigger |
SWIFTBAR_LAUNCH_TIME | Data e hora de lançamento do Swiftbar, ISO8601 |
OS_APPEARANCE | Aparência atual do macOS ( Light ou Dark ) |
OS_VERSION_MAJOR | A primeira parte da versão MacOS (por exemplo, 11 para macOS 11.0.1) |
OS_VERSION_MINOR | A segunda parte da versão MacOS (por exemplo, 0 para MacOS 11.0.1) |
OS_VERSION_PATCH | A terceira parte da versão MacOS (por exemplo, 1 para MacOS 11.0.1) |
OS_LAST_SLEEP_TIME | Última data e hora do sono, ISO8601. Vazio se o OS não dormiu desde o lançamento do Swiftbar. |
OS_LAST_WAKE_TIME | Último SO Wake a partir da data e hora do sono, ISO8601. Vazio se o OS não dormiu desde o lançamento do Swiftbar. |
Recomenda -se incluir metadados no script do plug -in. Os metadados são usados na tela Sobre o plug -in no SwiftBar. Swiftbar adota o formato de metadados sugerido por 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>
O SwiftBar suporta esses sinalizadores de metadados opcionais para ocultar itens de menu padrão:
# <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>
Opção+Clique vai mostrar todos os itens: 
Uma etiqueta especial pode ser usada como uma alternativa para atualizar o intervalo definido no nome do plug -in, o valor adota a sintaxe do CRON:
<swiftbar.schedule>01,16,31,46 * * * *</swiftbar.schedule>
Você pode configurar vários horários, usando o Sepparator | :
<swiftbar.schedule>1 * * * *|2 * * * *</swiftbar.schedule>
<swiftbar.refreshOnOpen>true</swiftbar.refreshOnOpen> - Atualize o plug -in de clique, antes de apresentar o menu<swiftbar.runInBash>false</swiftbar.runInBash> - não envolve plugins em bash ao executar<swiftbar.type>streamable</swiftbar.type> - Marque o plugin como streamable<swiftbar.environment>[var1=default value, var2=default value, ... ]</swiftbar.environment> - Essas variáveis serão passadas no ambiente do plug -in, na liberação posterior SwiftBar fornecerá uma interface do usuário para alterar valores para essas variáveis.<swiftbar.persistentWebView>true</swiftbar.persistentWebView> Para os metadados binários dos plug -ins, pode ser adicionado como um atributo de arquivo estendido:
xattr -w "com.ameba.SwiftBar" "$(cat metadata.txt | base64)" <plugin_file>
Para o tipo padrão de plugins, o Swiftbar espera que a execução do plug -in seja finita, ou seja, o plug -in é executado e sai com saída para o stdout:
Opcionalmente, um plug -in padrão pode ser executado em um cronograma repetível, configurado no nome do arquivo do plug -in ou na propriedade de metadados schedule .
Este tipo de plug -in é destinado a pessoas que desejam usar o aplicativo de atalhos para criar itens de barra de menus. A API do plug -in é praticamente a mesma do padrão. Crie um atalho que produza texto no formato necessário, selecione este atalho na seção de plug -in de atalhos das configurações do Swiftbar e está pronto para ir.
Para plug -ins de atalhos, o SwiftBar fornece uma interface do usuário útil para configurar o cronograma de atualização.
Exemplo de atalhos:
Os plugins efêmeros criam itens de barra de menu sob demanda executando a ação de atalho da Swiftbar ou chamando um esquema de URL. A API do plug -in é praticamente a mesma do padrão.
Aqui estão os parâmetros para o esquema de URL:
A ação de atalhos é bastante auto-explicativa.
Esse tipo de plug -in é mais usado para notificações ou outros itens temporários da barra de menus.
O Swiftbar lança um processo separado para cada plug -in transmitido, que funciona indefinidamente até que o Swiftbar esteja fechado ou uma falha. Você deve usar plug -ins transmissíveis apenas ao lidar com um fluxo de eventos recebidos; Um exemplo pode ser as informações do mercado financeiro lidas em um WebSocket ou informações de carga da CPU para um computador remoto.
Para informar o SwiftBar quando atualizar o item da barra de menus, os plug -ins transmissíveis devem usar um separador de linha especial ~~~ . Swiftbar redefinirá o item de menu em cada ocorrência deste separador.
No exemplo abaixo, o Swiftbar mostrará "Teste 1" na barra de menus por 3 segundos, depois nada por 5 segundos e "teste 2" indefinidamente.
#!/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"
Você pode marcar um plugin como streamable com uma propriedade de metadados especiais <swiftbar.type>streamable</swiftbar.type>
Algumas notas:
name pode ser o mesmo entre vários plugins. Se o filepath do seu plugin for ~/Documents/SwiftBar/myplugin.1m.sh , o nome é myplugin e o id myplugin.1m.shopen(1) para acionar URLs do esquema, use -g para impedir que o comando roube o foco do seu aplicativo ativo.| Endpoint | Parâmetro | Descrição | Exemplo |
|---|---|---|---|
| Refreshallplugins | nenhum | Atualizar forçar todos os plugins carregados | swiftbar://refreshallplugins |
| Refreshplugin | name ou plugin Nome do plug -in | Força o plug -in de atualização por nome. Se fornecido, parâmetros de URL adicionais são expostos como variáveis ENV para o plug -in | swiftbar://refreshplugin?name=myplugin |
| Refreshplugin | Índice de plugins de index em Menubar, a partir de 0 | Força o plug -in de atualização por sua posição em Menubar | swiftbar://refreshplugin?index=1 |
| EnablePlugin | name ou plugin Nome do plug -in | Ativar plugin por nome | swiftbar://enableplugin?name=myplugin |
| Desativeplugin | name ou plugin Nome do plug -in | Desativar o plugin por nome | swiftbar://disableplugin?name=myplugin |
| Toggleplugin | name ou plugin Nome do plug -in | TOGLE (Ativar desabilitar) Plugin por nome | swiftbar://toggleplugin?name=myplugin |
| addplugin | URL de origem src para plug -in Arquivo | Adicione o plug -in ao SwiftBar do URL | swiftbar://addplugin?src=https://coolplugin |
| notificar | name ou plugin Nome do plug -in. Campos de notificação: title , subtitle , body . href para abrir um URL no clique (incluindo esquemas de URL personalizados). silent=true para desativar o som | Mostrar notificação | swiftbar://notify?plugin=MyPlugin&title=title&subtitle=subtitle&body=body&silent=true |
| SetEpheMeralPlugin | name do nome do plug -in, deve ser único. content - Conteúdo do Plugin, exitafter - Opcionalmente define a vida útil do Menubar em segundos | Cria um plug -in efêmero. Para remover o conjunto de plug -in efêmeros existentes, é conteúdo para uma string vazia "" | swiftbar://setephemeralplugin?name=ephemeral&content=hi |
Lista de preferências que não estão expostas na interface do usuário Swiftbar:
defaults write com.ameba.SwiftBar StealthMode -bool YES - Hides SwiftBar Menu Item quando todos os plugins estão desativadosdefaults write com.ameba.SwiftBar DisableBashWrapper -bool YES - não envolve plugins em bash ao executardefaults write com.ameba.SwiftBar MakePluginExecutable -bool NO - desativa o automóvel chmod +x todos os arquivos no diretório do plug -indefaults write com.ameba.SwiftBar PluginDeveloperMode -bool YES -Ativa a edição em preferências -> pluginsdefaults write com.ameba.Swiftbar PluginDebugMode -bool YES - Ativa o plug -in Debug Viewdefaults write com.ameba.SwiftBar StreamablePluginDebugOutput -bool YES - Ativa a saída de depuração para plugins transmissíveis, o SwiftBar exporá os dados do fluxo no console.app Se o plug -in não conseguir executar o Swiftbar, mostraráConsole.app para visualizar os logs SwiftBar.
Swiftbar usa estas bibliotecas de código aberto:
Para congelar e proteger dependências, essas bibliotecas são bifurcadas à Organização Swiftbar.
Swiftbar pode ser traduzido aqui.
Se você gosta de Swiftbar, também pode gostar disso: